Нечетные символы в последовательном мониторе
Недавно я работал над веб-сайтом, который принимает данные от Arduino, например, о температуре и влажности. Но есть фатальная проблема, с которой я столкнулся, последовательный монитор выдает какой-то мусор с некоторыми фактическими показаниями. Есть ли способ устранить это?
╰─λ cat /dev/ttyACM0
T0°C
Humidity: 39.00%
00%
Temperature: 32.70°C
Humidity: 39.00%
Temperature: 32.70°C
Humidity: 39.00%
Temperature: 32.70°C
Humidity: 39.00%
00%
Temperature: 32.70°C
Humidity: 39.00%
Temperature: 32.70°C
Humidity: 39.00%
Temperature: 32.70°C
Humidity: 39.00%
idit9.00Tempure:70°Humi: 39
emperatu32.7
Huty: 0%
idit9.00Tempure:70°umidity.00%Tratu32.7
idit9.00Tempture.70�Humi: 39
empere: 0°Cmidi39.0
atur°C
Hum9.00
код-
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
Serial.begin(9600);
sensor_t sensor;
dht.begin();
delayMS = sensor.min_delay / 1000;
}
void loop() {
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Error reading temperature!"));
}
else {
Serial.print(F("Temperature: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
}
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Error reading humidity!"));
}
else {
Serial.print(F("Humidity: "));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
}
}
плата - Arduino Uno (R3)
@sierra madre, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 0
Как было отмечено в комментариях, вы пытаетесь считывать показания датчика со слишком высокой скоростью.
Попробуйте изменить эту строку:
delayMS = sensor.min_delay / 1000;
к:
delayMS = sensor.min_delay = 1000;
или:
delayMS = sensor.min_delay = 3000;
Это будет считывать данные с датчика медленнее, и вы получите четкие выходные данные.
,
@DrG
Смотрите также:
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope
- Очень простая операция Arduino Uno Serial.readString()
- AT-команда не отвечает на последовательный монитор
Добро пожаловать в Ардуино:SE. Не видя вашего кода и настройки оборудования, мы не сможем ответить на ваш вопрос., @sempaiscuba
@sempaiscuba спасибо, что поправили меня. Я отредактировал его сейчас, дайте мне знать, если есть какие-то дальнейшие исправления., @sierra madre
Я бы напечатал что-то уникальное в
setup()
, из которого в выходном листинге будет видно, что он запускается только один раз., @timemageКаково фактическое значение
delayMS
? Вычисление выглядит подозрительно, так какsensor
не инициализирован. Значение должно быть около 2500 мс., @PMF@PMF Он говорит, что это 2000 мс, @sierra madre
В вашей системе установлен ModemManager? Не могли бы вы проверить, что никто больше не возится с последовательным портом? Вот так:
sudo fuser -v /dev/ttyACM0
., @Edgar BonetОчевидно, датчикам DHT11 требуется не менее 2 секунд, чтобы сделать новое показание. Рассмотрите возможность ожидания чуть более 2 секунд в цикле. Лично я не смог заставить DHTxx работать надежно и переключился, кажется, на si7021., @st2000