読者です 読者をやめる 読者になる 読者になる

落書きノート

ふと自分が気になった事を書いてます

Arduinoをいじる

Arduinoは、本だけ読んで大体のやり方を把握したぐらいなのですが、最近実際に試してみました。

const int LED = 13;
const int BUTTON = 7;

int val = 0;
int old_val = 0;
int state = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  val = digitalRead(BUTTON);

  if((val == HIGH) && (old_val == LOW)){
    state = 1 - state;
    delay(10);
  }

  old_val = val;

  if(state == 1){
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

条件判定がちょっと分かりにくいですが、digitalReadメソッドでボタンの状態を読み取り、if文でLOWからHIGHに切り替わるときだけ判定し、状態を変更します。1からstateを引いて状態を反転させます。そしてvalの状態をold_valに保存します。ここまでは分かるのですが、次回からは条件が判定出来なくなってしまいます。しかし、loopメソッドは逐次実行されるので、digitalReadメソッドでボタンを押していない間はLOWという戻り値が得られるため、変数に設定された値はもとに戻ります。これが分かれば占めたものですね。

実行結果

Jpeg