2015-04-17 3 views
1

Я пишу программу на C++ для связи с Arduino через последовательный порт с использованием boost :: asio. После установления соединения Arduino сбрасывает себя. Однако входной буфер программы C++ по-прежнему содержит старые данные, отправленные из Arduino. Поскольку я не использую эти данные, я бы хотел очистить входной буфер. Как я могу это сделать, используя boost :: asio?Очистить входные данные из последовательного порта в 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, чтобы отправить последовательные данные. Однако есть старые данные, вызывающие немедленное продолжение кода.

+0

Вы можете просто читать, пока ничего не останется при каждом сбросе? –

+0

@Ben Arduino автоматически сбрасывается, когда я открываю последовательный порт, поэтому я не вижу способа считывания всех данных перед сбросом. Чтение данных после перезагрузки Arduino, однако, кажется мне рискованным, поскольку Arduino может начать отправлять данные, пока я все еще в процессе очистки буфера. – Manuel

+0

'Arduino автоматически сбрасывается, когда я открываю последовательный порт', почему он это делает? Вы разработали его таким образом? –

ответ

1

Вы можете очистить последовательный буфер, который должен делать то, что вы хотите (избавиться от всех ожидающих данных до момента флеша). К сожалению, похоже, у Boost нет обертки для этого, поэтому вам нужно захватить native_handle для последовательного порта. Я основывался на коде, который я использую для ответа на этот вопрос: https://stackoverflow.com/a/22598329/1167230

Смежные вопросы