===== Эксперимент 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.
* Сделай обратный счетчик, чтобы его значение уменьшалось при нажатии