Взаимодействие с контроллером Arduino через последовательный порт
Цель работы
Научиться взаимодействовать с контроллером Arduino через последовательный порт.
Задачи работы
- Разработка скетча для управления встроенным светодиодом на плате через последовательный порт.
- Знакомство с монитором последовательного порта.
- Оповещение о переключении светодиода.
Инструменты для выполнения работы
- Компьютер.
- Плата Arduino с USB выходом (например, Arduino Uno) и встроенным светодиодом на 13-м порту.
Теоретическая часть
//TODO добавить теорию про последовательный порт
Для программного взаимодействия с последовательным портом предназначены объекты стандартной библиотеки Arduino под названиями Serial, Serial1, Serial2 и т.д. Как правило, на каждой плате есть один последовательный порт, которому соответствует объект Serial. Данный порт при подключении к ПК позволяет обмениваться данными с компьютером поверх USB. Если микроконтроллер от компьютера отключен, то Serial позволяет обмениваться данными с другими устройствами через цифровые пины 0 и 1. Исключение составляет только Arduino Leonardo, у которой Serial всегда используется для взаимодействия через USB, а для цифровых пинов 0 и 1 используется отдельный объект Serial1.
Выполнение работы
Разработка скетча для управления светодиодом на плате через последовательный порт
Создаем новый скетч и сохраняем его с названием SerialTest. Проверяем, что выбрана правильная плата и порт.
В функции setup() инициализируем последовательный порт и 13-й пин для управления светодиодом:
Serial.begin(9600);
pinMode(13,OUTPUT);
В функции loop() проверяем, нет ли данных в последовательном порту. Читаем данные, и если пришел символ "1", включаем светодиод, во всех остальных случаях выключаем:
while(Serial.available())
digitalWrite(13,(Serial.read()=='1')?HIGH:LOW);
Знакомство с монитором последовательного порта
Открываем монитор последовательного порта (Инструменты -> Монитор порта или кнопка вверху справа). Появляется следующее окно:
В данном окне выводится информация, поступающая от контроллера. В верхней строке слева от кнопки "Отправить" можно писать текст, который отправляется на контроллер. В нижнем правом окне настраивается скорость передачи данных и указывается, будет ли к тексту добавляться символ перевода строки NL, CR или оба сразу, или текст будет отправлен как есть. Для данной работы нужно выставить режим "Нет конца строки".
Оповещение о переключении светодиода
Доработаем скетч так, чтобы в мониторе порта отображалась информация о переключении светодиода. Для этого поменяем код функции loop():
while(Serial.available())
{
char c=Serial.read();
if(c=='1')
{
digitalWrite(13,HIGH);
Serial.println("Led On");
}
else
{
digitalWrite(13,LOW);
Serial.println("Led Off");
}
}
Проверяем монитор порта и проверим, что теперь при переключении светодиода отображаются оповещения.