===== Эксперимент 27. Электронная игральная кость ===== Проведем более сложный эксперимент. Создадим действующее и полезное устройство − электронную игральную кость. Она может быть очень полезной при игре в различные настольные игры. По нажатию на кнопку устройство будет генерировать случайное число в промежутке от 1 до 6 и показывать его на 7и сегментном индикаторе. ==== Схема эксперимента ==== Оставим собранную ранее схему без изменений. {{ :products:esp-iot:exp11_sch.png?nolink |}} //Рисунок 1. Электрическая принципиальная схема эксперимента// Токоограничительные резисторы обязательны! {{ :products:esp-iot:exp11_mont.png?direct&600 |}} //Рисунок 2. Монтажная схема эксперимента// ==== Программный код эксперимента ==== #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++) { if (digits[digit][i]) digitalWrite(segments[i], HIGH); else digitalWrite(segments[i], LOW); } } void setup() { for (int i = 0; i < 7; i++){ pinMode(segments[i], OUTPUT); } pinMode(BUTTON_PIN, INPUT); draw_time(0); } void loop() { button_state = digitalRead(BUTTON_PIN); if (button_state == LOW and button_old_state == HIGH) { draw_time(random(1, 7)); } button_old_state = button_state; } Логика программы мало отличается от предыдущего эксперимента. Новым дня нас будет получение случайного значения. Для этого воспользуемся функцией ''random(min, max)'' она возвращает случайное число в диапазоне от min до max. Чтобы не заводить дополнительные переменные, мы сразу передаем результат функции ''random()'' в функцию ''draw_digit''. Данная функция полностью скопирована из предыдущего эксперимента без изменений, только тогда она называлась ''draw_time'' Полученное число выводим на индикатор с помощью функции ''draw_digit''. draw_time(random(1, 7)); ==== Дополнительные задания ==== * Добавь визуальный эффект, чтобы при нажатии на кнопку на дисплее пробегали несколько цифр, прежде чем выводился бы результат