Switch (case) Statement с вводом через Serial
Разбираем оператор switch/case на практике: управляем несколькими светодиодами, отправляя символы через Serial Monitor в Arduino IDE.
Оператор if хорош, когда нужно выбрать между двумя вариантами — TRUE или FALSE. Но что делать, если вариантов больше? Можно нагромоздить несколько if/else if, а можно воспользоваться куда более элегантным решением — оператором switch. Он позволяет компактно описать любое количество дискретных ветвей выполнения.
В этом уроке мы используем switch/case, чтобы зажигать один из нескольких LEDs в зависимости от символа, пришедшего через последовательный порт. Скетч слушает Serial, и при получении символа a, b, c, d или e включает соответствующий светодиод. Любой другой символ гасит все.
Необходимое оборудование
- Arduino Board
- 5 LEDs
- 5 резисторов 220 Ом
- соединительные провода
- макетная плата
Схема подключения
Пять LEDs подключены к цифровым пинам 2, 3, 4, 5 и 6 через токоограничивающие резисторы 220 Ом. Каждый светодиод — последовательно со своим резистором, второй вывод — в GND.
Чтобы скетч работал, плата должна быть подключена к компьютеру. Откройте Serial Monitor в Arduino IDE, выберите нужную скорость (9600 baud) и отправляйте символы a, b, c, d или e — загорится соответствующий светодиод. Любой другой символ выключит все.

Схема подключения: Arduino UNO соединён с макетной платой, на которой установлены пять светодиодов с токоограничивающими резисторами 220 Ом на пинах 2–6.
Принципиальная схема

Принципиальная схема: Arduino UNO подключён к пяти светодиодам через резисторы 220 Ом (резисторы 220 Ом — между пинами и анодами светодиодов, катоды — на GND).
Код
/*
Оператор switch с вводом через Serial
Демонстрирует использование оператора switch, который позволяет
выбирать действие в зависимости от значения переменной. Это похоже на
серию операторов if.
Чтобы увидеть скетч в действии, откройте монитор Serial и отправьте любой символ.
Символы a, b, c, d и e включат светодиоды. Любой другой символ
выключит их.
Схема:
- пять светодиодов подключены к цифровым пинам 2–6 через резисторы 220 Ом
создан 1 июля 2009 г.
автор Tom Igoe
Код примера находится в открытом доступе.
https://www.arduino.cc/en/Tutorial/SwitchCase2
*/
void setup() {
// инициализация Serial:
Serial.begin(9600);
// инициализация пинов светодиодов:
for (int thisPin = 2; thisPin < 7; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// чтение данных с датчика:
if (Serial.available() > 0) {
int inByte = Serial.read();
// выполняем разные действия в зависимости от полученного символа.
// Оператор switch ожидает числовые значения для каждого case; в данном
// примере используются одинарные кавычки, чтобы получить
// ASCII-код символа. Например, 'a' = 97, 'b' = 98
// и так далее:
switch (inByte) {
case 'a':
digitalWrite(2, HIGH);
break;
case 'b':
digitalWrite(3, HIGH);
break;
case 'c':
digitalWrite(4, HIGH);
break;
case 'd':
digitalWrite(5, HIGH);
break;
case 'e':
digitalWrite(6, HIGH);
break;
default:
// выключаем все светодиоды:
for (int thisPin = 2; thisPin < 7; thisPin++) {
digitalWrite(thisPin, LOW);
}
}
}
}
Как это работает
Оператор switch принимает одно значение — в нашем случае байт, прочитанный из Serial, — и сравнивает его последовательно с каждым case. Как только находит совпадение, выполняет соответствующий блок кода и выходит через break. Если ни один case не совпал, выполняется блок default — он гасит все светодиоды.
Это гораздо читаемее, чем цепочка if/else if, особенно когда вариантов пять и больше.
Типичные ошибки
- Забытый
break— без него выполнение «провалится» в следующийcase, и загорятся сразу несколько светодиодов. Всегда ставьтеbreakв конце каждой ветки, если не задумываете сквозное выполнение намеренно. - Неправильная скорость Serial — убедитесь, что скорость в коде (
Serial.begin(...)) совпадает со скоростью, выбранной в Serial Monitor. Иначе вместо символов придут нечитаемые данные. - Символы в кавычках — в
switch/caseдля сравнения с символами используйте одинарные кавычки:'a', а не"a". Двойные кавычки — это строка, одинарные — типchar. - Светодиод не светится — проверьте полярность: длинная ножка (анод) через резистор к пину, короткая (катод) к
GND.
Как проверить результат
- Загрузите скетч на плату.
- Откройте Serial Monitor (
Ctrl+Shift+Mили через меню Tools → Serial Monitor). - Установите скорость
9600 baudи режим отправки No line ending. - Введите
aи нажмите Send — должен загореться первый светодиод. - Поочерёдно отправьте
b,c,d,e— каждый раз будет загораться следующий. - Отправьте любой другой символ, например
z— все светодиоды погаснут.
Где пригодится
switch/case отлично подходит для любых задач, где нужно реагировать на набор фиксированных команд: управление по Serial, обработка кодов кнопок, конечные автоматы (state machine), меню на дисплее. Это один из самых часто используемых паттернов в прошивках Arduino.
Дополнительные материалы
Больше базовых примеров — в разделе built-in examples.
Подробное описание всех конструкций языка Arduino — в language reference.
Последнее обновление: 11.08.2015, SM