【问题标题】:Double click "Laser On" Double click "Laser Off" - Arduino双击“Laser On” 双击“Laser Off” - Arduino
【发布时间】:2020-03-11 17:37:50
【问题描述】:

感谢大家的宝贵时间。 我有我的代码,当我按住按钮时,激光会打开“HIGH” 当我从按钮上松开手指时,激光会关闭“LOW”

但是我想当我双击激光打开时,当我再次双击激光关闭时。

谢谢你,对不起我的英语不好。

const int btn = 6;// The push button
int previousButtonStateLAZER = HIGH;   // for btn6

void setup(){
  pinMode(btn, INPUT);
  pinMode (laserPin, OUTPUT);
}

void loop(){
  int buttonStateLAZER = digitalRead(btn);

  // if the button state has changed,
  if (buttonStateLAZER != previousButtonStateLAZER){
    if( buttonStateLAZER == HIGH ) {
      digitalWrite (laserPin, HIGH);
    }else{
      digitalWrite (laserPin, LOW);
    }
  }
  previousButtonStateLAZER = buttonStateLAZER;
}```

【问题讨论】:

  • 1.定义什么是双击。 2. (在纸上)画一个状态机,显示如何在所有状态之间转换。 3. 将这个状态机翻译成代码,只有在你把它画出来之后。
  • 尝试了不同的解决方案,但仍然无法正常工作。
  • 定义双击。您将需要使用 Arduino 的计时器功能。两次单击相隔 1 小时是双击吗?
  • 因为我是 Arduino 世界的新手,所以我需要找到有用的链接、按钮和状态等。顺便说一句,非常感谢你
  • 你知道什么是状态机吗?

标签: c++ c arduino arduino-uno


【解决方案1】:

您需要存储检测到点击的最后两次,然后测试它们是否足够靠近。试试这段代码(根据您发布的内容进行编辑):

const int btn = 6;// The push button
int previousButtonStateLAZER = LOW;   // for btn6

static long releaseTimes[2];
static int releaseIndex = 1;

static int laserStates[2];
static int laserIndex = 0;

void setup(){
  pinMode(btn, INPUT);
  pinMode (laserPin, OUTPUT);

  releaseTimes[0] = 0;
  releaseTimes[1] = 0;

  laserStates[0] = LOW;
  laserStates[1] = HIGH;
}

void loop(){
  int buttonStateLAZER = digitalRead(btn);

  // if the button state has changed,
  if (buttonStateLAZER != previousButtonStateLAZER){
      previousButtonStateLAZER = buttonStateLAZER;

      if (buttonStateLAZER == HIGH) {
          return;
      }

      releaseIndex = 1 - releaseIndex;
      releaseTimes[releaseIndex] = millis();

      if (abs(releaseTimes[0] - releaseTimes[1]) < 800) {
          releaseTimes[0] = 0;
          releaseTimes[1] = 0;
          laserIndex = 1 - laserIndex;
          digitalWrite(laserPin, laserStates[laserIndex]);
      }
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多