Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:aruno:exp5 [2020/05/24 15:50] alexnikproducts:aruno:exp5 [2020/08/27 16:16] (текущий) alexnik
Строка 16: Строка 16:
 <file cpp Exp5[enable_line_numbers="2", start_line_numbers_at="1"]> <file cpp Exp5[enable_line_numbers="2", start_line_numbers_at="1"]>
 // инициализация констант // инициализация констант
 +
 #define LED 2 //определение константы LED с номером пина 2 #define LED 2 //определение константы LED с номером пина 2
 #define BUTTON 12 //определение константы BUTTON с номером пина 12 #define BUTTON 12 //определение константы BUTTON с номером пина 12
  
 // инициализация переменных // инициализация переменных
-int switchState = 0; // текущий уровень сигнала пина кнопки +int switchState = 0; // актуальный статус кнопки 
-int oldSwitchState = 0; // уровень сигнала последней проверки пина кнопки +int oldSwitchState = 0; // статус последней проверки кнопки 
-int lightsOn = 0; // статус светодиода on = или off = 0+boolean lightsOn = false; // статус светодиода on = true или off = false
  
 void setup() {  void setup() { 
- pinMode(BUTTON, INPUT); +  pinMode(BUTTON, INPUT); 
- pinMode(LED, OUTPUT);  +  pinMode(LED, OUTPUT);  
-}+ }
  
 void loop() { void loop() {
Строка 35: Строка 36:
       if (switchState == HIGH) {       if (switchState == HIGH) {
         lightsOn = !lightsOn;         lightsOn = !lightsOn;
-      +       
-    +     
-    if(lightsOn) {+   if(lightsOn) {
       digitalWrite(LED, HIGH); // зажигаем светодиод       digitalWrite(LED, HIGH); // зажигаем светодиод
-    +     
     else {     else {
       digitalWrite(LED, LOW); // гасим светодиод       digitalWrite(LED, LOW); // гасим светодиод
-    +     
- }+  }
 </file> </file>
  
Строка 57: Строка 58:
 Если значение переменной **switchState** не равно значению переменной **oldSwitchState** (была нажата кнопка), то мы перезаписываем старое значение на новое и переходим к проверке того, какой именно поступает текущий сигнал. Если сигнал соответствует **HIGH**, то значение переменной **lightsOn** необходимо изменить на противоположное, поскольку была нажата кнопка.\\ Если значение переменной **switchState** не равно значению переменной **oldSwitchState** (была нажата кнопка), то мы перезаписываем старое значение на новое и переходим к проверке того, какой именно поступает текущий сигнал. Если сигнал соответствует **HIGH**, то значение переменной **lightsOn** необходимо изменить на противоположное, поскольку была нажата кнопка.\\
 Обратите внимание, что эта проверка происходит только если выполняется условие предыдущей проверки.\\ Обратите внимание, что эта проверка происходит только если выполняется условие предыдущей проверки.\\
-третий оператор **if** проверяет значение переменной ''lightsOn'', если значение равно **true** то выполняется выражение ''digitalWrite(LED, HIGH);'', светодиод загорается, и будет гореть до тех пор пока не будет нажата кнопка, после этого значение переменной измениться на **false**, и выполнится выражение ''digitalWrite(LED, LOW);'', и светодиод погаснет. +третий оператор **if** проверяет значение переменной ''lightsOn'', если значение равно **true** то выполняется выражение ''digitalWrite(LED, HIGH);'', светодиод загорается, и будет гореть до тех пор пока не будет нажата кнопка, после этого значение переменной измениться на **false**, и выполнится выражение ''digitalWrite(LED, LOW);'', и светодиод погаснет.\\
- +
-==== Дополнительные задания ==== +
- +
-<WRAP center round tip 60%> +
-Модифицируй программу так, чтобы светодиод зажигался или выключался только после двух нажатий. Подсказка: потребуется переменная для хранения количества нажатий. +
-</WRAP>+
  
 +Теперь загрузим скетч в контроллер, но по какой то причине кнопка не всегда срабатывает так как мы задумывали.\\
 +Данную проблему и ее решение рассмотрим в следующем эксперименте.