记住模式
本课属于 Coddy Arduino 学习旅程的“无需 delay 的计时”单元。第 7 课,共 18 课。
按下按钮只持续一小会儿,但它启动的事情可能持续更久。松开按钮后,要继续执行,草图就必须记住自己正在做什么。用来记录这个状态的变量称为状态或模式:
int mode = 0; // 0 = 关闭,1 = 闪烁把 loop() 分成两部分。首先,输入只改变模式。然后,循环的其余部分根据模式执行相应操作:
// 1. 输入会改变模式
if (digitalRead(blinkButton) == LOW) {
mode = 1;
}
// 2. 模式决定接下来会发生什么
if (mode == 1) {
// 用 millis() 实现闪烁
} else {
digitalWrite(ledPin, LOW);
}每个数字代表草图可以执行的一种操作。在注释中写明每个数字的含义。草图可以根据需要设置任意多个模式:0、1、2、3,等等。
挑战
简单绿色按钮连接到引脚 2,红色按钮连接到引脚 3。
- 绿色按钮将
mode设为 1,红色按钮将它设为 0 - 当
mode为 1 时,引脚 13 上的 LED 使用millis()闪烁,亮 500 ms,灭 500 ms - 当
mode为 0 时,LED 熄灭
按“运行”,按下绿色按钮,松开,然后按下红色按钮。然后按“检查”。
亲手试试
const int ledPin = 13;
const int blinkButton = 2; // 绿色
const int offButton = 3; // 红色
int mode = 0; // 0 = 关闭,1 = 闪烁
unsigned long previousMillis = 0;
int ledState = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(blinkButton, INPUT_PULLUP);
pinMode(offButton, INPUT_PULLUP);
}
void loop() {
// 1. 按钮只改变 mode
// 2. 然后按 mode 的设置执行
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无需 delay 的计时中的所有课
自己练习: Arduino 在线编辑器