Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| products:laboratory_iot:exp28 [2021/04/25 16:12] – [Схема эксперимента] labuser29 | products:laboratory_iot:exp28 [2024/11/15 13:32] (текущий) – [Программный код эксперимента] labuser30 | ||
|---|---|---|---|
| Строка 60: | Строка 60: | ||
| while True: | while True: | ||
| - | random.seed(time.time()) | ||
| new_state = button.value() | new_state = button.value() | ||
| if new_state == 0 and state_old == 1: | if new_state == 0 and state_old == 1: | ||
| Строка 69: | Строка 68: | ||
| state_old = new_state | state_old = new_state | ||
| </ | </ | ||
| + | |||
| + | Импортируем библиотеку для работы со случайными числами | ||
| + | <code python [enable_line_numbers=" | ||
| + | import random | ||
| + | </ | ||
| + | |||
| + | Объявляем переменные и настраиваем кнопку. | ||
| + | <code python [enable_line_numbers=" | ||
| + | button = Pin(0, Pin.IN) | ||
| + | state_old = 1 | ||
| + | </ | ||
| + | |||
| + | В переменной '' | ||
| + | |||
| + | Рассмотрим основной цикл программы: | ||
| + | <code python [enable_line_numbers=" | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | В бесконечном цикле программа ждет нажатия на кнопку '' | ||
| + | <code python [enable_line_numbers=" | ||
| + | rand_bits = random.getrandbits(5) | ||
| + | </ | ||
| + | |||
| + | После выполнения этой строки в переменной '' | ||
| + | |||
| + | Чтобы просуммировать биты напишем функцию '' | ||
| + | <code python [enable_line_numbers=" | ||
| + | def bit_summ(data): | ||
| + | count = 0 | ||
| + | while data: | ||
| + | count += data & 1 | ||
| + | data >>= 1 | ||
| + | return count | ||
| + | </ | ||
| + | |||
| + | Функция принимает в качестве параметра число и возвращает сумму его бит. Но, как мы помним, | ||
| + | |||
| + | <code python [enable_line_numbers=" | ||
| + | rand_digit = bit_summ(rand_bits) | ||
| + | rand_digit+=1 | ||
| + | </ | ||
| + | |||
| + | Полученное число выводим на индикатор с помощью функции '' | ||
| + | <code python [enable_line_numbers=" | ||
| + | draw_digit(rand_digit) | ||
| + | </ | ||
| + | Данная функция полностью скопирована из предыдущего эксперимента без изменений, | ||
| + | |||
| + | ==== Дополнительные задания ==== | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | * Добавь визуальный эффект, | ||
| + | </ | ||