Я пишу программу на 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, чтобы отправить последовательные данные. Однако есть старые данные, вызывающие немедленное продолжение кода.
Вы можете просто читать, пока ничего не останется при каждом сбросе? –
@Ben Arduino автоматически сбрасывается, когда я открываю последовательный порт, поэтому я не вижу способа считывания всех данных перед сбросом. Чтение данных после перезагрузки Arduino, однако, кажется мне рискованным, поскольку Arduino может начать отправлять данные, пока я все еще в процессе очистки буфера. – Manuel
'Arduino автоматически сбрасывается, когда я открываю последовательный порт', почему он это делает? Вы разработали его таким образом? –