Menu
CoddyTech

记住模式

本课属于 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,等等。

challenge icon

挑战

简单

绿色按钮连接到引脚 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 的设置执行
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

无需 delay 的计时中的所有课

自己练习: Arduino 在线编辑器