用户工具

站点工具


ocrobot:alpha:kitone:tutorial11

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
ocrobot:alpha:kitone:tutorial11 [2019/07/15 02:32] 董凯萍ocrobot:alpha:kitone:tutorial11 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +~~NOTOC~~
 +====== Debounce(消抖) ======
  
 +<WRAP left round info 100%>
 +这个例子演示了如何消除输入抖动,也就是在一段时间内检查两次来确保按键被按下。如果不消抖,按键一次会被代码识别为多次按下。利用millis()功能来记录按键按下后的时间。
 +</WRAP>
 +
 +
 +===== ALPHA MEGA328-U核心 =====
 +==== 硬件 ====
 +  * [[ocrobot:alpha:parallelexpansion:index|ALPHA 并行扩展板]]
 +  * [[ocrobot:alpha:mega328-u:main|ALPHA MEGA328-U]]
 +  * [[ocrobot:alpha:microswitch:index|ALPHA 微动开关模块]]
 +  * [[ocrobot:alpha:11led:index|ALPHA 11 LED模块]]
 +==== 搭建电路 ====
 +
 +  - ALPHA MEGA328-U模块插入并行扩展版1号槽位。
 +  - ALPHA 11 LED模块插入1号槽位,堆叠于MEGA328-U上。
 +  - ALPHA 微动开关模块插入并行扩展板2号槽位。
 +  - USB线连接计算机与ALPHA MEGA328-U。
 +{{ocrobot:alpha:kitone:led_按键435.png?nolink|}}
 +==== 代码 ====
 +
 +<code cpp>/
 + 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;
 +}</code>
 +
 +[[ocrobot:alpha:kitone:main|返回上一级]]
ocrobot/alpha/kitone/tutorial11.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1