Запоминаем режим
Часть раздела Отсчёт времени без 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 и далее.
Задание
ЛегкоЗелёная кнопка подключена к контакту 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. затем выполняем то, что предписывает режим
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Отсчёт времени без delay
1millis()
Часы на millis()Время в unsigned longМигание без задержкиДва светодиода, две скоростиМигание и переключение кнопкойСвет по таймеру4Точное измерение времени
Измерение с помощью micros()Когда millis() переполняетсяСекундомер с кнопкой2Конечные автоматы
Запоминаем режимВыбор с помощью switchИменованные состояния с enumКонечный автомат светофораПереключаем режимы кнопкойПотренируйтесь самостоятельно: Песочница Arduino