2012-02-19 75 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