Проведем еще один эксперимент с индикатором, чтобы закрепить знания. В прошлом эксперименте цифры переключались сами, а теперь мы будем переключать их по нажатию на кнопку. Получится счетчик нажатий на кнопку.
Добавим кнопку к схеме собранной ранее.
Рисунок 1. Электрическая принципиальная схема эксперимента
Токоограничительные резисторы обязательны!
#define BUTTON_PIN 0 bool button_state = LOW; bool button_old_state = LOW; int count = 0; int segments[7] = {14, 13, 4, 5, 12, 16, 15}; // ABCDEFG int digits[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 {0, 1, 1, 0, 0, 0, 0}, // 1 {1, 1, 0, 1, 1, 0, 1}, // 2 {1, 1, 1, 1, 0, 0, 1}, // 3 {0, 1, 1, 0, 0, 1, 1}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 {1, 0, 1, 1, 1, 1, 1}, // 6 {1, 1, 1, 0, 0, 0, 0}, // 7 {1, 1, 1, 1, 1, 1, 1}, // 8 {1, 1, 1, 1, 0, 1, 1}, // 9 }; void draw_time(int digit) { for (int i = 0; i < 7; i++) { } } void setup() { for (int i = 0; i < 7; i++){ } draw_time(count); } void loop() { if (button_state == LOW and button_old_state == HIGH) { count++; if (count > 9) count = 0; draw_time(count); } button_old_state = button_state; }
Объявляем переменные и настраиваем кнопку.
bool button_state = LOW; bool button_old_state = LOW; int count = 0;
В переменную button_state
будем считывать состояние кнопки, d button_sstate_old
— хранить прошлое состояние кнопки, чтобы обнаруживать нажатия, а в count
— хранить количество зарегистрированных нажатий.
Логика работы программы аналогична прошлому эксперименту, кроме основного цикла. Сначала определяем состояние кнопки. Если новое состояние «нажато» и прошлое «не нажато», то увеличиваем значение счетчика нажатий.
if (button_state == LOW and button_old_state == HIGH) { count++;
Проверяем не переполнился ли счетчик, если количество нажатий было больше 9, то обнуляем его. Отображаем текущее состояние счетчика нажатий на дисплее
if (count > 9) count = 0; draw_time(count);
Записываем текущее состояние кнопки как старое.
button_old_state = button_state;