2012-02-19 74 views
0

我无法使用Visual C++写一个字符串到我的Arduino上。我以某种方式能够打开COM端口,但无法将数据发送到Arduino。我的情况实际上会是什么?串口通信Arduino VC++

int main() 
{ 
    HANDLE hComm; 
    hComm = CreateFileA("\\\\.\\COM11", 
      GENERIC_READ | GENERIC_WRITE, 
      0, 
      0, 
      OPEN_EXISTING, 
      FILE_FLAG_OVERLAPPED, 
      0); 

    if (hComm == INVALID_HANDLE_VALUE) 
    { 
     printf("com not opened"); 
    } 
    else 
    { 
     printf("COM OPENED"); 
    } 

    COMMTIMEOUTS cto = { 1, 100, 1000, 0, 0 }; 
    DCB dcb; 
    memset(&dcb,0,sizeof(dcb)); 
    dcb.DCBlength = sizeof(dcb); 
    dcb.BaudRate = 38400; 
    dcb.fBinary = 1; 
    dcb.Parity = NOPARITY; 
    dcb.StopBits = ONESTOPBIT; 
    dcb.ByteSize = 8; 

    if(!SetCommState(hComm,&dcb)) 
    { 
     printf("HI"); 
    } 

    while(1) 
    { 
     char bag[]="L"; 
     DWORD read=0 ; 
     DWORD write=1; // Number of bytes to write to serial port 
     //   Decmial value to write to serial port 
     WriteFile(hComm, bag,write,&write, NULL); 
    } 
} 
+0

请在格式化代码时加倍小心。因为你发布的代码几乎不可读,并且会让任何选择帮助你工作的人比他们应该做的更难。 – talonmies 2012-02-19 17:45:15

+0

你怎么知道你“无法发送数据”?你的结果是什么?测试串行通信的一个好方法是使用像com0com这样的虚拟串行端口。 – 2012-02-19 17:43:43

+0

多数民众赞成多数民党这是因为我编程arduino濒临灯光,如果“L”发送和我尝试使用tera术语和灯闪烁当我通过tera term软件发送“L” – 2012-02-19 18:13:10

回答

2

必须设置正确DCB结构的每一个成员。最简单的做法是用GetCommState读取现有设置,然后更改您关心的设置。

现在你的流量控制很可能是错误的。

哦,你还初始化了一个超时结构,但是从未将这些设置应用到端口。

+0

我已应用超时结构,但仍然无法看到它工作。 – 2012-02-19 18:06:33

+0

在网站http://webhole.net/2010/05/01/arduino-visual-c-plus-plus-tutorial/中给出的代码正在工作,但我可以在我的win32控制台应用程序中使用它。该代码适用于clr应用程序。 – 2012-02-20 14:09:28