План
1. Работа с последовательным портом
2. Основные функции
3. Пример программы
Теоретическая часть
1. Работа с последовательным портом
Для связи компьютера с платой Arduino существует последовательный порт обмена данными(UART). Для обмена данными искользуется USB порт и цифровые порты ввод/вывода 0 (RX) и 1 (TX).
Важно! При работе с последовательным портом выводы 0 и 1 не могут использоваться для других целей.
Для работы с последовательным интерфейсом IDE Arduino имеет Монитор порта (Serial monitor). Внешний вид монитора порта изображен на рисунке 1.
Рисунок 1 — Диалоговое окно “Монитор порта”
Значение в скорости связи в мониторе порта должно соответствовать значению, указанному в параметрах в функции begin().
2. Основные функции
Для работы с последовательным портом существуют функции класса Serial. Ниже перечислены основные из них:
Serial.begin() — Задает скорость передачи данных через последовательный порт в битах в секунду (бодах). В параметрах указывется скорость передачи. Для взаимодействия с компьютером следует использовать одну из предустановленных скоростей обмена: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200. Для взаимодействия с какими-либо другими устройствами через 0 и 1 выводы можно задавать другие скорости. Обычно эта функция вызывается внутри функции setup().
Serial.available() — получает количество поступивших на порт байт. Полученные байты записываются в буфер последовательного порта. В буфере может находиться до 64 байт.
Serial.read() — считывает очередной доступный байт из буфера последовательного порта.
Serial.print() — посылает данные через последовательный порт как ASCII текст.
Serial.println() — функция аналогична Serial.print(), но добавляет данным признак конца строки и возврата каретки.
3. Пример программы
Ниже представлен пример программы, который принимает через последовательный порт данные и посылает их обратно.
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available()>0)
int val=Serial.read();
Serial.println(val);
}
Практическое задание
Написать программу, управляющую двумя светодиодами через последовательный интерфейс.
int val;
void setup()
{
pinMode(11,OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available()>0){
val=Serial.read();
if (val==49)
{
digitalWrite(11,HIGH);
Serial.println(«led on»);
}
else
if (val==48)
{digitalWrite(11,LOW);
Serial.println(«led off»);
}
}
}