Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp5 [2020/05/16 14:50] labuser29products:laboratory_iot:exp5 [2024/11/11 16:40] (текущий) – [Программный код эксперимента] labuser30
Строка 1: Строка 1:
 ===== Эксперимент 5. Эмуляция кнопки с фиксацией ===== ===== Эксперимент 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"]> <file python Exp5.py[enable_line_numbers="2", start_line_numbers_at="1"]>
Строка 25: Строка 40:
     old_button_value = button_value     old_button_value = button_value
 </file> </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>
 +