Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp28 [2024/11/15 13:31] – создано labuser30products:laboratory_iot_c:exp28 [2024/11/15 13:42] (текущий) – [Программный код эксперимента] labuser30
Строка 62: Строка 62:
 </file> </file>
  
-Импортируем библиотеку для работы со случайными числами +Логика программы мало отличается от предыдущего эксперимента. Новым дня нас будет получение случайного значения. Для этого  воспользуемся функцией ''random(min, max)'' она возвращает случайное число в диапазоне от min до max. 
-<code python [enable_line_numbers="2"start_line_numbers_at="3"]> +Чтобы не заводить дополнительные переменные, мы сразу передаем результат функции ''random()'' в функцию ''draw_digit''. Данная функция полностью скопирована из предыдущего эксперимента без измененийтолько тогда она называлась ''draw_time'' 
-import random + 
-</code>+
  
-Объявляем переменные и настраиваем кнопку. +Полученное число выводим на индикатор с помощью функции ''draw_digit''
-<code python [enable_line_numbers="2", start_line_numbers_at="6"]> +<code arduino [enable_line_numbers="2", start_line_numbers_at="39"]> 
-button = Pin(0Pin.IN) +    draw_time(random(17));
-state_old = 1 +
-count = 0+
 </code> </code>
  
-В переменной ''state_old'' будем хранить прошлое состояние кнопки.  
- 
-Рассмотрим основной цикл программы: 
-<code python [enable_line_numbers="2", start_line_numbers_at="42"]> 
-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> 
- 
-В бесконечном цикле программа ждет нажатия на кнопку ''А'', сравнивая ее текущее состояние с логическим нулем, а предыдущее с логической единицей. Если это состояние обнаружено, то генерируем число, состоящее из 5 случайных битов: 
-<code python [enable_line_numbers="2", start_line_numbers_at="45"]> 
-        rand_bits = random.getrandbits(5) 
-</code> 
- 
-После выполнения этой строки в переменной ''rand_bits'' окажется число длинной 5 бит. Каждый бит может быть либо 0 либо 1. Минимальное число 0b00000 максимальное 0b11111, что в десятичной системе счисления от 0 до 31. Но нам для игральной кости нужно получить числа от 1 до 5. Чтобы получить число в нужном интервале проще всего сложить все биты между собой по отдельности. То есть найти сумму бит. Например в числе 0b10010 два единичных бита, значит сумма бит равна 2, а в числе 0b11101 сумма бит равна 4. 
- 
-Чтобы просуммировать биты напишем функцию ''bit_summ'': 
-<code python [enable_line_numbers="2", start_line_numbers_at="27"]> 
-def bit_summ(data): 
-    count = 0 
-    while data: 
-        count += data & 1 
-        data >>= 1 
-    return count 
-</code> 
- 
-Функция принимает в качестве параметра число и возвращает сумму его бит. Но, как мы помним, мы генерируем 5 бит. Их сумма будет от 0 до 5, а нам нужно число от 1 до 6. Поэтому просто добавляем 1 к полученной сумме, чтобы получить число в требуемом интервале. 
- 
-<code python [enable_line_numbers="2", start_line_numbers_at="46"]> 
-        rand_digit = bit_summ(rand_bits) 
-        rand_digit+=1 
-</code> 
- 
-Полученное число выводим на индикатор с помощью функции ''draw_digit''. 
-<code python [enable_line_numbers="2", start_line_numbers_at="48"]> 
-        draw_digit(rand_digit) 
-</code> 
-Данная функция полностью скопирована из предыдущего эксперимента без изменений, только тогда она называлась ''draw_time'' 
  
 ==== Дополнительные задания ==== ==== Дополнительные задания ====