2014-12-05 149 views
0

所以我發現這個教程的Arduino的Visual Studio通訊:http://playground.arduino.cc/Interfacing/CPPWindows的Arduino和Visual C++串行通信

閱讀起來就可以了,我寫的Arduino的一個小程序,它讀入一個字符的ASCII碼和增加值返回後。我已經使用串行監視器對其進行了測試。但是,當我編寫下面的程序時,我不僅收到答案,而且還收到「垃圾」。

#include <iostream> 
#include <string> 
#include "Serial.h" 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    Serial * Arduino = new Serial("COM8"); 
    cout << "Communicating with COM7 enter data to be sent\n"; 
    char data[256] = ""; 
    int nchar = 256; 
    char incomingData[256] = ""; 
    while (Arduino->IsConnected()) 
    { 
     cin >> data; 
     Arduino->WriteData(data, nchar); 
     Arduino->ReadData(incomingData, nchar); 
     cout << incomingData << endl; 
    } 
    return 0; 
} 

的輸出中看起來如下:

F:\Serial\Debug>Serial.exe 
Communicating with COM7 enter data to be sent 
1 
2☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
a 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺b☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺╠╠╠╠╠╠╠╠ 
^C 
F:\Serial\Debug> 

任何人都可以揭示到,我應該如何去改變這個代碼,這樣我可以發送和收到的字符的具體數量或在這種情況下,一個字符。我已經嘗試將nchar更改爲1,以便它只發送一個字符;但是,這會導致輸出顯示不同步。任何幫助表示感謝。

回答

2

首先,你總是發送nchar字節,無論你從用戶讀取多少(或少)。還有你從串口讀取的數據,你不會像字符串那樣終止它。

首先它很簡單,停止使用數組,並使用std::string(以避免可能的緩衝區溢出),併發送size字節。

然後,當接收時,您需要找出您接收到多少字節,然後像串一樣終止數組(或使用std::string,也有constructor可讓您傳入指針和大小)。

+0

謝謝我看到你的意思和它的幫助,雖然我還需要添加一個while循環,不斷閱讀,直到數據可用。至少對於第一次閱讀電話。 – user2881196 2014-12-06 04:46:42