【发布时间】:2015-06-24 17:19:04
【问题描述】:
我正在编写一个 C++ 程序,用于使用 boost::asio 通过串行端口与 Arduino 进行通信。建立连接后,Arduino 会自行重置。然而,C++ 程序的输入缓冲区仍然包含从 Arduino 发送的旧数据。由于我对这些数据没有用处,我想清除输入缓冲区。我怎样才能使用 boost::asio 来做到这一点?
我的代码目前如下所示:
#include <boost/asio.hpp>
#include <vector>
#include <iostream>
using namespace std;
using namespace boost::asio;
int main()
{
io_service io_service;
serial_port port(io_service, "/dev/ttyACM0");
port.set_option(serial_port_base::baud_rate(9600));
vector<char> buf(1);
read(port, buffer(buf));
cout << (int) buf[0] << endl;
return 0;
}
代码应该在读取命令处暂停并等待 arduino 发送串行数据。但是有旧数据导致代码立即继续。
【问题讨论】:
-
每次重置都可以一直看下去吗?
-
@Ben 当我打开串口时,Arduino 会自动重置,所以我看不到在重置之前读取所有数据的方法。然而,在重置 Arduino 后读取数据对我来说似乎有风险,因为 Arduino 可以在我仍在清除缓冲区的过程中开始发送数据。
-
The Arduino automatically resets when i open the serial port,为什么要这样做?你是这样设计的吗? -
@Ben 这是 Arduino 的默认行为。
-
这听起来不太理想,也许你应该这样做this
标签: c++ serial-port arduino boost-asio