switchで選択する
CoddyのArduinoジャーニー「delayを使わないタイミング制御」セクションの一部。レッスン 8/18。
1つの変数が複数の値を取り、それぞれの値に専用のコードが必要な場合、if と else if を連ねると長くなります。switch なら同じ処理を、リストのように読みやすく記述できます。
switch (zone) {
case 0:
// zone が 0 のときに実行される
break;
case 1:
// zone が 1 のときに実行される
break;
default:
// どの case にも一致しなかったときに実行される(省略可能)
break;
}switch は番号が一致する case に移動し、その下の行を実行します。break は switch を抜けます。break を忘れると、ボードは次の case の行も実行し続けます。これはフォールスルーと呼ばれます。
ここでは、つまみを4つのゾーンに分けています。analogRead() は0から1023を返し、256で割ると整数になります。下から4分の1の範囲は0、その次が1、2、そして最上部が3です。それぞれのゾーンでRGB LEDに異なる色が表示されます。
チャレンジ
簡単ノブをswitchで色選択器にしましょう:
- ゾーン 0:赤(すでに記述済み)
- ゾーン 1:緑
- ゾーン 2:青
- ゾーン 3:白(3つすべて点灯)
setColor()を使い、各ケースの最後にbreak;を付けましょう。実行を押し、ノブを回してから、チェックを押します。
自分で試してみよう
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void setColor(int red, int green, int blue) {
digitalWrite(redPin, red);
digitalWrite(greenPin, green);
digitalWrite(bluePin, blue);
}
void loop() {
int zone = analogRead(A0) / 256; // 0、1、2、または3
switch (zone) {
case 0:
setColor(HIGH, LOW, LOW); // 赤
break;
// ここにゾーン1、2、3を追加する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
delayを使わないタイミング制御のすべてのレッスン
自分で練習してみよう: Arduinoプレイグラウンド