Menu
CoddyTech

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に異なる色が表示されます。

challenge icon

チャレンジ

簡単

ノブを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を追加する
  }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

delayを使わないタイミング制御のすべてのレッスン

自分で練習してみよう: Arduinoプレイグラウンド