Некорретное отображение символов на 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 строку заменить на
Кстати, знак градуса скорее всего есть у вас в дисплее. Попробуйте:
lcd.print("Temp: "); lcd.print(Temp); lcd.print("\xDF""C");В точности.
"Temp: 20.51 С0 °С" или "Temp: 20.51 С5 °С" и т.д. Со временем меняются на С0, С3, С5, С9.
а провода от ардуины к дисплею,какой длинны?
Примерно 30 см.
Кстати, знак градуса скорее всего есть у вас в дисплее. Попробуйте:
lcd.print("Temp: "); lcd.print(Temp); lcd.print("\xDF""C");Если знак градуса удалить и оставить просто символ "С", проблема все равно остается.
Нужно еще попробовать без вывода знака градуса и символа "С". Посмотреть, будут ли появляться значения С0, С5, С9 и т.д. после значения температуры.
Нужно еще попробовать без вывода знака градуса и символа "С".
от именно! и в первую очередь без С
После 59 строки позиционируйте курсор. И будет Вам щастье!