网站模板文件在哪里下载/宁波网络推广外包

网站模板文件在哪里下载,宁波网络推广外包,企业邮箱 888 密码 888,php做网站图集检测GPIO高低电平 1. 中断 2. 轮询 gpio.ino // GPIO按键输入 // 监听高电平接线图 // ESP8266 NodeMCU // ┌───────────┐ // │ D1(GPIO5) │──────┤按键一端 // │ │ │ // │ 3V3 │──────┤按键另一端 // └───…

 检测GPIO高低电平

1.  中断

2.  轮询

gpio.ino

复制代码

// ============ GPIO按键输入 ============// 监听高电平接线图
// ESP8266 NodeMCU
// ┌───────────┐
// │   D1(GPIO5)  │──────┤按键一端
// │           │      │
// │   3V3     │──────┤按键另一端
// └───────────┘// 监听低电平接线图
// ESP8266 NodeMCU
// ┌───────────┐
// │   D1(GPIO5)  │──────┤按键一端
// │           │      │
// │   GND     │──────┤按键另一端
// └───────────┘#include "button.h"  // 添加按钮头文件
#include "gpioinput.h"  #define ISR_PREFIX ICACHE_RAM_ATTR
Button button1(D1); // 中断模式,监听高电平信号
GPIOInput button2(D2, 20, 5);// 轮询模式void setup() {Serial.begin(9600);  // 先初始化串口Serial.println("MCU RUN");  // 再输出信息button1.setCallback([](){ if (HIGH == digitalRead(D1)) {Serial.printf("Button1 Pressed,%d\n", digitalRead(D1));} });button1.begin();  
}void loop() {  int val = button2.read();if (val == LOW) {  // LOW HIGHSerial.println("按钮按下!");  } delay(100);  
}

复制代码

button.h

复制代码

#ifndef Button_H
#define Button_H#include <Arduino.h>
#include <functional>class Button {
public:typedef std::function<void()> Callback;Button(uint8_t pin);void begin();void setCallback(Callback cb);private:uint8_t pin;Callback pressedCallback;static Button* instance;static void IRAM_ATTR isrHandler();
};#endif 

复制代码

button.cpp

复制代码

#include "Button.h"Button* Button::instance = nullptr;Button::Button(uint8_t pin)  : pin(pin) {instance = this;
}void Button::setCallback(Callback cb) {pressedCallback = cb;
}void Button::begin() {pinMode(pin, INPUT_PULLUP);// INPUT(输入) OUTPUT(输出) INPUT_PULLUP(上拉输入) INPUT_PULLDOWN(下拉输入)attachInterrupt(digitalPinToInterrupt(pin), isrHandler, CHANGE);// RISING(上升沿L->H) FALLING(下降沿H->L) CHANGE(改变时)
}void IRAM_ATTR Button::isrHandler() { Serial.printf("Current Value,%d\n", digitalRead(D1));// 硬件去抖处理(通过使用电容器和电阻器电路来进行去抖动)  if (instance->pressedCallback) {instance->pressedCallback();} 
} 

复制代码

gpioinput.h

复制代码

#ifndef GPIOINPUT_H  
#define GPIOINPUT_H  #include <Arduino.h>  class GPIOInput {  
public:  // 构造函数  GPIOInput(int pin, int checkInterval, int checkCount);// 轮询方法, 返回当前状态  int read();  private:int pin = 0;int checkInterval = 0;int checkIndex = -1;int checkCount = 0;long checkTime = 0; int stateOld = 0;int stateTemp = 0; 
};  #endif // GPIOINPUT_H

复制代码

gpioinput.cpp

复制代码

