Продолжаем эксперименты с кнопкой. Используем схему с предыдущего урока, только
теперь попробуем зажигать установленный на плате Ардуино светодиод L. Этот
светодиод уже подключен к выводу 13.
Загружаем скетч:
boolean btn; // Объявление переменной btn void setup(){ pinMode(8, INPUT); // Программируем вывод D8 как вход pinMode(13, OUTPUT); // Программируем вывод D13 как выход } void loop() { btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8 digitalWrite(13, btn); // Выводим переменную btn на вывод 13 }После запуска программы светодиод L будет светиться, но если нажать на кнопку - светодиод погаснет.
boolean btn; //Объявление переменной кнопка boolean led; //Объявление переменной светодиод void setup(){ pinMode(8, INPUT); // Программируем вывод D8 как вход pinMode(13, OUTPUT); // Программируем вывод D13 как выход } void loop() { btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8 if (!btn) // если кнопка нажата, то... { // ...переменной led присвоить противоположенное led=!led; // значение digitalWrite(13, led); // Выводим переменную led на вывод 13 } }
if (логическое выражение) { // выполнять действия }В данном случае, если кнопка нажата (btn=false), то выражение !btn (противоположенное значение btn, ели btn==false, то !btn==true) - истинно, а значит выполняются команды в фигурных скобках: переменная led меняет свое значение на противоположенное и теперь уже новое значение переменной led выводится на 13 вывод, к которому подключен светодиод.
boolean led; void setup(){ pinMode(8, INPUT); // Программируем вывод D8 как вход pinMode(13, OUTPUT); // Программируем вывод D13 как выход } void loop() { boolean btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8 if (!btn) led=!led; // ...переменной led присвоить противоположенное значение digitalWrite(13, led); // Выводим переменную led на вывод 13 }Фигурные скобки после оператора if могут быть опущены. Если так сделано, то только следующая строка (обозначенная точкой с запятой) становится оператором, выполняемым в операторе if. В данном случае, это оператор присвоения переменной led противоположенного значения, а оператор вывода переменной на 13 пин выполняется всегда, вне зависимости от условия, проверяемого оператором if.
boolean led; void setup(){ pinMode(8, INPUT); // Программируем вывод D8 как вход pinMode(13, OUTPUT); // Программируем вывод D13 как выход } void loop() { boolean btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8 if (!btn) // Если кнопка нажата... { delay(10); boolean btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8 if (!btn) led=!led; // если кнопка нажата, переменной led присвоить противоположенное значение digitalWrite(13, led); // Выводим переменную led на вывод 13 delay(1000); // Ждем 1 секунду. } }
boolean led; boolean btnUp = true; // была ли кнопка отпущена? void setup(){ pinMode(8, INPUT); // Программируем вывод D8 как вход pinMode(13, OUTPUT); // Программируем вывод D13 как выход } void loop() { boolean btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8 if (!btn && btnUp) // Если кнопка нажата, но до этого была отпущена { delay(10); boolean btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8 if (!btn) led=!led; // если кнопка нажата, переменной led присвоить противоположенное значение digitalWrite(13, led); // Выводим переменную led на вывод 13 delay(1000); // Ждем 1 секунду. } btnUp = btn; // запоминаем последнее состояние кнопки для нового цикла }
int led; void setup(){ pinMode(7, INPUT); // Программируем вывод D8 как вход pinMode(8, INPUT); // Программируем вывод D8 как вход pinMode(13, OUTPUT); // Программируем вывод D13 как выход } void loop() { if (!digitalRead(7)) led=1; if (!digitalRead(8)) led=0; digitalWrite(13, led); }Попробуйте самостоятельно разобраться как она работает.
if (pin_analog_input < 500) { // действие A } else { // действие B }Else позволяет делать отличную от указанной в if проверку, чтобы можно было осуществлять сразу несколько взаимоисключающих проверок. Каждая проверка позволяет переходить к следующему за ней оператору не раньше, чем получит логический результат ИСТИНА. Когда проверка с результатом ИСТИНА найдена, запускается вложенный в нее блок операторов, и затем программа игнорирует все следующие строки в конструкции if..else. Если ни одна из проверок не получила результат ИСТИНА, по умолчанию выполняется блок операторов в else, если последний присутствует, и устанавливается действие по умолчанию.
if (pin_analog_input < 500) { // выполнять действие A } else if (pin_analog_input >= 1000) { // выполнять действие B } else { // выполнять действие C }
switch (var) { case 1: //выполняется, когда var равно 1 break; case 2: //выполняется, когда var равно 2 break; default: // выполняется, если не выбрана ни одна альтернатива // default необязателен }
for (initialization; condition; increment) {операторы выполняющиеся в цикле}Инициализация (Initialization) выполняется самой первой и один раз. Каждый раз в цикле проверяется условие (condition), если оно верно, выполняется блок операторов в фигурных скобках и приращение (increment), затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается.
void setup() { pinMode(13, OUTPUT); // Программируем вывод D13 как выход } void loop() { for (int i=0; i < 5; i++) // цикл for будет выполняться пока i < 5 { digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(500); } delay(10000); }Начинается цикл когда i=0. Так как i < 5, произойдет выполнение команд в фигурных скобках, а именно произойдет включение светодиода L на полсекунды, затем светодиод будет погашен на полсекунды, и значение i будет увеличено на 1, и цикл повторится, и будет повторяться пока соблюдается условие i < 5. Как только i станет равной 5 произойдет выход из цикла и после 10-ти секундной паузы всё начнется с начала.