Взаимодействие с контроллером Arduino через последовательный порт

Цель работы


Научиться взаимодействовать с контроллером Arduino через последовательный порт.

Задачи работы

  1. Разработка скетча для управления встроенным светодиодом на плате через последовательный порт.
  2. Знакомство с монитором последовательного порта.
  3. Оповещение о переключении светодиода.

Инструменты для выполнения работы

  1. Компьютер.
  2. Плата Arduino с USB выходом (например, Arduino Uno) и встроенным светодиодом на 13-м порту.

Теоретическая часть

//TODO добавить теорию про последовательный порт

Для программного взаимодействия с последовательным портом предназначены объекты стандартной библиотеки Arduino под названиями Serial, Serial1, Serial2 и т.д. Как правило, на каждой плате есть один последовательный порт, которому соответствует объект Serial. Данный порт при подключении к ПК позволяет обмениваться данными с компьютером поверх USB. Если микроконтроллер от компьютера отключен, то Serial позволяет обмениваться данными с другими устройствами через цифровые пины 0 и 1. Исключение составляет только Arduino Leonardo, у которой Serial всегда используется для взаимодействия через USB, а для цифровых пинов 0 и 1 используется отдельный объект Serial1.

Задание: соберите информацию о том, у каких микроконтроллеров есть дополнительные объекты для последовательных портов (Serial1, Serial2 и т.д.) и к каким пинам они подключены.
 

 

Выполнение работы

Разработка скетча для управления светодиодом на плате через последовательный порт


Создаем новый скетч и сохраняем его с названием 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 if(c=='0')
    {
        digitalWrite(13,LOW);
        Serial.println("Led Off");
    }
}

Проверяем монитор порта и проверим, что теперь при переключении светодиода отображаются оповещения.

Дополнительное задание: разработать скетч для управления светодиодом через последовательный порт командами "on" и "off". Подсказка: метод Serial.read() возвращает только один символ, если от ПК пришло несколько символов, то тело цикла while(Serial.available()) выполнится несколько раз.