Последовательное общение (для Arduino) с использованием Visual Studio 2008 и C
Я хочу отправить данные на мою плату Arduino с помощью Visual Studio и C. Мне особенно нужно использовать C, так как я использую ARToolKit для получения маркеров и соответственно отправляю данные.
Я пробовал код
#include<stdio.h>
#include<stdlib.h>
void main()
{
system( "MODE COM9: BAUD=9600 PARITY=n DATA=8 STOP=1" ) ;
FILE port = fopen( "COM9:", "wb" ) ;
printf("hello");
fprintf( port, "s" ) ;
fclose( port ) ;
}
но это не компилируется.
Мне просто нужно отправить данные.
3 ответа
Из вашего поста я понял, что вам нужно отправлять данные с помощью visual studio, чтобы не писать программы для прошивки или что-то еще. Вот пример, который я сделал для вас на моей машине, он работает, отправляя текстовый тест.
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
char test[] = "Hello";
HANDLE hDevice = CreateFile(L"COM2",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);
if (hDevice !=INVALID_HANDLE_VALUE)
{
printf("Port opened! \n");
DCB lpTest;
GetCommState(hDevice,&lpTest);
lpTest.BaudRate = CBR_9600;
lpTest.ByteSize = 8;
lpTest.Parity = NOPARITY;
lpTest.StopBits = ONESTOPBIT;
SetCommState(hDevice,&lpTest);
DWORD btsIO;
WriteFile(hDevice,test,strlen(test),&btsIO,NULL);
CloseHandle(hDevice);
}
_getch();
return 0;
}
Первое, что нужно проверить, можете ли вы вообще связываться с последовательным портом Arduino. Если у вас XP или более ранняя версия, она поставляется с гипертермией, Windows Vista+7 - нет, поэтому вам нужно что-то вроде http://ttssh2.sourceforge.jp/
ps - я не уверен, что параметры режима, созданные в системном вызове, "прилипают" к вызывающей среде или сбрасываются при выходе из оболочки. Смотрите пример программирования последовательного порта Windows, чтобы узнать, как это сделать правильно.
CPPWindows работает, но это также в C++. Для всех вас, кто хочет отправлять последовательные данные с OPENCV/ARTOOLKIT или чем-то, что написано на C (а не на C++). Код, который я разместил, работает сейчас. Это потребовало некоторых изменений. Окончательный код: (не изменение в COM-порту)
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE* port;
system( "MODE COM1: BAUD=9600 PARITY=n DATA=8 STOP=1" ) ;
port = fopen( "COM1:", "wb" ) ;
printf("s");
fprintf( port, "s" ) ;
fclose( port ) ;
}