Программирование Arduino урок 5 — последовательный порт

Доброе время суток. Сегодня мы поговорим о том, как можно настроит плату ардуино, чтобы она выводила информацию (сообщения) о выполнении того либо иного действия через последовательный порт на монитор вашего компьютера.

Будем использовать схему с двумя светодиодами и прошивку микроконтроллера, что мы написали в 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

Спасибо за внимание и удачи)

Картотека программирования

 

ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ!


About alexlevchenko

Ценю в людях честность и открытость. Люблю мастерить разные самоделки. Нравится переводить статьи, ведь кроме того, что узнаешь что-то новое - ещё и даришь другим возможность окунуться в мир самоделок.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

* Copy This Password *

* Type Or Paste Password Here *