Это старая версия документа!


Эксперимент 26. Секундомер

Научившись подключать и управлять светодиодным индикатором попробуем использовать его для отображения данных. Сконструируем простейший секундомер, который отсчитывает и отображает секунды от 0 до 9.

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

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

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

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

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

Exp25.py
  1. from machine import Pin
  2. import time
  3. _init()
  4.  
  5. segments = [14, 13, 4, 5, 12, 16, 15] # ABCDEFG
  6.  
  7. digits = [
  8. [1, 1, 1, 1, 1, 1, 0], # 0
  9. [0, 1, 1, 0, 0, 0, 0], # 1
  10. [1, 1, 0, 1, 1, 0, 1], # 2
  11. [1, 1, 1, 1, 0, 0, 1], # 3
  12. [0, 1, 1, 0, 0, 1, 1], # 4
  13. [1, 0, 1, 1, 0, 1, 1], # 5
  14. [1, 0, 1, 1, 1, 1, 1], # 6
  15. [1, 1, 1, 0, 0, 0, 0], # 7
  16. [1, 1, 1, 1, 1, 1, 1], # 8
  17. [1, 1, 1, 1, 0, 1, 1], # 9
  18. ]
  19.  
  20.  
  21. def draw_time(digit):
  22. for el in enumerate(digit):
  23. if (el[1]):
  24. Pin(segments[el[0]]).on()
  25. else:
  26. Pin(segments[el[0]]).off()
  27.  
  28.  
  29. while True:
  30. for digit in digits:
  31. draw_time(digit)
  32. time.sleep(1)

В этой программе мы записали номера выводов микроконтроллера, к которым подключены сегменты индикатора, в массив segments. Порядок перечисления сегментов указан в комментарии в этой строке.

Комментарии используются в программах, чтобы записать какие либо пояснения к коду, и предназначены только для человека, который читает код. Комментарии никак не влияют на выполнение программы. В языке Python комментарий начинается с символа #. Также часто комментируют части кода, которые не должны исполняться, но удалять совсем их пока не нужно.

В строке 7 объявляем массив, в котором описываем цифры от 0 до 9 и какие сегменты должны светиться на индикаторе, чтобы эту цифру отобразить, а какие должны быть потушены. Для описания этого мы использовали двумерный массив. Это массив, у которого каждый из элементов является тоже массивом. Посмотрим внимательнее: элементом под индексом 0 у массива digits является массив [1, 1, 1, 1, 1, 1, 0]

  1. for s in segments:
  2. led = Pin(s, Pin.OUT).off()