ocrobot:alpha:kitone:tutorial11
Debounce(消抖)
这个例子演示了如何消除输入抖动,也就是在一段时间内检查两次来确保按键被按下。如果不消抖,按键一次会被代码识别为多次按下。利用millis()功能来记录按键按下后的时间。
ALPHA MEGA328-U核心
硬件
搭建电路
- ALPHA MEGA328-U模块插入并行扩展版1号槽位。
- ALPHA 11 LED模块插入1号槽位,堆叠于MEGA328-U上。
- ALPHA 微动开关模块插入并行扩展板2号槽位。
- USB线连接计算机与ALPHA MEGA328-U。
代码
/* Debounce 每次按键按下,输入脚从低电平到高电平,输出引脚就被触发从低电平到高电平或者高电平到低电平。 两次触发之间设置一个最小延时来消除抖动。 */ const int buttonPin = 15; // 按键引脚 const int ledPin = 2; // LED int ledState = HIGH; // 输出脚状态 int buttonState; // 读取输入脚 int lastButtonState = LOW; // 上一次读取到的输入状态 long lastDebounceTime = 0; // 最后一次输出脚触发时间 long debounceDelay = 50; // 消抖时间,增加它,如果输出不稳定 void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); // 设置LED状态 digitalWrite(ledPin, ledState); } void loop() { //读取按键状态,存储到变量 int reading = digitalRead(buttonPin); // 检查是否按下按键(也就是输入了low或high),自从上一次按下之后你已经等了很久(忽略噪声的情况下) // 如果按键状态改变,那就是按下了或者是噪声 if (reading != lastButtonState) { // 重置消抖时间 lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // 不管读取到什么,时间已经比消抖延时长,所以认为它是真实的当前状态 // 如果按键状态改变: if (reading != buttonState) { buttonState = reading; // 新的按键状态为high才会触发LED if (buttonState == HIGH) { ledState = !ledState; } } } // 设置LED: digitalWrite(ledPin, ledState); // 存储读取到的信息.后面会变成上次的输入状态: lastButtonState = reading; }
ocrobot/alpha/kitone/tutorial11.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1