Оператор Switch Case в Arduino

Оператор Switch Case в Ардуино

В этой статье мы узнаем, как использовать другой тип условного оператора на Arduino, который называется оператором switch case.

Оператор switch case заменяет необходимость в нескольких операторах if, когда у вас есть несколько условий, которые необходимо проверить. Код становится проще, быстрее и оптимизированнее.

Switch case особенно полезны, когда у вас есть несколько диапазонов входных данных и для каждого диапазона нужно выполнить различный код.

Пример оператора Switch Case в arduino

Чтобы разобраться в этом лучше, давайте посмотрим на пример использования switch case в arduino.

Сначала программа берет показания датчика температуры. И в зависимости от показаний выводит на монитор порта сообщение: низкая температура, средняя температура или высокая температура.


Как подключается модуль датчика температуры на базе ntc термистора к ардуино можно узнать в этой статье.


const int thermistorPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int temp = analogRead(thermistorPin);

  temp = temp / 341;

  switch (temp) {

    case 1:
      Serial.print("Низкая температура!");
      break;

    case 2:
      Serial.print("Средняя температура!");
      break;

    case 3:
      Serial.print("Высокая температура");
      break;

    default:
      Serial.print("Ошибка датчика!");
  }
}

В верхней части скетча мы объявляем переменную с именем thermistorPin. Она используется для хранения номера контакта ардуино, подключенного к датчику. И устанавливаем ее равной аналоговому выводу A0.

В разделе setup() мы инициализируем последовательный монитор. Предполагается, что аналоговые контакты являются входными, поэтому использовать здесь функцию pinMode() нам не нужно.

В разделе loop() мы объявляем переменную с именем temp. Она используется для хранения аналогового значения, считанного с термистора.

Arduino считывает данные с термистора и сохраняет значение в переменной temp. Считанное значение будет находиться в диапазоне от 0 до 1023, в зависимости от измеряемой температуры.


Подробнее о том, как считать аналоговое значение с АЦП в arduino, можно прочитать вот в этой статье.


Далее используем формулу temp = temp/341. Таким образом преобразуем значение, хранящееся в temp, в один, два или три. Эти числа представляют диапазоны низких, средних и высоких температур соответственно.

Оператор switch просматривает переменную в круглых скобках (temp) и сравнивает ее с каждым из операторов case. Если значение, хранящееся в переменной, соответствует условию, будет выполнен код внутри тела оператора case.

Например:

  • Если temp равно двум, программа выполнит case 2, и выведет сообщение «Средняя температура» на последовательный монитор .
  • При temp равно трем, программа выполнит case 3, и выведет сообщение «Высокая температура» на последовательный монитор .

Каждый оператор case заканчивается ключевым словом break. Ключевое слово break заставляет программу выйти из оператора switch после выполнения оператора case. Он не позволяет программе проверять все остальные операторы case на соответствие условию после того, как она нашла совпадение.

Оператор switch case заканчивается оператором default. Оператор default будет выполнен, если ни один из операторов case не соответствует условию switch. Его добавлять необязательно, но в некоторых случаях может быть полезно.

Например, если ни один из операторов case не выполняется, возможно, что-то не так с датчиком. Таким образом, код внутри оператора default выводит «Ошибка датчика!» на последовательный монитор.

Надеюсь, статья помогла вам понять, что такое операторы switch case и как их использовать при программировании Arduino. Если у вас есть какие-либо вопросы, обязательно оставляйте комментарии ниже.

Документация

Компоненты

  • Arduino NANO
  • Arduino UNO
  • Arduino MEGA
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Владислпв
Владислпв
6 месяцев назад

В статье не сказано что если swich case использовать внутри цикла, тогда brake прервет весь цикл. Несмотря на то что в c++ сказано, что не должно этого случится.