Menu
CoddyTech

每次按下时切换

本课属于 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,反过来也一样。

challenge icon

挑战

中等

按钮连接在引脚 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
}
quiz icon自我测试

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

输入中的所有课

自己练习: Arduino 在线编辑器