Двойной щелчок "Laser On" Двойной щелчок "Laser Off" - Arduino - PullRequest
0 голосов
/ 11 марта 2020

Спасибо всем за ваше время. У меня есть код, что, когда я продолжаю удерживать кнопку, лазер включает «ВЫСОКИЙ», когда я освобождаю палец от кнопки, лазер выключается «НИЗКИЙ»

Но я хочу, чтобы при двойном щелчке лазер включался и когда я снова дважды щелкаю, лазер выключается.

Спасибо и извините за мой плохой Энгли sh.

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 Ответ

0 голосов
/ 12 марта 2020

Вам необходимо сохранить последние два раза, когда был обнаружен щелчок, и затем проверить, достаточно ли они были расположены близко друг к другу. Попробуйте этот код (отредактировано из того, что вы опубликовали):

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]);
      }
  }

}
...