Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| products:laboratory_iot_с:exp5 [2024/11/11 16:44] – [Программный код эксперимента] labuser30 | products:laboratory_iot_с:exp5 [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ===== Эксперимент 5. Эмуляция кнопки с фиксацией ===== | ||
| - | |||
| - | Попробуем имитировать кнопку с фиксацией. После первого нажатия на кнопку светодиод зажигается, | ||
| - | ==== Схема эксперимента ==== | ||
| - | Схема эксперимента не изменилась по сравнению с прошлым, | ||
| - | |||
| - | {{ : | ||
| - | // | ||
| - | |||
| - | На рисунке изображен токоограничительный резистор последовательно со светодиодом. При сборке схемы мы не будем устанавливать его сами так как он уже установлен на плате конструктора. | ||
| - | |||
| - | Соберем эту схему: | ||
| - | {{ : | ||
| - | // | ||
| - | |||
| - | ==== Программный код эксперимента ==== | ||
| - | |||
| - | <file arduino Exp5.ino[enable_line_numbers=" | ||
| - | #define BUTTON_PIN 16 | ||
| - | #define LED_PIN 0 | ||
| - | |||
| - | bool button_state = 0; | ||
| - | bool button_old_state = 0; | ||
| - | bool led_state = 0; | ||
| - | |||
| - | void setup() { | ||
| - | pinMode(LED_PIN, | ||
| - | pinMode(BUTTON_PIN, | ||
| - | } | ||
| - | |||
| - | void loop() { | ||
| - | button_state = digitalRead(BUTTON_PIN); | ||
| - | if (button_old_state != button_state and button_state == 1) { | ||
| - | if (led_state) { | ||
| - | digitalWrite(LED_PIN, | ||
| - | led_state = 0; | ||
| - | } else { | ||
| - | digitalWrite(LED_PIN, | ||
| - | led_state = 1; | ||
| - | } | ||
| - | } | ||
| - | button_old_state = button_state; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Создадим две новые переменные: | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | Считываем состояние кнопки и проверяем факт нажатия: | ||
| - | <code arduino [enable_line_numbers=" | ||
| - | button_state = digitalRead(BUTTON_PIN); | ||
| - | if (button_old_state != button_state and button_state == 1) | ||
| - | </ | ||
| - | |||
| - | Выражение '' | ||
| - | |||
| - | Иными словами проверяем условие того, что состояние кнопки изменилось И, что новым состоянием кнопки является нажатое состояние. Это выражение позволяет выявить факт нажатия на кнопку. | ||
| - | |||
| - | После регистрации факта нажатии на кнопку нам нужно изменить состояние светодиода на противоположное. Если он был включен — выключаем. Если выключен — включаем. | ||
| - | |||
| - | Напоследок обновляем старое состояние состояние кнопки. | ||
| - | <code arduino [enable_line_numbers=" | ||
| - | button_old_state = button_state; | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ==== Дополнительные задания ==== | ||
| - | |||
| - | <WRAP center round tip 60%> | ||
| - | Модифицируй программу так, чтобы светодиод зажигался или выключался только после двух нажатий. Подсказка: | ||
| - | </ | ||