ZBLOG

按键消抖

按键消抖是处理物理按钮时常见的问题,目的是消除由于机械接触不良导致的瞬间多次触发。以下是一个简单的例子,在 Arduino 中实现按键消抖:

按键消抖示例代码

  1. const int switchPin = 2; // 按钮连接到数字引脚 2
  2. int buttonState; // 当前按钮状态
  3. int lastButtonState = HIGH; // 上一个按钮状态(初始为上拉电阻的高电平)
  4. unsigned long lastDebounceTime = 0; // 上次状态改变的时间
  5. unsigned long debounceDelay = 50; // 消抖延迟时间(毫秒)
  6. int y = 0; // 用于计数的变量
  7. void setup() {
  8. pinMode(switchPin, INPUT_PULLUP); // 设置按钮为输入模式并启用内部上拉电阻
  9. Serial.begin(9600); // 初始化串口监视器(可选,用于调试)
  10. }
  11. void loop() {
  12. Run(); // 调用 Run 函数
  13. }
  14. void Run() {
  15. int reading = digitalRead(switchPin); // 读取当前按钮状态
  16. // 检查按钮状态是否发生变化
  17. if (reading != lastButtonState) {
  18. lastDebounceTime = millis(); // 如果变化,记录当前时间
  19. }
  20. // 如果状态在设定的延迟后仍然稳定,则认为是有效的变化
  21. if ((millis() - lastDebounceTime) > debounceDelay) {
  22. if (reading == LOW && buttonState == HIGH) {
  23. y++; // 按钮被按下,y 加 1
  24. Serial.print("Button pressed! Current count: ");
  25. Serial.println(y);
  26. if (y == 1) {
  27. Motor(200, 200,
  28. 200, 200,
  29. 0, 1,
  30. 0, 1,
  31. 0, 1,
  32. 0, 1);
  33. delay(500); // 电机运行后延迟,可以根据需要调整时间
  34. }
  35. }
  36. buttonState = reading; // 更新按钮状态
  37. }
  38. lastButtonState = reading; // 保存当前状态以便下一次比较
  39. }
  40. // 假定 Motor 函数已经在其它地方定义
  41. void Motor(int param1, int param2, int param3, int param4,
  42. int param5, int param6,
  43. int param7, int param8,
  44. int param9, int param10,
  45. int param11, int param12) {
  46. // 实现你的电机控制逻辑
  47. }

工作原理:

  1. debounceDelay:设置了一个消抖延迟(例如50毫秒),可以根据实际情况进行调整。

  2. 检测状态变化:在每个循环中检查 readinglastButtonState 是否不同。如果有变化,更新 lastDebounceTime 为当前时间。

  3. 确认稳定性:只有当持续稳定超过 debounceDelay 后才会执行按键逻辑,从而确保这是一个有效的按键动作。

  4. 计数和电机控制:如果检测到有效的按钮按下,将 y 加一,并相应地调用电机控制函数。

这个方法可以有效地减少因机械抖动造成的不必要多次触发,如果你还有其他问题或需要进一步的信息,请随时告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19502

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?