春天花花963 2021-07-08 19:48 采纳率: 0%
浏览 14

arduino两个按键顺序不一样(但是后面都要长按),产生的事件不一样,框架怎么写呢。

救救孩子

arduino两个按键顺序不一样(但是后面都要长按),产生的事件不一样,框架怎么写呢。

  • 写回答

1条回答 默认 最新

  • apples_kk 2023-04-13 09:20
    关注

    定义两个变量 num1 和 num2 用于记录按键顺序,初始值都为0。
    定义两个布尔型变量 button1State 和 button2State 分别记录两个按键当前的状态,初始值都为 HIGH。
    在 loop 函数中,使用 digitalRead() 函数读取两个按键的状态,并保存在上面定义的变量中。
    如果按键1被按下,且 num1 的值为0,那么将 num1 的值设置为1,并记录当前时间为 startTime1。
    如果按键2被按下,且 num2 的值为0,那么将 num2 的值设置为1,并记录当前时间为 startTime2。
    如果按键1和按键2都被按下,并且 num1 和 num2 都为1,那么判断 startTime1 和 startTime2 的时间差,如果时间差小于一定值,执行事件A;否则执行事件B。
    在事件A或事件B被执行后,将 num1 和 num2 的值都设置为0,以便下一次操作。

    int button1Pin = 2; // 按键1的引脚号
    int button2Pin = 3; // 按键2的引脚号
    int button1State = HIGH; // 按键1当前状态
    int button2State = HIGH; // 按键2当前状态
    unsigned long startTime1; // 记录按键1被按下的时间
    unsigned long startTime2; // 记录按键2被按下的时间
    int num1 = 0; // 记录按键1的顺序
    int num2 = 0; // 记录按键2的顺序
    unsigned long debounceTime = 50; // 消除按键抖动的时间
    
    void setup() {
      pinMode(button1Pin, INPUT_PULLUP);
      pinMode(button2Pin, INPUT_PULLUP);
    }
    
    void loop() {
      int button1Reading = digitalRead(button1Pin);
      int button2Reading = digitalRead(button2Pin);
    
      if (button1Reading != button1State) { // 检测按键1状态改变
        if (millis() - startTime1 >= debounceTime) { // 消除按键抖动
          button1State = button1Reading;
          if (button1State == LOW && num1 == 0) { // 检测按键1被按下
            num1 = 1;
            startTime1 = millis();
          }
        }
      }
    
      if (button2Reading != button2State) { // 检测按键2状态改变
        if (millis() - startTime2 >= debounceTime) { // 消除按键抖动
          button2State = button2Reading;
          if (button2State == LOW && num2 == 0) { // 检测按键2被按下
            num2 = 1;
            startTime2 = millis();
          }
        }
      }
    
      if (num1 == 1 && num2 == 1) { // 检测两个按键都被按下
        if (millis() - startTime2 <= debounceTime) { // 检测按键2是被按下后先释放
          // 事件A执行
          num1 = 0;
          num2 = 0;
        } else {
          // 事件B执行
          num1 = 0;
          num2 = 0;
        }
      }
    }
    
    

    这个例子中,两个按键的顺序必须是按键1先被按下,然后按键2被按下,否则事件A和事件B将无法执行。

    您可以根据需要更改 debounceTime 的值来调整消除按键抖动的时间。同时,如果需要改变按键的顺序,您只需要修改 num1 和 num2 的值即可。

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条