Menu
CoddyTech

Запоминаем режим

Часть раздела Отсчёт времени без delay путешествия по Arduino на Coddy. Урок 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 мигает с помощью millis(): 500 мс горит и 500 мс не горит
  • когда mode равен 0, светодиод выключен

Нажми Run, нажми зелёную кнопку, отпусти её, затем нажми красную. Затем нажми Check.

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

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. кнопки только меняют режим

  // 2. затем выполняем то, что предписывает режим
}
quiz iconПроверьте себя

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

Все уроки раздела Отсчёт времени без delay

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