Различия

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

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

Следующая версия
Предыдущая версия
products:laboratory_iot_с:exp5 [2024/11/11 16:23] – создано labuser30products:laboratory_iot_с:exp5 [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1
Строка 1: Строка 1:
-===== Эксперимент 5. Эмуляция кнопки с фиксацией ===== 
- 
-Попробуем имитировать кнопку с фиксацией. После первого нажатия на кнопку светодиод зажигается, а гаснет после второго нажатия. Для этой цели можно применять кнопку с механической фиксацией положения включено- выключено, но мы реализуем ее программными средствами. Просто при обработке нажатия на кнопку будем учитывать ее предыдущее состояние и запоминать его. 
-==== Схема эксперимента ==== 
-Схема эксперимента не изменилась по сравнению с прошлым, изменения будут только в программной части 
- 
-{{ :products:esp-iot:exp3.4.png?nolink |}} 
-//Рисунок 1. Электрическая принципиальная схема эксперимента// 
- 
-На рисунке изображен токоограничительный резистор последовательно со светодиодом. При сборке схемы мы не будем устанавливать его сами так как он уже установлен на плате конструктора. 
- 
-Соберем эту схему: 
-{{ :products:esp-iot:exp3.png?direct&600 |}} 
-//Рисунок 2. Монтажная схема эксперимента// 
- 
-==== Программный код эксперимента ==== 
- 
-<file python Exp5.py[enable_line_numbers="2", start_line_numbers_at="1"]> 
-from machine import Pin 
-_init() 
-  
-ButtonPin = 16 
-LedPin = 0 
-old_button_value = 0 
-LedState = 0 
-  
-Button = Pin(ButtonPin, Pin.IN) 
-Led = Pin(LedPin, Pin.OUT) 
-  
-while True: 
-    button_value = Button.value() 
-    if old_button_value != button_value and button_value == 1: 
-        if LedState: 
-            Led.off() 
-            LedState = 0 
-        else: 
-            Led.on() 
-            LedState = 1 
-     
-    old_button_value = button_value 
-</file> 
- 
-Создадим две переменные:  
-  * ''old_button_value'' будем использовать для хранения результата прошлой проверки состояния кнопки. Это нам потребуется для выявления факта нажатия на кнопку. Если при прошлой проверке кнопка была не нажата, а при текущей проверке нажата — значит только что произошло нажатие. 
-  * ''LedState'' будем использовать для хранения текущего состояния светодиода — включен он или выключен. Для того, чтобы менять это состояние на противоположное после фиксации факта нажатия на кнопку. 
- 
-Считываем сосотояние кнопки и проверяем факт нажатия: 
-<code python [enable_line_numbers="2", start_line_numbers_at="13"]> 
-    button_value = Button.value() 
-    if old_button_value != button_value and button_value == 1: 
-</code> 
- 
-Выражение ''old_button_value != button_value'' проверяет факт того, что новое состояние кнопки не равно предыдущему. Оператор ''!='' — оператор неравенства. Выражение ''button_value == 1'' проверяет текущее состояние кнопки. Это выражение истинно, когда кнопка нажата. А между этими двумя выражениями мы применили логический оператор ''and''. Он переводится как И, возвращает истину когда оба выражения (слева и справа от него) истины. Если хотя бы одно из них не выполняется, то и все выражение целиком ложно.  
- 
-Иными словами проверяем условие того, что состояние кнопки изменилось И, что новым состоянием кнопки является нажатое состояние. Это выражение позволяет выявить факт нажатия на кнопку.  
- 
-После регистрации факта нажатии на кнопку нам нужно изменить состояние светодиода на противоположное. Если он был включен — выключаем. Если выключен — включаем. 
- 
-Напоследок обновляем старое состояние состояние кнопки.  
-<code python [enable_line_numbers="2", start_line_numbers_at="22"]> 
-old_button_value = button_value 
-</code> 
- 
- 
- 
- 
- 
-==== Дополнительные задания ==== 
- 
-<WRAP center round tip 60%> 
-Модифицируй программу так, чтобы светодиод зажигался или выключался только после двух нажатий. Подсказка: потребуется переменная для хранения количества нажатий. 
-</WRAP>