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


Эксперимент 27. Электронная игральная кость

Проведем более сложный эксперимент. Создадим действующее и полезное устройство − электронную игральную кость. Она может быть очень полезной при игре в различные настольные игры. По нажатию на кнопку устройство будет генерировать случайное число в промежутке от 1 до 6 и показывать его на 7и сегментном индикаторе.

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

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

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

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

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

Exp28.py
  1. from machine import Pin
  2. import time
  3. import random
  4. _init()
  5.  
  6. button = Pin(0, Pin.IN)
  7. state_old = 1
  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 bit_summ(data):
  28. count = 0
  29. while data:
  30. count += data & 1
  31. data >>= 1
  32. return count
  33.  
  34. def draw_digit(digit):
  35. for el in enumerate(digits[digit]):
  36. if (el[1]):
  37. Pin(segments[el[0]]).on()
  38. else:
  39. Pin(segments[el[0]]).off()
  40.  
  41.  
  42. while True:
  43. random.seed(time.time())
  44. new_state = button.value()
  45. if new_state == 0 and state_old == 1:
  46. rand_bits = random.getrandbits(5)
  47. rand_digit = bit_summ(rand_bits)
  48. rand_digit+=1
  49. draw_digit(rand_digit)
  50. state_old = new_state