#1 2017-12-21 00:08:12

GroGaloraGran
Участник
Из Киев
Зарегистрирован: 2017-05-17
Сообщений: 14

Проблема с lcd 2004 i2c

Привет.
Столкнулся с проблемой вывода информации.
К примеру при попытке вывода информации с датчика температуры dht21 по рабочему скетчу (из сети) выводит место, например, 24.5 градуса только 2.5 на экран.
Пример кода

include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2     // пин для сигнала поступающего с датчика

//выбор используемого датчика
//#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
#define DHTTYPE DHT21   // DHT 21 (AM2301)

//инициализация датчика
DHT dht(DHTPIN, DHTTYPE);

byte degree[8] =      // кодируем символ градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};    

 
LiquidCrystal_I2C lcd(0x27,20,4);   // Задаем адрес и размерность дисплея

void setup() {
  lcd.begin();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
  
   Serial.begin(9600);  
  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);            // Устанавливаем курсор в начало 1 строки
  lcd.print("Hum  =     % ");     // Выводим текст
  lcd.setCursor(7, 0);            // Устанавливаем курсор на 7 символ
  lcd.print(h, 1);                // Выводим на экран значение влажности
  lcd.setCursor(0, 1);            // Устанавливаем курсор в начало 2 строки
  lcd.print("Temp =     \1C ");   // Выводим текст, \1 - значок градуса
  lcd.setCursor(7, 1);            // Устанавливаем курсор на 7 символ 
  lcd.print(t,1);                 // Выводим значение температуры
}

Адрес i2c правильный, датчик температуры при проверке проверочным скетчем показывает правильные данные.

#2 2017-12-21 00:14:49

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 787

Re: Проблема с lcd 2004 i2c

GroGaloraGran пишет:

Привет.
Столкнулся с проблемой вывода информации.
К примеру при попытке вывода информации с датчика температуры dht21 по рабочему скетчу (из сети) выводит место, например, 24.5 градуса только 2.5 на экран.
Адрес i2c правильный, датчик температуры при проверке проверочным скетчем показывает правильные данные.

Может быть, ваш дисплей не поддрживает загрузку таблиц символов. Проверьте.

#3 2017-12-21 00:33:01

GroGaloraGran
Участник
Из Киев
Зарегистрирован: 2017-05-17
Сообщений: 14

Re: Проблема с lcd 2004 i2c

Имеете ввиду создание своего символа? Если и так, то при удалении кода этого символа и его упоминания должно было исправить эту проблему.
Брал этот
https://arduino-ua.com/prod663-LCD_20x4_shina_I2C

Редактировался GroGaloraGran (2017-12-21 00:36:21)

#4 2017-12-21 11:32:47

void loop
Участник
Зарегистрирован: 2016-10-20
Сообщений: 22

Re: Проблема с lcd 2004 i2c

Вот эта конструкция не выведет символ градуса

lcd.print("Temp =     \1C ");   // Выводим текст, \1 - значок градуса

Должно быть

  lcd.print("Temp =        C ");   // Выводим текст
  lcd.setCursor(7, 1);            // Устанавливаем курсор на 7 символ 
  lcd.print(t,1);                 // Выводим значение температуры
  lcd.setCursor(12, 1);            // Устанавливаем курсор на 12 символ
  lcd.write(1);                 // Выводим символ градуса

#5 2017-12-21 11:57:45

GroGaloraGran
Участник
Из Киев
Зарегистрирован: 2017-05-17
Сообщений: 14

Re: Проблема с lcd 2004 i2c

Меня больше беспокоит, что не выводит корректно температуру (

pslcmvnzaeo208rzohg7xhjet.jpg

Редактировался GroGaloraGran (2017-12-21 11:58:11)

#6 2017-12-21 12:17:02

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 787

Re: Проблема с lcd 2004 i2c

GroGaloraGran пишет:

Меня больше беспокоит, что не выводит корректно температуру

Все в порядке, и символ ваш выводится. Просто, вы что-то напутали в программе. И протестируйте все позиции дисплея, на всякий члучай.

#7 2017-12-21 12:20:41

GroGaloraGran
Участник
Из Киев
Зарегистрирован: 2017-05-17
Сообщений: 14

Re: Проблема с lcd 2004 i2c

Символ выводится а температура некорректна. Место например 22.5 показывает 2.5.

#8 2017-12-21 13:08:48

GroGaloraGran
Участник
Из Киев
Зарегистрирован: 2017-05-17
Сообщений: 14

Re: Проблема с lcd 2004 i2c

А еще он текст выводит только если по 1 букве, только заметил..

#9 2017-12-21 13:37:50

GroGaloraGran
Участник
Из Киев
Зарегистрирован: 2017-05-17
Сообщений: 14

Re: Проблема с lcd 2004 i2c

Ура. Вопрос решен.
9jisugaiynt8z8ros5petbq9o.jpg
Проблему решила альтернативная библиотека для i2c.
Всем спасибо.

Редактировался GroGaloraGran (2017-12-21 13:38:24)

#10 2017-12-21 13:52:05

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 787

Re: Проблема с lcd 2004 i2c

Пожалуйста. Хочу сказать на счет этой "стандартной" Wire библиотеки. Лучше применять свою. У нее буффер вывода не циклический. Нужно делить поток самому. Это усовершенствование появилось в новых редакциях Ардуино ИДЕ. Да и логика вывода странная. У меня перестали работать старые программы для графического индикатора, из за этого.

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела