Секундомер с кнопкой
Часть раздела Отсчёт времени без delay путешествия по Arduino на Coddy. Урок 18 из 18.
У секундомера два состояния: запущен и остановлен, и нажатие переключает его из одного в другое. Он измеряет время надёжным способом: сохраните millis() в начале, а в конце вычтите это значение.
if (!running) {
running = true;
startTime = millis();
} else {
running = false;
Serial.println(millis() - startTime);
}Кнопка устраняет дребезг так же, как кнопка режима: реагируйте на изменение показания, а затем подождите 20 мс. После обоих нажатий выдерживается одинаковая пауза в 20 мс, поэтому время между ними остаётся точным.
LED показывает состояние: горит, пока секундомер запущен.
Задание
СреднеКнопка уже считывается, и дребезг устранён; onPress() запускается при каждом нажатии. Напиши onPress():
- если секундомер не запущен: запусти его, сохрани
millis()вstartTimeи включи LED - если он запущен: останови его, выключи LED и выведи время в миллисекундах
Нажми Run, нажми кнопку дважды, затем нажми Check.
Попробуйте сами
const int ledPin = 13;
const int buttonPin = 2;
bool wasPressed = false;
bool running = false;
unsigned long startTime = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
// Вызывается один раз при каждом нажатии.
void onPress() {
// не работает: запустить, запомнить время, включить светодиод
// работает: остановить, выключить светодиод, вывести время в мс
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
onPress();
}
wasPressed = pressed;
delay(20); // дать контактам перестать дребезжать
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Отсчёт времени без delay
1millis()
Часы на millis()Время в unsigned longМигание без задержкиДва светодиода, две скоростиМигание и переключение кнопкойСвет по таймеру4Точное измерение времени
Измерение с помощью micros()Когда millis() переполняетсяСекундомер с кнопкойПотренируйтесь самостоятельно: Песочница Arduino