每次按下时切换
本课属于 Coddy Arduino 学习旅程的“输入”单元。第 4 课,共 22 课。
到目前为止,LED 一直在模仿按钮:按住时亮起,松开时熄灭。灯的开关工作方式不同:按一次打开,再按一次关闭。这就是切换。
要进行切换,草图必须检测到按钮按下的那一刻:现在按下了,但上一次运行 loop() 时还没有按下。这个时刻称为边沿。在 setup() 上方用一个变量保存上一次的读数,就像计数器一样:
int lastReading = HIGH;
void loop() {
int reading = digitalRead(2);
if (reading == LOW && lastReading == HIGH) {
// 按钮已被按下
}
lastReading = reading;
}按住按钮时,读数会一直是 LOW,所以每次按下只会触发一次边沿,无论你按住多久。
要翻转一个 bool,可以使用 !,它表示“非”:ledOn = !ledOn; 会将 true 变成 false,反过来也一样。
挑战
中等按钮连接在引脚 2(INPUT_PULLUP),LED 连接在引脚 13。每按一次按钮,就切换 LED 的状态:
- 按钮按下时(现在是
LOW,上一次是HIGH),切换ledOn - 在
loop()末尾将读数保存到lastReading - 根据
ledOn的状态点亮或熄灭 LED
按“运行”,按几次按钮,然后按“检查”。
亲手试试
const int buttonPin = 2;
const int ledPin = 13;
bool ledOn = false;
int lastReading = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
// 按下按钮时,切换 ledOn 的值
// 记住这次读取的值,供下次使用
// 根据 ledOn 的值打开或关闭 LED
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
输入中的所有课
自己练习: Arduino 在线编辑器