Программа для управления портами Arduino/CraftDuino

Программа для управления портами Arduino

Здесь уже рассматривалось как на разных языках программирования можно общаться с 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-портом
  • +2
  • 12 ноября 2009, 10:15
  • admin

Комментарии (2)

RSS свернуть / развернуть
+
+1
Мне больше FirmataVB нравится.
Тем более, что программирую под .Net
avatar

realist

  • 14 ноября 2009, 22:30
+
0
Спасибо за ссылку! не нашёл этот проект :)
avatar

admin

  • 15 ноября 2009, 08:52

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.