===== Эксперимент 27. Счетчик ===== Проведем еще один эксперимент с индикатором, чтобы закрепить знания. В прошлом эксперименте цифры переключались сами, а теперь мы будем переключать их по нажатию на кнопку. Получится счетчик нажатий на кнопку. ==== Схема эксперимента ==== Добавим кнопку к схеме собранной ранее. {{ :products:esp-iot:exp11_sch.png?nolink |}} //Рисунок 1. Электрическая принципиальная схема эксперимента// Токоограничительные резисторы обязательны! {{ :products:esp-iot:exp11_mont.png?direct&600 |}} //Рисунок 2. Монтажная схема эксперимента// ==== Программный код эксперимента ==== from machine import Pin import time _init() button = Pin(0, Pin.IN) state_old = 1 count = 0 segments = [14, 13, 4, 5, 12, 16, 15] # ABCDEFG for s in segments: led = Pin(s, Pin.OUT).off() digits = [ [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 ] def draw_time(digit): for el in enumerate(digits[digit]): if (el[1]): Pin(segments[el[0]]).on() else: Pin(segments[el[0]]).off() while True: new_state = button.value() if new_state == 0 and state_old == 1: count = count + 1 if count > 9: count = 0 state_old = new_state draw_time(count) Объявляем переменные и настраиваем кнопку. button = Pin(0, Pin.IN) state_old = 1 count = 0 В переменной ''state_old'' будем хранить прошлое состояние кнопки, чтобы обнаруживать нажатия, а в ''count'' будем хранить количество зарегистрированных нажатий. Логика работы программы аналогична прошлому эксперименту, кроме основного цикла. Сначала определяем состояние кнопки. Если новое состояние "нажато" и прошлое "не нажато", то увеличиваем значение счетчика нажатий. new_state = button.value() if new_state == 0 and state_old == 1: count = count + 1 Проверяем не переполнился ли счетчик, если количество нажатий было больше 9, то обнуляем его. if count > 9: count = 0 Записываем текущее состояние кнопки как старое и отображаем текущее состояние счетчика нажатий на дисплее. state_old = new_state draw_time(count) ==== Дополнительные задания ==== * Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы счетчик переключал символы от 0 до F. * Сделай обратный счетчик, чтобы его значение уменьшалось при нажатии