从com端口C ++中读取

时间:2012-09-09 00:20:09

标签: c++ arduino fstream

我正在尝试与Arduino微控制器通信。这在C#中很容易做到,但我无法在c ++中弄明白。这是我的arduino代码......

void loop()
{
  if (Serial.available() > 0)
  {
    byte input = Serial.read();
    Serial.write(input);
  }
}

所以你发送给arduino的任何东西都会被送回给你。

我能够使用fstream库读取它的写入内容。问题是当我尝试从缓冲区读取时没有任何东西。

int main(int argc, char** argv)
{
fstream filestr;
filestr.open ("COM4", fstream::in | fstream::out | fstream::trunc);

if (!filestr.is_open())
{
    cout << "error opening port";
}
else
{
    cout << "port opened";
}

char* input = new char();
cin >> input;
filestr.write(input, 1);
filestr.flush();

char * buffer = new char [1];
buffer[0] = -1;

filestr.read (buffer,1);
while ((int)buffer[0] == -1)
{
    filestr.read (buffer,1);
}
cout << buffer[0];

cin >> input;

filestr.close();
return 0;  
}

所以我发送一些数据并开始循环阅读,直到arduino回复。第一次阅读不会得到任何回报,因为arduino没有时间回应,所以我一直在阅读,直到它获得数据。但我似乎永远不会得到回应。如果我在第一次读取之前稍微延迟并给出arduino时间来响应,它确实有效。当我读到某些东西时,读者的位置是否向前移动?当我从缓冲区读取内容时会自动从缓冲区中删除吗?有谁知道怎么做?

2 个答案:

答案 0 :(得分:0)

你应该抓住arduino firmata windows工具的代码。它完成了你想做的一切。

http://firmata.org/wiki/Main_Page

答案 1 :(得分:0)

查看另一个关于使用Boost Asio读取串口的问题:Reading from serial port with Boost Asio