Ардуино Урок 1.2. If else

Использование if else
Светодиоды
Светодиоды

Привет. Сегодня будем говорить про управляющие операторы if и else в языке программирования Ардуино.

Мы уже изменили стандартную программу blink из обучающего набора программ в ардуино ide. В прошлый раз мы рассмотрели оператор цикла for. Если вы пропустили или уже забыли о чем речь, пожалуйста, посмотрите эту статью здесь.

Теперь мы изменим программу blink еще раз, чтобы посмотреть на возможности управляющих операторов if и else.

If и Else в Ардуино

В прошлый раз мы сделали динамически меняющуюся задержку между включением и выключением светодиода. Но в конце цикла счетчик сбрасывался. Сегодня сделаем уменьшение задержки также более плавным.

Чтобы этого добиться, нам нужно начать уменьшать переменную i, когда она будет равна 1000. Для этого заменим число 100 в цикле for на переменную delta. И объявим переменную в области объявления переменных.

int delta = 100;

Теперь мы готовы добавить в программу управляющий оператор if. Логика в том, чтобы определить когда переменная i стала равна максимуму и начать ее изменять. Но, постараемся использовать уже готовый цикл for и не изменять программу полностью.

Для этого заменим значение шага в цикле на переменную delta, а после цикла добавим оператор if.

for(i = 100; i <= 1000; i+=delta){
    digitalWrite(LED_BUILTIN, HIGH);
    delay(i);
    digitalWrite(LED_BUILTIN, LOW);
    delay(i);

    if( i == 1000 ){
      delta = -delta;
    }
}

В данном случае, мы сделали переменную delta равной себе, но со знаком минус. Соответственно, когда цикл for будет работать опять, то к i = 1000 будет прибавляться — 100. И задержка в функции delay будет уменьшаться.

Если загрузить программу в так виде, то мы увидим, как светодиод начинаем мигать медленнее, а потом быстрее, но только один раз.

Дело в том, что переменная i будет уменьшаться бесконечно, и через 10 итераций мы уже не увидим мигания, светодиод будет просто гореть.

Для того, чтобы разрешить эту проблему, добавим в условный оператор вторую часть. Она сработает, когда переменная i будет равна 0 и изменит знак шага опять.

else if( i == 0 ){
      delta = -delta;
}

Теперь, когда переменная i дойдет до 0 знак шага delay опять изменится на положительный и цикл будет увеличиваться.

Мы объединили эти два условия в один оператор if … else if, чтобы показать, что это возможно. В данном случае можно было обойтись вторым оператором if. Вы можете использовать сколько угодно встроенных блоков else if, но, пожалуйста, не делайте так. Это превратит вашу программу в нечитабельную белиберду. В следующих статьях мы посмотрим как можно использовать управляющие конструкции с многими вариантами более удобно. Так же можно дописать условный оператор до конца использовав else{} в конце.

Программа if else
Программа if else

Итоговый код программы будет выглядеть так.


int i = 100;
int delta = 100;

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

void loop() {

  for(i = 100; i <= 1000; i+=delta){
    digitalWrite(LED_BUILTIN, HIGH);
    delay(i);
    digitalWrite(LED_BUILTIN, LOW);
    delay(i);

    if( i == 1000 ){
      delta = -delta;
    } else if( i == 0 ){
      delta = -delta;
    } else{
      
    }
    
  }
}

Попробуйте загрузить его и проверить, все ли работает как нужно.

Заключение

Мы еще раз дополнили стандартную программу blink с помощью управляющей конструкции if else. И заставили светодиод на плате мигать с разными промежутками времени. А также познакомились с унарным оператором —

В следующий раз рассмотрим управляющую конструкцию switch case.

Добавить комментарий

Ваш адрес email не будет опубликован.