2014-12-05 133 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