Menu
CoddyTech

Переключение при каждом нажатии

Часть раздела Входные сигналы путешествия по Arduino на Coddy. Урок 4 из 22.

До сих пор светодиод повторял поведение кнопки: горел, пока кнопку удерживали, и гас, когда её отпускали. Выключатель лампы работает иначе: нажми один раз, чтобы включить, нажми ещё раз, чтобы выключить. Это называется переключением.

Чтобы переключать состояние, скетч должен заметить момент, когда кнопка нажимается: сейчас она нажата, а при предыдущем выполнении 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), а светодиод — к выводу 13. При каждом нажатии переключайте состояние светодиода:

  • когда кнопку нажимают (LOW сейчас, HIGH в прошлый раз), переключите ledOn
  • сохраните показание в lastReading в конце loop()
  • включите или выключите светодиод в соответствии со значением ledOn

Нажмите Запустить, нажмите кнопку несколько раз, затем нажмите Проверить.

Попробуйте сами

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
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Входные сигналы

Потренируйтесь самостоятельно: Песочница Arduino