Здесь уже рассматривалось как на и даже приводился пример, что можно выдавать в COM-порт абсолютно разные данные – например сигнал о появлении ;)
Теперь же напишем программу для управления портами ардуины.
Для работы с COM-портом на С++ под win32 используем немного доработанную библиотеку , а интерфейс по-быстрому набросаем в 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/ нужно залить скетч
/*
* считывает данные из порта и устанавливает соответствующий уровень на порту
* 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.
Комментарии (2)
RSS свернуть / развернутьТем более, что программирую под .Net
realist
admin
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.