
Здесь уже рассматривалось как на разных языках программирования можно общаться с Arduino через COM-порт и даже приводился пример, что можно выдавать в COM-порт абсолютно разные данные – например сигнал о появлении ключевого слова в RSS-потоке 😉
Теперь же напишем программу для управления портами ардуины.
Для работы с COM-портом на С++ под win32 используем немного доработанную библиотеку SerialGate, а интерфейс по-быстрому набросаем в MFC.
Архив с программой, скетчем и исходниками можно скачать здесь.
Библиотека SerialGate представлена двумя файлами SerialGate.h и SerialGate.cpp
Весь функционал программы сосредоточен в arduinoportsDlg.cpp.
При изменении поля с номером COM-порта вызывается функция
OnChangeEditComPort() в которой вызывается
open_port() где и происходит попытка открыть порт строчкой
bool b = sg.Open(atoi(m_COM_port),9600);
Далее все функции однотипны:
void CArduinoportsDlg::On13()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_13)
{
sg.Send("13H",3);
}
else
{
sg.Send("13L",3);
}
}
— если напротив порта с данным номером (в примере — 13) ставится галочка – в порт отправляется строчка
«13H»
,если же снимается, то «13L»
В Arduino/CraftDuino нужно залить скетч arduinoports.pde
/*
* считывает данные из порта и устанавливает соответствующий уровень на порту
* 00H - установит высокий уровень на 0-м порту
* 01L - установит низкий уровень на 1-м порту
*
*/
char val = 0; // variable to store the data from the serial port
char port1 = 0;
char port2 = 0;
int p=0;
void setup() {
Serial.begin(9600); // connect to the serial port
}
void loop () {
if( Serial.available() ) {
port1 = Serial.read(); // read the port
port2 = Serial.read();
val = Serial.read();
Serial.print(port1); Serial.print(" "); Serial.println((int)port1);
Serial.print(port2); Serial.print(" "); Serial.println((int)port2);
Serial.println(val);
int p1=(int)port1-48;
int p2=(int)port2-48;
p=p1*10+p2;
pinMode(p,OUTPUT);
if( val == 'H' || val == 'h' )
{
digitalWrite(p, HIGH);
}
else
{
if(val=='L' || val == 'l')
{
digitalWrite(p, LOW);
}
}
}
delay(10);
}
, который опрашивает СОМ-порт, считывает из него три байта, первые два приводит из символов в цифру и переводит в десятичный формат
p=p1*10+p2;
переводит порт p в режим вывода, а затем в зависимости от того – какая буква H или L поступила в третьем байте посылки – выставляет на порту соответствующий уровень напряжения – HIGH или LOW.
Ссылки
Архив с программой, скетчем и исходниками
SerialGate
По теме
Практическое программирование Arduino- программирование работы с COM-портом

0 комментариев на «“Программа для управления портами Arduino/CraftDuino”»
Мне больше нравится.
Тем более, что программирую под .Net
Спасибо за ссылку! не нашёл этот проект 🙂