Последовательная связь (для Arduino) с использованием Visual Studio 2008 и C - PullRequest
2 голосов
/ 14 ноября 2011

Я хочу отправить данные на мою плату 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 ]

4 голосов
/ 14 ноября 2011

Из вашего поста я понял, что вам нужно отправлять данные с помощью 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;
}
1 голос
/ 14 ноября 2011

Первое, что нужно проверить, можете ли вы вообще подключиться к последовательному порту arduino. Если у вас XP или более ранняя версия, она поставляется с гипертермией, Windows Vista + 7 - нет, поэтому вам нужно что-то вроде http://ttssh2.sourceforge.jp/

ps - я не уверен, что параметры режима, созданные в системном вызове, «прилипают» к вызывающей среде или сбрасываются при выходе из оболочки. См. Пример программирования последовательного порта Windows о том, как это сделать правильно

0 голосов
/ 18 ноября 2011

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 ) ;
}
...