Последовательный порт, параллельный, UART, передача данных с компьютера на микроконтроллер
Обмен информацией между различными устройствами управления в автоматизированной системой является важным фактором для построения распределённых систем и организации их иерархической структуры. В первом случае становится возможна установка отдельных устройств, содержащих датчики или управляющие элементы, на большом расстоянии друг от друга. Во втором случае организуется система с несколькими подчинёнными устройствами, каждое из которых решает локальную задачу, и глобальным устройством управления верхнего уровня, которое задаёт общий вектор управления.
Соберите схемы для проверки написанных ниже программ, проверьте их работоспособность и выполните задания. В качестве подсказок используйте Справочные материалы, находящиеся в конце этого пособия.
Управление контроллером от компьютера через последовательный порт
int val = 0; //создаём переменную для хранения информации с компьютера
int state=LOW; //состояние светодиода (выкл/вкл)
void setup()
{
pinMode(13,OUTPUT); //13 ножка - выход(светодиод)
Serial.begin(9600); //устанавливаем последовательное соединение
}
void loop()
{
val = Serial.read(); //читаем информацию с компьютера
if (val == '1') //если считали с компьютера цифру 1, то
{
state = !state; //меняем состояние диода на противоположное
//(HIGH->LOW или LOW->HIGH)
Serial.println("Diode switched!"); //выводим сообщение
//"диод переключился"
}
//проверяем статус и включаем или выключаем светодиод
if (state == HIGH)
digitalWrite(13,HIGH);
else
digitalWrite(13,LOW);
}
Связь по последовательному порту называемая как универсальный асинхронный прием/передача (UART). Как правило, она используется для программирования и отладки Arduino через порт USB. Существуют разные датчики и приборы, которые используют UART в качестве основной связи, и иногда нам нужно объединять два и больше Arduino между собой для обмена информацией.
Обмен данными между двумя Arduino при помощи программного UART
Рисунок 7 – Объединение двух контроллеров посредством UART
Текст программы для управляющего микроконтроллера:
// Подключение библиотеки Software Serial
#include <SoftwareSerial.h>
//Объявление дискретных каналы контроллера для связи
SoftwareSerial softSerial(8, 9); // RX, TX
void setup()
{
Serial.begin(9600); // Задание скорости передачи данных
softSerial.begin(9600); // Инициализация программного
// последовательного порта
}
void loop()
{
if (Serial.available()) // Проверка получения команд от компьютера
{
softSerial.write(Serial.read()); //Отправка команды на UART
}
}
Текст программы для управляемого микроконтроллера:
#include <SoftwareSerial.h> // Подключение библиотеки Software Serial
// Назначение задействованных дискретных каналов
SoftwareSerial softSerial(8, 9); // RX, TX
int LED = 13;
void setup()
{
softSerial.begin(9600);
pinMode(LED, OUTPUT); // Определение выхода светодиода
}
void loop()
{
if (softSerial.available()) //Проверка наличия информации в буфере
{
// Чтение одного символа из буфера и запись его в переменную
int com = softSerial.read();
if (com == 'x')
{
digitalWrite(LED, LOW); // Выключение светодиода
}
else if (com == 'a')
{
digitalWrite(LED, HIGH); // Включение светодиода
}
}
}
Задания:
1) соберите схему с микроприводом, позволяющую задавать скорость его вращения с компьютера через последовательный порт. Если значение задаваемой скорости больше 255 или меньше 0, то микроконтроллер должен возвращать на компьютер соответствующее предупреждение;
2) соберите схему соединения двух микроконтроллеров посредством интерфейса UART и проверьте его работу;
3) соберите схему из двух микроконтроллеров, один из которых подключён к компьютеру. К одному из них должен подключаться потенциометр, а ко второму – микропривод, скорость которого должна определяться положением потенциометра и передаваться от одного контроллера к другому. Также значение скорости должно выводиться на монитор порта. Должна быть реализована возможность останова микропривода командой с компьютера, переданной по последовательному порту.
Дата добавления: 2018-09-24; просмотров: 941;