Так как Arduino на компьютере устанавливается как последовательный порт, имеется возможность связать его с компьютером через этот порт. В среде Arduino IDE имеется ‘Монитор последовательного порта’, который может, как отображать принятые данные, так и отправлять их. Его можно найти в меню ‘инструменты’:
Рисунок 9. Меню ‘Монитор последовательного порта’
Нажав на этот пункт меню, открывается окно, в котором можно как принимать данные с последовательных портов, так и отправлять.
Рисунок 10. Монитор порта
Все принятые данные автоматически появляются в этом окне. Для отправки данных, достаточно вписать их в однострочный редактор и нажать на кнопку ‘Отправить’. Важно убедиться, чтобы скорость передачи данных тут и в контроллере совпадали, иначе будут приняты искаженные данные.
На примере управления светодиодом через последовательный порт, ниже рассматриваются основные команды, которые необходимы для отправки и принятия данных из компьютера в контроллер.
Задача: Написать программу, которая позволит управлять светодиодом через последовательный порт.
Пусть, светодиод подключен к 13-му порту. Тогда можно запрограммировать следующий алгоритм: В цикле, проверять пришло ли что-то через последовательный порт. Если да, то проверить, пришла ли ‘1’. При единице включить светодиод, иначе – выключить.
Для проверки выполнения некоторых условий, в Arduino применяется следующая конструкция:
if (Условие) {Команды, которые выполняются при истинности условия;} else {Команды, которые выполняются, если условие – ложно;}
Фигурные скобки можно опустить, если в них находится только одна команда.
Само условие обязательно пишется в круглых скобках и может содержать любое выражение, которое возвращает результат после его выполнения. То есть, там могут содержаться математические выражения, такие как 2+4, A+B, X*X. Но чаще применяются логические выражения, для проверки каких-то условий. Например, A==5 (Используется двойное равно, так как одно равно зарезервировано для команды присваивания), A<5, A>6, A>=B и т.д.. Здесь A, B, и X – Переменные, то есть именованные ячейки памяти, в которые может быть записано какое-то значение. Подробнее они будут рассмотрены ниже.
Так как последовательный порт может работать при различных скоростях, необходимо указать скорость передачи данных перед его использованием. Для этого в программу вписывают следующую команду:
Serial.begin(9600);
Здесь в скобках указана скорость передачи в бодах. Данная скорость должна совпадать со скоростью указанной в мониторе последовательного порта. Все отправленные данные в Arduino записываются в буфер. И перед тем, как читать этот буфер, нужно проверять, есть ли там что-то. Для проверки этого условия, существует следующая команда:
Serial.available();
Эта команда возвращает значение истины, если буфер не пуст. Иначе, результатом выполнения этой команды будет ‘ложь’.
Для чтения принятых значений из буфера применяют следующую команду:
Serial.read()
Она возвращает символ из буфера последовательного порта.
А для отправки данных на компьютер применяют следующую команду:
Serial.print(“Отправляемый текст”);
После выполнения этой команды, указанная в кавычках строка тут же появляется в мониторе последовательного порта.
Все команды, необходимые для решения поставленной задачи рассмотрены, теперь можно приступать к решению самой задачи.
Настройка порта производится однократно в начале выполнения программы, поэтому её лучше написать в функцию void setup() {}Там же следует провести настройку порта, к которому подключен светодиод. Таким образом, функция void setup() {} Будет содержать 2 команды:
void setup() { Serial.begin(9600);//Инициализация последовательного порта pinMode(13,1);//Настройка 13-го порта на вывод }
Теперь в цикле необходимо проверять принятые команды через последовательный порт и выполнять их. Пусть ‘1’ означает включить светодиод, а все остальное – выключить.
Первым делом, надо проверить, пришла ли какая-та команда вообще, и уже затем проверять, на включения ли она. Это можно реализовать следующим образом:
void setup() { Serial.begin(9600);//Инициализация последовательного порта pinMode(13,1);//Настройка 13-го порта на вывод //вывод сообщения в монитор последовательного порта Serial.println("Введите команду. 1 - включение, 0 - выключение"); } void loop() { if (Serial.available()) //Есть ли в буфере что-то? if (Serial.read()=='1') //Равно ли оно единице? digitalWrite(13,1); //Включить светодиод else digitalWrite(13,0); //Иначе, выключить светодиод. }
Осталось, загрузить ее на плату и готово.