Это старая версия документа!
Проведем более сложный эксперимент. Создадим действующее и полезное устройство − электронную игральную кость. Она может быть очень полезной при игре в различные настольные игры. По нажатию на кнопку устройство будет генерировать случайное число в промежутке от 1 до 6 и показывать его на 7и сегментном индикаторе.
Оставим собранную ранее схему без изменений.
Рисунок 1. Электрическая принципиальная схема эксперимента
Токоограничительные резисторы обязательны!
#define BUTTON_PIN 0 bool button_state = LOW; bool button_old_state = LOW; int segments[7] = {14, 13, 4, 5, 12, 16, 15}; // ABCDEFG int digits[10][7] = { {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 }; void draw_digit(int digit) { for (int i = 0; i < 7; i++) { } } void setup() { for (int i = 0; i < 7; i++){ } draw_time(0); } void loop() { if (button_state == LOW and button_old_state == HIGH) { } button_old_state = button_state; }
Объявляем переменные и настраиваем кнопку.
button = Pin(0, Pin.IN) state_old = 1 count = 0
В переменной state_old
будем хранить прошлое состояние кнопки.
Рассмотрим основной цикл программы:
while True: new_state = button.value() if new_state == 0 and state_old == 1: rand_bits = random.getrandbits(5) rand_digit = bit_summ(rand_bits) rand_digit+=1 draw_digit(rand_digit) state_old = new_state
В бесконечном цикле программа ждет нажатия на кнопку А
, сравнивая ее текущее состояние с логическим нулем, а предыдущее с логической единицей. Если это состояние обнаружено, то генерируем число, состоящее из 5 случайных битов:
rand_bits = random.getrandbits(5)
Для получения случайного числа воспользуемся функцией random(min, max)
она возвращает случайное число в диапазоне от min до max.
Функция принимает в качестве параметра число и возвращает сумму его бит. Но, как мы помним, мы генерируем 5 бит. Их сумма будет от 0 до 5, а нам нужно число от 1 до 6. Поэтому просто добавляем 1 к полученной сумме, чтобы получить число в требуемом интервале.
rand_digit = bit_summ(rand_bits) rand_digit+=1
Полученное число выводим на индикатор с помощью функции draw_digit
.
draw_digit(rand_digit)
Данная функция полностью скопирована из предыдущего эксперимента без изменений, только тогда она называлась draw_time