Menu
CoddyTech

用 switch 选择

本课属于 Coddy Arduino 学习旅程的“无需 delay 的计时”单元。第 8 课,共 18 课。

当一个变量可以有多个值,而且每个值都需要执行自己的代码时,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 中的代码行,这称为贯穿执行。

这里的旋钮被分成四个区域。analogRead() 会给出 0 到 1023 的值,除以 256 后会得到一个整数:最下面四分之一区域对应 0,往上依次是 1、2 和 3。每个区域都会让 RGB LED 显示对应的颜色。

challenge icon

挑战

简单

用 switch 把旋钮变成颜色选择器:

  • 区域 0:红色(已写好)
  • 区域 1:绿色
  • 区域 2:蓝色
  • 区域 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 在线编辑器