Найти в Дзене
Алексей Кретов

if, if...else, switch . Условные операторы в Arduino

Ссылка на редактор блоксхем в конце статьи
Условные операторы: if...else if...else, switch
Будет полезно: Логические выражения
Далее: Операторы цикла for, while, do...while и их синтаксис
huna-mrt
Оглавление

Ссылка на редактор блоксхем в конце статьи
Ссылка на редактор блоксхем в конце статьи

Условные операторы: if...else if...else, switch

Будет полезно: Логические выражения

Далее: Операторы цикла for, while, do...while и их синтаксис

Когда нам нужно решить что делать, мы задаёмся вопросом:" А что если...?" Для этого мы бессознательно используем условия, а в программировании операторы ветвления.

Тестовый стенд с ползунковым потенциометром, подключенным к аналоговому пину A1 Светодиод будет нужно подключить отдельно в 9 пин, не забывая о резисторе
Тестовый стенд с ползунковым потенциометром, подключенным к аналоговому пину A1 Светодиод будет нужно подключить отдельно в 9 пин, не забывая о резисторе

Условие if()

Создадим условие: если значение на аналоговом выводе А1 больше 700 единиц то мы включим светодиод на выводе: D9 :

#define SENSOR_PIN A1
#define LED_PIN 9

int sensorValue = 0;

void setup() {
pinMode(LED_PIN, OUTPUT);
}

void loop() {
sensorValue =
analogRead(SENSOR_PIN);
if (sensorValue > 700) {
digitalWrite(LED_PIN, HIGH);
}
}

Выражение if состоит из ключевого слова if (если), затем в круглых скобках пишется условие, а затем в фигурные скобки помещается код, который будет выполнен если условие истинно. Условие всегда булево (логическое) значение: может быть только true или false.

В нашем примере показания аналогового датчика сравниваются с пороговым значением 700. Как только показания превысят этот порог, на пине D9 включится светодиод.

Но светодиод включится навсегда. У нас нет команды на выключение.

Альтернативное действие else

Для решения проблемы выключения можно прибегнуть к двум решениям:

  • можно вначале цикла каждый раз перед проверкой состояния датчика на А1 светодиод выключать
  • можно воспользоваться конструкцией if()... else

else (иначе, в противном случае). Данный блок выполняется если условие всех предыдущих блоков ложно:

sensorValue = analogRead(SENSOR_PIN);
if (sensorValue > 700) {
digitalWrite(LED_PIN, HIGH);
}
else{
digitalWrite(LED_PIN, LOW);
}

Получается, как только показания датчика упадут ниже порогового значения 700, произойдет выключение светодиода. Таким образом действия со светодиодом будут производиться только при условии прохождения порога

Множественные проверки условий else if

Условие if может иметь несколько блоков else if (в противном случае, если). Они используются, если нужны дополнительные условия:

void loop() {
sensorValue =
analogRead(SENSOR_PIN);
if (sensorValue > 700) {
digitalWrite(LED_PIN, HIGH);
}
else if(sensorValue < 400){
analogWrite(LED_PIN, 100);
}
else{
digitalWrite(LED_PIN, LOW);
}
}

В этом примере добавилось промежуточное значение, когда показания датчика упадут ниже порогового значения, мы перейдём к следующей проверке. Блок else if () выполнит функцию, снижения

Весь этот код принадлежит к одному оператору if. Только один блок данного оператора будет выполнен.

Оператор switch

Если условий много и они дискретны (выполняются для определенного значения, то для нас удобен оператор switch (переключатель). Он используется в ситуациях, когда известно какие значения может принимать условие. Например, можем преобразовать значения нашего аналогового сигнала на несколько уровней, скажем на 4. Для преобразования воспользуемся конструкцией constrain() и map(), более подробно о них поговорим в других статьях. Их задача масштабировать значения АЦП от 0 до 1023 в значения от 0 до 4. По результату их работы можно совершать различные действия.

void loop() {
sensorValue =
analogRead(SENSOR_PIN);
sensorValue =
constrain(sensorValue, 0, 1023);
sensorValue =
map(sensorValue, 0, 1023, 0, 5);

switch (sensorValue) {
case 1:
digitalWrite(LED_PIN, HIGH);
break;

case 2:
analogWrite(LED_PIN, 150);
break;

case 3:
analogWrite(LED_PIN, 50);
break;

default:
digitalWrite(LED_PIN, LOW);
break;
}
}

Вначале мы помещаем ключевое слово switch. Затем, пишем в круглых скобках переменную, которую нужно проверить. После этого идёт тело switch в фигурных скобках. Тело switch состоит из проверок отдельных значений переменной (case - пример, ситуация, вариант). Обратите внимание, что после каждой проверки мы помещаем break. Этот оператор пропускает проверку остальных вариантов. Также есть вариант default - он выполняется если все остальные блоки ложны. В нашем случае возможно 5 состояний переменной, и только на 3 из них записаны различные действия включения. Во всех остальных случаях будет выполняться выключение

Вывод

Условия - одна из главных частей любого языка. Доступно два условных оператора: if...else if...else и switch. Мы можем пользоваться только оператором if или switch бывает более удобен. но можем делать любые комбинации из условных операторов любой степени вложенности, главное не запутаться где заканчивается одно условие и начинается другое

Ссылки прямо в коде кликабельны и ведут на первоисточник - arduino.cc

Онлайнредактор блоксхем