Эксперимент 27. Счетчик

Проведем еще один эксперимент с индикатором, чтобы закрепить знания. В прошлом эксперименте цифры переключались сами, а теперь мы будем переключать их по нажатию на кнопку. Получится счетчик нажатий на кнопку.

Схема эксперимента

Добавим кнопку к схеме собранной ранее. Рисунок 1. Электрическая принципиальная схема эксперимента

Токоограничительные резисторы обязательны!

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp27.py
  1. from machine import Pin
  2. import time
  3. _init()
  4.  
  5. button = Pin(0, Pin.IN)
  6. state_old = 1
  7. count = 0
  8.  
  9. segments = [14, 13, 4, 5, 12, 16, 15] # ABCDEFG
  10.  
  11. for s in segments:
  12. led = Pin(s, Pin.OUT).off()
  13.  
  14. digits = [
  15. [1, 1, 1, 1, 1, 1, 0], # 0
  16. [0, 1, 1, 0, 0, 0, 0], # 1
  17. [1, 1, 0, 1, 1, 0, 1], # 2
  18. [1, 1, 1, 1, 0, 0, 1], # 3
  19. [0, 1, 1, 0, 0, 1, 1], # 4
  20. [1, 0, 1, 1, 0, 1, 1], # 5
  21. [1, 0, 1, 1, 1, 1, 1], # 6
  22. [1, 1, 1, 0, 0, 0, 0], # 7
  23. [1, 1, 1, 1, 1, 1, 1], # 8
  24. [1, 1, 1, 1, 0, 1, 1], # 9
  25. ]
  26.  
  27. def draw_time(digit):
  28. for el in enumerate(digits[digit]):
  29. if (el[1]):
  30. Pin(segments[el[0]]).on()
  31. else:
  32. Pin(segments[el[0]]).off()
  33.  
  34.  
  35. while True:
  36. new_state = button.value()
  37. if new_state == 0 and state_old == 1:
  38. count = count + 1
  39. if count > 9:
  40. count = 0
  41. state_old = new_state
  42. draw_time(count)

Объявляем переменные и настраиваем кнопку.

  1. button = Pin(0, Pin.IN)
  2. state_old = 1
  3. count = 0

В переменной state_old будем хранить прошлое состояние кнопки, чтобы обнаруживать нажатия, а в count будем хранить количество зарегистрированных нажатий.

Логика работы программы аналогична прошлому эксперименту, кроме основного цикла. Сначала определяем состояние кнопки. Если новое состояние «нажато» и прошлое «не нажато», то увеличиваем значение счетчика нажатий.

  1. new_state = button.value()
  2. if new_state == 0 and state_old == 1:
  3. count = count + 1

Проверяем не переполнился ли счетчик, если количество нажатий было больше 9, то обнуляем его.

  1. if count > 9:
  2. count = 0

Записываем текущее состояние кнопки как старое и отображаем текущее состояние счетчика нажатий на дисплее.

  1. state_old = new_state
  2. draw_time(count)

Дополнительные задания

  • Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы счетчик переключал символы от 0 до F.
  • Сделай обратный счетчик, чтобы его значение уменьшалось при нажатии