Как очистить выходной буфер Arduino Uno?
Я закодировал arduino для DHT11, который использовался для печати влажности в первой и температуры во второй строке. Но иногда, когда я открываю SerialPort, я получаю абсурдные данные.
@Shubham Rajput, 👍1
Обсуждение2 ответа
Ты не можешь.
Данные, которые вы видите, уже были отправлены при предыдущем выполнении скетча до того, как основной микроконтроллер был сброшен. Эти данные хранятся в небольшом буфере внутри микросхемы интерфейса 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
Я обошел эту проблему, отправив байт на Arduino всякий раз, когда я готов получать данные, используя этот быстрый и грязный метод:
if(Serial.available() > 0) { // Доступен хотя бы один байт
Serial.println(millis());
Serial.read(); // Считывает (один) символ, чтобы очистить буфер
}
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Возможный дубликат https://stackoverflow.com/questions/10105666/clearing-the-terminal-screen, @v7d8dpo4
Я отправляю эти данные из arduino в pi последовательно и из pi в облако. Поэтому несколько раз я получал влажность в облаке равной 6767,0. Я печатаю на консоли только для того, чтобы показать пример., @Shubham Rajput