#include "gpioinput.h"  // 构造函数  
GPIOInput::GPIOInput(int pin, int checkInterval, int checkCount) : pin(pin), checkInterval(checkInterval), checkCount(checkCount) {pinMode(pin, INPUT);  stateOld = stateTemp = digitalRead(pin);Serial.println("pin input:" + String(pin));
}  // 轮询读取引脚状态  
int GPIOInput::read() {  if ((0 != checkIndex) && (millis() - checkTime) <= checkInterval) return -1;// 过滤中间时段的数据int state = digitalRead(pin); if (state != stateTemp){checkIndex = 0;stateOld = stateTemp;}else{if (state != stateOld){checkIndex++;checkTime = millis();}}stateTemp = state;int ret = -1; if (checkIndex == checkCount) {checkIndex = 0;if (stateOld != state) {stateOld = state;ret = state;}}return ret;  
}

复制代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA简介|结构、组成和应用

Field Programmable Gate Arrays&#xff08;FPGA&#xff0c;现场可编程逻辑门阵列&#xff09;&#xff0c;是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物&#xff0c; 是作为专用集成电路&#xff08;ASIC&#xff09;领域中的一种半定制电路而出现的&#xff0c…

WPF的MVVMLight框架

在NuGet中引入该库&#xff1a; MVVMLight框架中的命令模式的使用&#xff1a; <StackPanel><TextBox Text"{Binding Name}"/><TextBox Text"{Binding Title}"/><Button Content"点我" Command"{Binding ShowCommand…

地平线征程6全球首发上车比亚迪,开启大规模量产交付

2月10日&#xff0c;比亚迪举办智能化战略发布会&#xff0c;对外正式公布全民智驾战略&#xff0c;并发布全新天神之眼高阶智驾系统。未来&#xff0c;比亚迪全系车型将搭载天神之眼高阶智驾系统。 值得注意的是&#xff0c;地平线最新一代车载智能计算方案征程6系列全球首发…

深度学习04 数据增强、调整学习率

目录 数据增强 常用的数据增强方法 调整学习率 学习率 调整学习率 ​调整学习率的方法 有序调整 等间隔调整 多间隔调整 指数衰减 余弦退火 ​自适应调整 自定义调整 数据增强 数据增强是通过对训练数据进行各种变换&#xff08;如旋转、翻转、裁剪等&#xff09;&am…

Lineageos 22.1(Android 15) 编译隐藏API的 android.jar

一、前言 有时候会我们开发系统应用需要一些系统的方法或者属性之类的,但是被隐藏导致无法正常显示,因为SDK提供的android.jar被隐藏了,所以只能看到sourcecode,实际上编译是会报错的,比如: 一般这种无法是两种,直接添加一个类,同包名同类名,或者依赖framework.jar,可以骗过…

Game Maker 0.11:《The Sandbox》创作愿景的全新篇章

开放元宇宙已经到来&#xff0c;用户生成内容&#xff08;UGC&#xff09;是其核心。在《The Sandbox》中&#xff0c;我们正在重新定义数字创作&#xff0c;给予新一代创作者工具&#xff0c;打造沉浸式、互动式的游戏和体验&#xff0c;超越传统的短格式内容。在过去的12个月…

(8/100)每日小游戏平台系列

项目地址位于&#xff1a;小游戏导航 新增一个打地鼠游戏&#xff01; 打地鼠&#xff08;Whack-a-Mole&#xff09;是一款经典的休闲游戏&#xff0c;玩家需要点击随机出现的地鼠&#xff0c;以获取分数。游戏时间有限&#xff0c;玩家需要在规定时间内尽可能多地击中地鼠&am…

【动态规划篇】:动态规划中的“双线叙述”--如何用状态转移解决双序列难题

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;动态规划篇–CSDN博客 文章目录 一.双序列类DP解题步骤 二.例题1.最长公共子序列2.不相交的…

观察者模式说明(C语言版本)

观察者模式主要是为了实现一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己。下面使用C语言实现了一个具体的应用示例&#xff0c;有需要的可以参考…

yolo11s rknn无法detect的bugfix - step by step

