用 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 显示对应的颜色。
挑战
简单用 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
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无需 delay 的计时中的所有课
自己练习: Arduino 在线编辑器