Arduinoをはじめよう Example 03 A

回路は同じ。
スイッチを押すと点灯し続け、
もう一度押すと消灯するように、
コードを書きかえた。

image

スイッチを押すごとに点灯し消灯する

    const int LED = 13;
    const int BTN = 7;
    
    int val = 0;
    int stat = 0;
    
    void setup() {
      pinMode(LED, OUTPUT);
      pinMode(BTN, INPUT);
    }

    void loop() {
      val = digitalRead(BTN);
  
      if (val == HIGH) {
        if (stat == 0) {
          digitalWrite(LED, HIGH);
          stat = 1;
        } else {
          digitalWrite(LED, LOW);
          stat = 0;
        }
      }
    }

stat の on と off は次のように書けると

    stat = 1 - stat

引き算を減らすためではなく、
状態を入れ替えるのに使うとは。

かっこいい。 覚えとこう。

書き直してみた

const int LED = 13;
const int BTN = 7;

int val = 0;
int stat = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT);
}

void loop() {
  val = digitalRead(BTN);
  
  if (val == HIGH) {
    stat = 1 - stat;   
  }
  
  if (stat == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

何度か押すとスイッチが反応しなくなる

何度かボタンを押すうちに、聴かなくなる。

バウンシングと呼ばれる。
ボタンが押されてる間に、
ループが何回も回るため、
stat が激しく書き換わり発生。