【问题标题】:Read from com port C++从 com 端口 C++ 读取
【发布时间】:2012-09-09 00:20:08
【问题描述】:

我正在尝试与 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 时间做出响应,它确实有效。当我阅读某些内容时,阅读器的位置会向前移动吗?当我从缓冲区中读取某些内容时,它会自动从缓冲区中删除吗?有人知道怎么做吗?

【问题讨论】:

  • 什么平台?它在 Windows 上吗? fstream 不是什么好东西,因为它隐藏了低级错误。

标签: c++ arduino fstream


【解决方案1】:

您应该获取 arduino Firmata windows 工具的代码。它会做你想做的一切。

http://firmata.org/wiki/Main_Page

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多