0

我在我的流缓冲区中放置了一个字符串,格式为"000.3\r\n 000.3\r\n ...". 每隔几个读数我就会捕捉到一个".3\r\n 000.3\r\n ...因为,我每帧只从缓冲区读取一次,当绘制到屏幕上时,值的突然跳跃变得明显。我应该如何测试缓冲区是否准备好读取?只需检查我的小数点后是否有 000?或者有没有更好的方法来检查正确的数据?

初始化端口:

using namespace boost::asio;
serial_port_base::parity PARITY(serial_port_base::parity::none);
serial_port_base::stop_bits STOPBITS(serial_port_base::stop_bits::one);
serial_port_base::flow_control FLOWCONTROL(serial_port_base::flow_control::none);

port->set_option(serial_port_base::baud_rate(57600));
port->set_option(PARITY);
port->set_option(STOPBITS);
port->set_option(serial_port_base::character_size(8));
port->set_option(FLOWCONTROL);

从端口读取:

float Serial::ReadData()
{
    boost::asio::streambuf buff;
    read_until(*port, buff, "\r\n");
    std::istream is(&buff);

    float f;
    if (is >> f)
    {
        buff.consume(sizeof(buff);
        return f;
    }

    return 0;
}
4

0 回答 0