2

我想使用 Visual Studio 和 C 将数据发送到我的 Arduino 板。我特别需要使用 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 ) ;
}

但它没有被编译。

我只需要发送数据。

4

3 回答 3

4

我从您的帖子中了解到,您需要使用 Visual Studio 发送数据,而不是编写 Flash 程序或任何其他东西。这是我在我的机器上为你制作的一个例子,它可以发送文本测试。

#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;
}
于 2011-11-14T16:18:21.723 回答
1

首先要检查的是您是否可以与 arduino 串行端口进行通信。如果你有 XP 或更早版本,它带有超术语,Windows vista+7 没有,所以你需要类似http://ttssh2.sourceforge.jp/

ps - 我不确定在系统调用中创建的模式参数是否“粘”到调用环境或在 shell 退出时被重置。请参阅windows 串行端口编程示例,了解如何正确执行

于 2011-11-14T16:10:06.040 回答
0

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 ) ;
}
于 2011-11-18T10:45:36.423 回答