Сегодня мы поговорим о том, как можно настроит плату ардуино, чтобы она выводила информацию (сообщения) о выполнении того либо иного действия через последовательный порт на монитор вашего компьютера.
Будем использовать схему с двумя светодиодами и прошивку микроконтроллера, что мы написали в 3 уроке.
Небольшое напоминание. Не стоит просто копировать приводимые в статьях программы. Вы не научитесь программировать, есть просто будете копировать код. Важно «набивать руки». И пускай в написанных программах (хотелось бы сказать иначе, но это правда) будут ошибки, в этом нет ничего страшного. Ведь исправляя ошибки, мы учимся не делать их в дальнейшем. Поэтому не ленимся и набираем программы для каждого урока собственноручно. Ну а если, что-то не получится, не стоит расстраиваться. Открываем прикрепленный архив и сравниваем два варианта программы.
Простите за небольшое отступление. Приступаем к работе.
Для начала нужно собрать схему с двумя светодиодами (классно, если вы её не разбирали с прошлого урока). Затем открываем проект ардуино для этой схемы.
В схеме белый заменил на зеленый светодиод. В коде заменил white на green. Вся эта рокировка «никакой погоды не делает», но для ясности ситуации – привел данную информацию. Кроме этого «цикл вкл/выкл» для красного светодиода также записал через цикл For.
Первое с чего следует начать - это включить (инициализировать) последовательный порт. Инициализация происходит только один раз, поэтому сроку Serial.begin (9600) записываем в void setup ().
void setup ()
{
Serial.begin (9600);
}
Как только программа будет загружена, последовательный порт включится и будет готов к работе.
Для того, чтобы порт выводил информацию (сообщения) существует две команды (функции):
- Serial.print ();
- Serial.println ();
Разница между этими двумя командами состоит в том, Serial.println выводит новую информацию с новой строки, а команда Serial.print, выводит следующие сообщения в той же строке.
Первый цикл for, как и второй цикл, выполняется определенное количество раз (количество задаётся переменными blinkNumberGreen и blinkNumberRed). Алгоритм работы цикла простой, как табуретка:
- Светодиод засветился;
- Ждём;
- Светодиод погас;
- Ждём;
- и т.д.
Доработаем этот цикл. Пускай ардуино будет сообщать нам, сколько раз цикл уже выполнился (сколько раз уже мигнул светодиод).
Как вы можете помнить из статьи Теория программирования — функции в скобках мы указываем входные параметры, которыми подпрограмма (функция или процедура) будет оперировать.
В теле цикла допишем Serial.println (i);
Загрузим программу и посмотрим на результат. Но что же мы видим - светодиоды мерцают, но никакие сообщения не выводятся. Но почему? А всё потому, что мы забыли открыть последовательный монитор. Для этого нажимаем на кнопку Монитор порта (она расположена в верхнем правом углу).
В открывшемся окне видим меняющееся цифры. Напоминаю, что сообщение о том, сколько раз уже мигнул светодиод присылает только цикл с зеленым светодиодом.
Вернёмся в начало программы и обратим внимание на число 9600. Этим числом задаётся скорость обмена информацией. Другими словами, как быстро источник будет передавать, и как быстро приёмник будет принимать. Существуют различные номиналы этой скорости. В принципе нет особой разницы в том, на какой скорости будет происходить обмен сообщениями. Главное, чтобы везде была указана одинаковая скорость (что в программе, что в последовательном мониторе).
Поменяем скорость. В мониторе перестанет отображаться информация. Все потому, что в передатчике/приёмнике установлены разные значения скорости. Если же вы хотите изменить скорость, меняйте в двух местах сразу: в программе и в мониторе. Не забываем, чтобы изменения в коде были видны в «железе» новый код нужно загрузить на плату.
После того, как мы разобрались с выводом информации, пришло время сделать выводимые сообщения более информативными, а то не понятно, что это за цифры 1….3 бегают на мониторе.
Давайте перед циклами For напишем следующую строку Serial.println (“Green led is blink”);
В двойных кавычках задается строчная информация.
Загрузим программу и посмотрим на результат.
Чтобы разделить выводимую на экран информацию, между циклами напишем команду Serial.println (“ ”);
Загрузим программу и посмотрим на результат. Согласитесь, что информация стала восприниматься значительно проще. Но все равно как-то не то. Подпишем выводимые цифры. Для этого воспользуемся комбинацией двух команд
Serial.print (“LED blink ”);
Serial.println (i);
Загрузим программу и посмотрим на результат. Сообщения выводятся одно под другим, как-то всё слишком нагромождено. Поставим пару пробелов перед словом LED.
Serial.print (“ LED blink ”);
Мы с вами допустили одно ошибку, причём несколько раз. Хотя она и не отражается на работоспособности программы, но существенно усложнит её доработку в будущем. Что за ошибка? Мы непосредственно задавали входные параметры функций, вместо того, чтобы использовать переменные. Но исправлять это недоразумение, мы будем в отдельной статье посвященной строкам.
У меня для вас домашнее задание. Доработайте второй цикл, чтобы он также выводил сообщения (как и первый). Попробуйте задать другую скорость передачи информации (9600 мы уже протестировали). Напишите свои собственные сообщения. Не бойтесь изменять написанную вами программу.
Урок 5
Спасибо за внимание и удачи)
Картотека программирования