Некорретное отображение символов на LCD дисплей
- Войдите на сайт для отправки комментариев
Пнд, 12/10/2020 - 22:00
Всем привет.
У меня следующая проблема. К arduino подключен датчик температуры ds18b20.
Имеется дисплей 2004 i2c.
Хочу выводить данные температуры в следующем формате "Temp:<температура>°С".
Все корректно работает, но через несколько часов работы после значения температуры и символами "°С" появляются значения C0, C5, C9.
Т.е. получается что-то типа "Temp: 20.51 С0 °С"
Можете подсказать, в чем заключается проблема? Почему добавляются эти символы?
Код:
#include <OneWire.h> #include <LiquidCrystal_I2C.h> #define LCD_UPDATE_TIME 60000 // интервал между измерением температуры (60 сек) OneWire ds(8); // подключение датчика температуры к 8 пину unsigned long lcdLastUpdateTime = 0; float Temp; uint32_t myTimer; uint8_t temp_cel[8] = { B00111, B00101, B00111, B00000, B00000, B00000, B00000 }; //закодировано в двоичной системе значек градуса LiquidCrystal_I2C lcd(0x27,20,4); void setup(void){ Wire.begin(); Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.createChar(1, temp_cel); } void setTemperature() { byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); if (millis() - lcdLastUpdateTime > LCD_UPDATE_TIME) { lcdLastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); int16_t raw = (data[1] << 8) | data[0]; Temp = (float)raw / 16.0; //Снятие температуры end========================== Serial.print("Temp = "); Serial.println(Temp); } } void loop(){ setTemperature(); if (millis() - myTimer >= 1000) { myTimer = millis(); lcd.setCursor(0, 2); lcd.print("Temp: "); lcd.print(Temp); lcd.print(char(1)); lcd.print("C"); } }
а провода от ардуины к дисплею,какой длинны?
Появляется "что-то типа" или в точности такое?
Попробуйте 60 строку заменить на
Кстати, знак градуса скорее всего есть у вас в дисплее. Попробуйте:
В точности.
"Temp: 20.51 С0 °С" или "Temp: 20.51 С5 °С" и т.д. Со временем меняются на С0, С3, С5, С9.
а провода от ардуины к дисплею,какой длинны?
Примерно 30 см.
Кстати, знак градуса скорее всего есть у вас в дисплее. Попробуйте:
Если знак градуса удалить и оставить просто символ "С", проблема все равно остается.
Нужно еще попробовать без вывода знака градуса и символа "С". Посмотреть, будут ли появляться значения С0, С5, С9 и т.д. после значения температуры.
Нужно еще попробовать без вывода знака градуса и символа "С".
от именно! и в первую очередь без С
После 59 строки позиционируйте курсор. И будет Вам щастье!