第2回 解答例
繰り返しと条件分岐
演習の解答例。まず自分で書いてから読むこと。
1. 0〜9をシリアル出力
void setup() {
Serial.begin(115200);
for (int i = 0; i < 10; i++) {
Serial.println(i);
}
}
void loop() {
}2. LEDを一定回数点滅させる
const int LED_PIN = LED_BUILTIN;
const int BLINK_MS = 200;
void blink(int times) {
for (int i = 0; i < times; i++) {
digitalWrite(LED_PIN, HIGH);
delay(BLINK_MS);
digitalWrite(LED_PIN, LOW);
delay(BLINK_MS);
}
}
void setup() {
pinMode(LED_PIN, OUTPUT);
blink(5);
}
void loop() {
}3. ボタンが押されている間だけLED点灯
const int LED_PIN = LED_BUILTIN;
const int BUTTON_PIN = 9;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
bool pressed = (digitalRead(BUTTON_PIN) == LOW);
digitalWrite(LED_PIN, pressed ? HIGH : LOW);
}なぜwhileで待たないのか
次のように書いても動くが、勧められない。
// 良くない例
while (digitalRead(BUTTON_PIN) == LOW) {
digitalWrite(LED_PIN, HIGH);
}このwhileの中にいる間、他の処理は一切動かない。センサを読む、通信する、別のLEDを制御するといったことが全部止まる。loop()は繰り返し呼ばれるのだから、「1回分の判断」だけを書いて抜けるのが基本である。