Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
products:laboratory_iot:exp5 [2020/05/16 15:21] – [Программный код эксперимента] labuser29 | products:laboratory_iot:exp5 [2024/11/11 16:40] (текущий) – [Программный код эксперимента] labuser30 |
---|
===== Эксперимент 5. Эмуляция кнопки с фиксацией ===== | ===== Эксперимент 5. Эмуляция кнопки с фиксацией ===== |
| |
Попробуем создать имитировать кнопку с фиксацией. После первого нажатия на кнопку светодиод зажигается, а гаснет после второго нажатия. Для этой цели можно применять кнопку с механической фиксацией положения включено- выключено, но мы реализуем ее программными средствами. Просто при обработке нажатия на кнопку будем учитывать ее предыдущее состояние и запоминать его. | Попробуем имитировать кнопку с фиксацией. После первого нажатия на кнопку светодиод зажигается, а гаснет после второго нажатия. Для этой цели можно применять кнопку с механической фиксацией положения включено- выключено, но мы реализуем ее программными средствами. Просто при обработке нажатия на кнопку будем учитывать ее предыдущее состояние и запоминать его. |
==== Схема эксперимента ==== | ==== Схема эксперимента ==== |
Схема эксперимента не изменилась по сравнению с прошлым, изменения будут только в программной части | Схема эксперимента не изменилась по сравнению с прошлым, изменения будут только в программной части |
| |
{{ :products:esp-iot:exp3.4.png?direct |}} | {{ :products:esp-iot:exp3.4.png?nolink |}} |
//Рисунок 4. Электрическая принципиальная схема эксперимента// | //Рисунок 1. Электрическая принципиальная схема эксперимента// |
| |
На рисунке изображен токоограничительный резистор последовательно со светодиодом. При сборке схемы мы не будем устанавливать его сами так как он уже установлен на плате конструктора. | На рисунке изображен токоограничительный резистор последовательно со светодиодом. При сборке схемы мы не будем устанавливать его сами так как он уже установлен на плате конструктора. |
Соберем эту схему: | Соберем эту схему: |
{{ :products:esp-iot:exp3.png?direct&600 |}} | {{ :products:esp-iot:exp3.png?direct&600 |}} |
//Рисунок 5. Монтажная схема эксперимента// | //Рисунок 2. Монтажная схема эксперимента// |
| |
==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== |
* ''old_button_value'' будем использовать для хранения результата прошлой проверки состояния кнопки. Это нам потребуется для выявления факта нажатия на кнопку. Если при прошлой проверке кнопка была не нажата, а при текущей проверке нажата — значит только что произошло нажатие. | * ''old_button_value'' будем использовать для хранения результата прошлой проверки состояния кнопки. Это нам потребуется для выявления факта нажатия на кнопку. Если при прошлой проверке кнопка была не нажата, а при текущей проверке нажата — значит только что произошло нажатие. |
* ''LedState'' будем использовать для хранения текущего состояния светодиода — включен он или выключен. Для того, чтобы менять это состояние на противоположное после фиксации факта нажатия на кнопку. | * ''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> |
| |