プログラムでは同じような処理を一定回数繰り返すことが良くあります。Arduinoにおいてはfor文やwhile文を使って繰り返し処理を行います。
今回はfor文、while文の使い方について学びます。
前回はこちら
for文
まずは3つのLEDを1秒おきに順番に点灯させる処理を考えてみます。
単純に考えると以下の処理になります。
ここで、LEDを点灯し、1秒待って、消灯するという動作が同じパターンで3回繰り返されていることに気が付くと思います。
操作するLEDだけ順番に変えながら繰り返すともう少しシンプルなプログラムに書き換えられそうです。
このようにプログラムでは変数の値を一定ずつ変化させながら繰り返し処理を行うことが良くあります。
for文を使うとこの繰り返しを実現することが出来ます。
for文の書き方とフローチャートは以下の通りです。
for(変数 = 初期値;条件;変数変化の処理){
繰り返す処理内容
}
例えば、デジタルポート2,3,4に接続されたLEDを順に点灯させる処理は以下の通りになります。
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
for (int i = 2; i <= 4; i++) {
digitalWrite(i, HIGH);
delay(1000);
digitalWrite(i, LOW);
}
}
Arduino 実験③
上記の例ではpinModeで1つずつOUTPUTの設定を行いました。
こちらの処理をfor文を使って簡潔に書いてください。
また、LEDを2つ追加し、5個のLEDを順に点灯させるようなプログラム、回路を作ってください。
while文
プログラムの中には決まった回数ではなく、ある条件を満たす間は繰り返しという処理を行う場合も多くあります。
そのような場合にはwhile文を使います。
今回はスイッチが押されるまでは13番ポートのLEDが点灯しており、スイッチが押されたら1秒間隔でLEDが点滅するプログラムを書いてみます。
フローチャートは以下の通りになります。
while文の書き方は以下の通りです。
while(条件){
繰り返す処理
}
条件の内容が満たされる間、あるいは条件の結果が1の間ループし続けます。
よってプログラムは以下のように書けます。
void setup() {
pinMode(13, OUTPUT);
pinMode(2, INPUT);
// スイッチが押されるまで待つ
while(digitalRead(2) == 0) {
}
}
void loop(){
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
}
3行目、5行目スイッチとデジタル入力の使い方は次回詳しく勉強します。
抵抗は10kΩを使っています。
Arduino 実験④
早押しクイズ装置を作成します。
スイッチを2つ、LEDを2つ使い、いずれかのスイッチが押されるまでは消灯。
スイッチ1が押されるとLED1が点灯し、スイッチ2が押されるとLED2が点灯する装置を作ってください。
後からもう片方のスイッチを押してもLEDは光りません。
ヒントはクリック
一度入ったら抜け出せない、無限ループをうまく使います。
while(1){}
次回はこちら