Как очистить выходной буфер Arduino Uno?

Я закодировал arduino для DHT11, который использовался для печати влажности в первой и температуры во второй строке. Но иногда, когда я открываю SerialPort, я получаю абсурдные данные.

, 👍1

Обсуждение

Возможный дубликат https://stackoverflow.com/questions/10105666/clearing-the-terminal-screen, @v7d8dpo4

Я отправляю эти данные из arduino в pi последовательно и из pi в облако. Поэтому несколько раз я получал влажность в облаке равной 6767,0. Я печатаю на консоли только для того, чтобы показать пример., @Shubham Rajput


2 ответа


3

Ты не можешь.

Данные, которые вы видите, уже были отправлены при предыдущем выполнении скетча до того, как основной микроконтроллер был сброшен. Эти данные хранятся в небольшом буфере внутри микросхемы интерфейса USB (или даже внутри самого драйвера USB CDC / ACM / USB UART, в зависимости от вашей ОС), к которому у вас нет доступа.

Вы просто должны игнорировать эти данные. Самый простой способ - поставить маркер в начале вашей программы, чтобы указать, что все, что получает данные, должно начать их прием с этого момента. Что-то вроде:

Serial.println();
Serial.println("START");
,

Вы можете отключить сброс, добавив конденсатор между GND и RESET. Хотя это делает загрузку нового кода менее удобной., @Gerben

@Gerben Это также означает, что вы можете начать читать часть строки цифр, которая выдает вам подобный мусор в начале приема. На самом деле это не решает проблему. Лучше использовать правильный протокол, а не обычный текст в формате ASCII., @Majenko

Хороший довод. Об этом я не подумал., @Gerben

Я отправляю эти данные из arduino в pi последовательно и из pi в облако. Так что несколько раз я получал влажность в облаках равной 6767,0. Я печатаю на консоли только для того, чтобы показать пример. Итак, нет ли способа очистить выходной буфер arduino при его запуске.?, @Shubham Rajput


0

Я обошел эту проблему, отправив байт на Arduino всякий раз, когда я готов получать данные, используя этот быстрый и грязный метод:

if(Serial.available() > 0) {  // Доступен хотя бы один байт
  Serial.println(millis());
  Serial.read();  // Считывает (один) символ, чтобы очистить буфер
}
,