Продолжаем эксперименты с кнопкой. Используем схему с предыдущего урока, только
теперь попробуем зажигать установленный на плате Ардуино светодиод 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-ти секундной
паузы всё начнется с начала.