使用Visual Studio 2010和C进行串行通信(适用于Arduino)

时间:2011-11-18 11:29:18

标签: visual-studio-2010 opencv serial-port arduino

我现在面临一个小问题。我目前正在使用Microsoft Visual Studio 2010 Professional和OpenCV进行视频(图像)检测和跟踪,(视觉系统)的结果是通过Arduino平台控制其他硬件。

我的视觉系统代码100%工作,Arduino上的代码也可以100%工作,但是我遇到了从PC到Arduino板通过C / C ++进行通信的问题。 (不能使用Visual Basic等)

目前的规格:Windows 7平台,Visual Studio 2010,OpenCV 2.2.0,Arduino 0022,Arduino Mega板,2个USB到串行转换器进行模拟。

我的代码似乎无法正常运行。但是,我按照下面的例子#opc0de。但为了说明我的观点,下面的代码似乎不起作用(从不声明COM打开(是的,我改为写入端口))。 (将两条串行电缆相互连接,插入两个不同的COM端口,超级终端,实时等,100%工作。我的代码和下面的代码似乎根本不起作用)。 (我的代码长度为+ - 800行,我不喜欢发布,因为COM部分与下面非常类似)。我只是希望串行通信能够正常工作。

我想从COM中获取的是能够发送文本字符串“x = ### y = ###”所以即使是一段简单的代码也会这样(如下所示)(我想在稍后阶段阅读,但我现在并不担心)

代码链接:Stack Overflow - opc0de

#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 个答案:

答案 0 :(得分:0)

检查您的代码以确保其单独工作:

首先,使用COM记录器。来自MS的老而好的终端是最差的,但我现在不记得另一个了。看看你的C ++代码是否在那里发送了什么。如果不是,请使其工作:)如果是,请调试Arduino的通信问题。在Arduino上制作一个简单的记录器,看看你在另一部分收到的内容以及你如何处理它。