Опубликовано: 05.10.2016 18:36
Автор: genaonyx
Приветствую всех, сегодня хочу рассказать вам о небольшой подпрограмме или утилите, кому как удобней, под названием «Монитор порта». Если вы уже знакомы с Arduino IDE то вы не раз с ней сталкивались и догадались о чем пойдет речь. Но не торопитесь уходить, вам точно будет что прочесть, так как мы пройдемся от основ до полного разбора ее работы.
И так, «Монитор порта» это небольшая подпрограмма Arduino IDE, предназначенная для приёма-передачи данных из-в Arduino. Ввиду того, что Arduino IDE не имеет никаких средств отладки скетчей, это единственное средство проверить все ли работает верно, и так как надо.
Состоит подпрограмма из одной формы, при запуске, Arduino IDE передает ей номер COM-порта, с которым она должна работать, после чего она пытается с ним соединиться и в случае успеха, начинает прослушивать и выводить на экран всю полученную информацию.
Саму форму «Монитора порта» можно разбить на три части: верхняя, центральная и нижняя.
В целом, форма не сложная, элементов на ней мало, запутаться сложно. На этом с описанием мы закончим и начнем подробный разбор.
Начнем мы с Arduino.
Для того чтобы передать данные из Arduino в «Монитор порта» необходимо в функции setup() проинициализировать класс Serial вызвав его метод begin попутно передав скорость и настройки COM-порта.
Синтаксис.
Serial.begin(скорость, настройки);
Что такое стартовый бит, информационный бит, бит четности, почему скорость измеряется в бодах, я расскажу вам в другой статье, иначе переварить такой большой объём информации, а статья получиться не маленькая, будет не просто. Сейчас же мы будем пользоваться стандартными настройками, где скорость равна 9600 бод в секунду, а настройки Arduino будет выбирать автоматически.
Итого у нас получилось следующее:
void setup()
{
// Инициализируем (запускаем) класс Serial вызывая его метод begin указывая скорость 9600 бод в секунду.
Serial.begin(9600);
}
После того как все готово, отправить данные можно используя методы print и println того же класса Serial.
void loop()
{
// Отправляем «Hellow World!».
Serial.print("Hellow World!");
// Отправляем «Hellow World!» включая спецсимволы, означающие переход на новую строку.
Serial.println("Hellow World!");
// Спим одну секунду.
delay(1000);
}
Таким образом, в мониторе порта мы будем видеть строку, состоящую из двух «Hellow World!» каждую секунду (см. фото выше).
Класс Serial содержит и другие методы для работы с монитором порта, но, как правило, методов print и println достаточно в большинстве случаев.
Теперь мы попробуем получить команды, отправленные из монитора порта в Arduino и использовать их, например, для включения или выключения светодиода.
Поможет нам с этим все тот же класс Serial и его метод readString.
И так по команде «HIGH» мы будем включать светодиод, а по команде «LOW» будем выключать.
Для того чтобы отправить команду, необходимо в поле расположенном в верхней части формы набрать текст, и нажать кнопку «Отправить». Получать команды мы будем при помощи упомянутого метода readString.
Итого у Вас должно получиться следующее.
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
// Получаем команды на включение-выключение светодиода на 13 порту.
String str = Serial.readString();
// Если команда «HIGH» то включаем светодиод.
if (str == "HIGH") digitalWrite(13, HIGH);
// Если команда «LOW» то выключаем светодиод.
if (str == "LOW") digitalWrite(13, LOW);
// Спим 1 секунду.
delay(1000);
}
Вот так, без особых мучений можно создать N-е количество команд и обрабатывать их в Arduino.
Ну а далее о формате передачи данных.
Напоследок, мы поговорим о том, в каком же виде происходит обмен информацией между «Монитором порта» и Arduino. Не смотря на то, какие данные вы передаете из Arduino в монитор порта, все они конвертируются в строку формата ASCII (см. таблицу), то же самое происходит и при отправке данных из монитора порта в Arduino. Т.е. отправив число десять, вы на самом деле отправляете не число, а строку, состоящую из двух символов, символ единицы и символ нуля.
К примеру, отправив один байт равный 128, на самом деле монитор порта получит три байта.
При выполнении метода println мы получим и вовсе 5 байт. Где первые три будут описанные выше, а два дополнительных это байт CR (13) и LF(10), означающие перевод на новую строку.
Посмотрев таблицу символов ASCII, многие заметят, что в ней присутствует символы только латиницы, в следствии чего отправив к примеру "Привет мир!", в мониторе порта мы получим какие то кракозябры. Пользуясь случаем хочу прорекламировать альтернативный монитор порта, написанный авторами портала, который понимает не только надписи на Русском, но и на других языках.
И вот теперь прочтя все, что я тут написал, наконец, можно рассказать что такое «Постфикс», выпадающий список в нижней части монитора порта.
Постфикс это байт или байты, в зависимости от того какой пункт вы выбрали, которые будут добавлены к данным которые вы ввели в поле для отправки.
Например, написав в поле для отправки число 128 и нажав на кнопку «Отправить» мы получим следующее:
На этом все. Пишите в комментариях, что вам не понятно, и в новых статьях мы попробуем расписать это более подробно.
Ну а следующая статья будет о том, как написать свой монитор порта на Delphi.
Успехов вам и удачи.
Если у Вас есть опыт в работе с Arduino и собственно есть время для творчества, мы приглашаем всех желающих стать авторами статей публикуемых на нашем портале. Это могут быть как уроки, так и рассказы о ваших экспериментах с Arduino. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.