1.缘起 上周四下班时&#xff0c;发现在宿主机环境工作良好的既有的pytorch模型&#xff0c;在通过.pt->.onnx->.rknn的转换后无法正常工作。周五下班时&#xff0c;怀疑疑点在两处&#xff1a; 版本匹配问题通道和参数传递问题。 周六&#xff0c;周日&#xff0c;周…

前端JS接口加密攻防实操

前端JS接口加密攻防实操 背景 在爬虫过程中&#xff0c;对数据接口各类加密的经历总结&#xff0c;无头消耗资源效率不高&#xff0c;采用浏览器兜底解密协程并行 青铜版(混淆对称加密|签名nonce等&#xff09; 解&#xff1a;根据API 调用栈&#xff0c;断点找到request参…

15.3 多线程3

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 15.3.6 线程返回值 如果需要从线程的方法中获得计算的值&#xff0c;可以考虑使用模块级公共变量&#xff0c;在线程对应的方法中最…

【Kubernetes】k8s 部署指南

1. k8s 入门 1.1 k8s 简介 需要最需要明确的就是&#xff1a;kubernetes&#xff08;简称 k8s &#xff09; 是一个 容器编排平台 &#xff0c;换句话说就是用来管理容器的&#xff0c;相信学过 Docker 的小伙伴对于容器这个概念并不陌生&#xff0c;打个比方&#xff1a;容器…

Spring AI接入DeepSeek:快速打造微应用

随着DeepSeek-R1的官宣开源&#xff0c;DeepSeek迅速成为AI领域的热门话题&#xff0c;吸引了大量开发者和研究者的关注。这一开源举措不仅推动了技术的普及&#xff0c;也促使更多企业和机构加入到开源生态中。例如&#xff0c;国内大厂X度于2月14日宣布将在未来几个月推出文新…

MyBatis映射文件常用元素详解与示例

引言 MyBatis是一个优秀的持久层框架&#xff0c;它支持定制化SQL、存储过程以及高级映射。MyBatis的配置文件和映射文件分离&#xff0c;映射文件用于定义SQL语句和结果映射。本文将介绍MyBatis映射文件中常用的元素及其示例用法。 一、基础CRUD元素 1. <mapper> 作用…

Dav_笔记14:优化程序提示 HINTs -4

指定全局表提示 指定表的提示通常是指发生提示的DELETE&#xff0c;SELECT或UPDATE查询块中的表&#xff0c;而不是指语句引用的任何视图中的表。 如果要为显示在视图中的表指定提示&#xff0c;Oracle建议使用全局提示&#xff0c;而不是在视图中嵌入提示。 您可以使用包含具…

rocketmq-netty通信设计-request和response

1、NettyRemotingServer启动分析 org.apache.rocketmq.remoting.netty.NettyRemotingServer#start public void start() {this.defaultEventExecutorGroup new DefaultEventExecutorGroup(nettyServerConfig.getServerWorkerThreads(),new ThreadFactory() {private AtomicI…

Datawhale 数学建模导论二 笔记1

第6章 数据处理与拟合模型 本章主要涉及到的知识点有&#xff1a; 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论&#xff0c;如果对这部分内容不熟悉&#xff0c;可以参考相关概率论与数理统计的…

算法笔记——字典树

什么是字典树&#xff1f; 一棵字典树树就像一个小型字典一样&#xff0c;当你拿到一个字想去字典上查的时候&#xff08;以拼音查法为例&#xff09;&#xff0c;你会先查这个拼音的开头字母&#xff0c;然后在按需查找他下一个字母直到找到相对应的拼音才可以。字典树也是如此…

Unity Shader Graph 2D - Procedural程序化图形之渐变的正弦波形

前言 正弦波形也是一种常用、常见的程序化图形&#xff0c;合理的使用正弦波形会创作出一些有趣、美观和丰富的效果&#xff0c;本文将使用Unity Shader Graph来实现一个正弦波形效果&#xff0c;帮助理解和实践Unity Shader Graph以及正弦函数。 创建一个名为SineWave的Shader…