从boost serial_port读取每几个读数读取不正确的数据

时间:2016-02-13 05:41:07

标签: c++ boost serial-port boost-asio streambuf

我将一个字符串放在"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;
}

0 个答案:

没有答案