Некорретное отображение символов на LCD дисплей

Cague
Offline
Зарегистрирован: 20.05.2020

Всем привет.

У меня следующая проблема. К 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");
  }
}

 

fredstone
Offline
Зарегистрирован: 13.05.2017

а провода от ардуины к дисплею,какой длинны?

sadman41
Offline
Зарегистрирован: 19.10.2016

Появляется "что-то типа" или в точности такое?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Попробуйте 60 строку заменить на 

lcd.write(1);

 

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

Кстати, знак градуса скорее всего есть у вас в дисплее. Попробуйте:

lcd.print("Temp: ");
lcd.print(Temp);
lcd.print("\xDF""C");

 

Cague
Offline
Зарегистрирован: 20.05.2020

sadman41 пишет:
Появляется "что-то типа" или в точности такое?

В точности.

"Temp: 20.51 С0 °С" или "Temp: 20.51 С5 °С" и т.д. Со временем меняются на С0, С3, С5, С9.

Cague
Offline
Зарегистрирован: 20.05.2020

fredstone пишет:

а провода от ардуины к дисплею,какой длинны?

Примерно 30 см.

Cague
Offline
Зарегистрирован: 20.05.2020

VladimirTsibrov пишет:

Кстати, знак градуса скорее всего есть у вас в дисплее. Попробуйте:

lcd.print("Temp: ");
lcd.print(Temp);
lcd.print("\xDF""C");

 

Если знак градуса удалить и оставить просто символ "С", проблема все равно остается.

Нужно еще попробовать без вывода знака градуса и символа "С". Посмотреть, будут ли появляться значения С0, С5, С9 и т.д. после значения температуры.

b707
Offline
Зарегистрирован: 26.05.2017

Cague пишет:

Нужно еще попробовать без вывода знака градуса и символа "С".

от именно! и в первую очередь без С

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

После 59 строки позиционируйте курсор. И будет Вам щастье!