Здесь уже рассматривалось как на разных языках программирования можно общаться с 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”»
Мне большеFirmataVB нравится.
Тем более, что программирую под .Net
Спасибо за ссылку! не нашёл этот проект 🙂