Вывод с DHT11 на LCD

makssmr
Offline
Зарегистрирован: 13.03.2021

Добрый день, прошу не кидаться камнями, только начинаю изучать ардуино. Вожусь с DHT11, хочу вывести данные на LCD дисплей. В конце концов с трудом что то да получилось, но есть два момента. 1)Не отображаются символы "T" "H" в начале, и градус целься в конце.( так же в конце "С" иногда проподает) 2) Не корректно отображаются данные с датчика, вместо условно 13% влажности пишет 1.00, вместо 26 градусов пишет 2.00 3) Иногда выдает на дисплее какую то чушь(при этом я ничего не трогал и не менял)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Код выложишь или гадать на картах таро предлагаешь?

makssmr
Offline
Зарегистрирован: 13.03.2021
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
 
// назначение PIN и выбор типа датчика DHT
#define DHTPIN 2 // 
// раскомментировать нужную строку
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
 
DHT dht(DHTPIN, DHTTYPE);   // инициализация сенсора DHT
LiquidCrystal_I2C lcd(0x27,16,2);  // инициализация дисплея
 
byte symb_grad[8] =      // кодирование символа градуса
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
 
void setup()
{
lcd.init();  // инициализация lcd
lcd.backlight(); //включение подсветки дисплея
lcd.createChar(1, symb_grad);  // регистрируем собственный символ с кодом 1
Serial.begin(9600);   // запуск передачи данных
dht.begin();  //  запуск датчика DHT
}
 
void loop()
{
// добавляем паузы в 2 секунды между измерениями
delay(2000);
 
float h = dht.readHumidity();   // считывание влажности
float t = dht.readTemperature();   // считывание температуры
 if (isnan (h)||isnan (t))
 {
  Serial.print("Ошибка считывания");
  return;
 }
 
 Serial.print ("Влажность: ");
 Serial.print (h);
 Serial.print (" %\t");
 Serial.print ("Температура: ");
 Serial.print (t);
 Serial.println (" c");
 
// Выводим показания влажности и температуры
//lcd.clear();  // очистка экрана
lcd.setCursor(0,0); //ставим курсор на 1 символ первой строки
lcd.print(dht.readHumidity()); // печатаем сообщение на первой строке
lcd.setCursor(5,0);//ставим курсор на 1 символ первой строки 
lcd.print(" %");//печатаем сообщение на первой строке
lcd.setCursor(0,1); //ставим курсор на 1 символ первой строки 
lcd.print(dht.readTemperature());
lcd.setCursor(5,1);
lcd.print(" \1C");
 
}
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

хорошо, у тебя ошибка в строке №ХЗ. 

Читать умеешь?  Читай

makssmr
Offline
Зарегистрирован: 13.03.2021

Типа библиотека DHT не в <> а в "" ?

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
 
// назначение PIN и выбор типа датчика DHT
#define DHTPIN 2 // 
// раскомментировать нужную строку
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
 
DHT dht(DHTPIN, DHTTYPE);   // инициализация сенсора DHT
LiquidCrystal_I2C lcd(0x27,16,2);  // инициализация дисплея
 
byte symb_grad[8] =      // кодирование символа градуса
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
 
void setup()
{
lcd.init();  // инициализация lcd
lcd.backlight(); //включение подсветки дисплея
lcd.createChar(1, symb_grad);  // регистрируем собственный символ с кодом 1
Serial.begin(9600);   // запуск передачи данных
dht.begin();  //  запуск датчика DHT
}
 
void loop()
{
// добавляем паузы в 2 секунды между измерениями
delay(2000);
 
float h = dht.readHumidity();   // считывание влажности
float t = dht.readTemperature();   // считывание температуры
 if (isnan (h)||isnan (t))
 {
  Serial.print("Ошибка считывания");
  return;
 }

 Serial.print ("Влажность: ");
 Serial.print (h);
 Serial.print (" %\t");
 Serial.print ("Температура: ");
 Serial.print (t);
 Serial.println (" c");
 
// Выводим показания влажности и температуры
//lcd.clear();  // очистка экрана
lcd.setCursor(0,0); //ставим курсор на 1 символ первой строки
lcd.print(dht.readHumidity()); // печатаем сообщение на первой строке
lcd.setCursor(5,0);//ставим курсор на 1 символ первой строки 
lcd.print(" %");//печатаем сообщение на первой строке
lcd.setCursor(0,1); //ставим курсор на 1 символ первой строки 
lcd.print(dht.readTemperature());
lcd.setCursor(5,1);
lcd.print(" \1C");

}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну начнем помолясь...

makssmr пишет:
1)Не отображаются символы "T" "H" в начале, и градус целься в конце.( так же в конце "С" иногда проподает)

в какой строке выводится символ Т и  Н на экран?

makssmrr
Offline
Зарегистрирован: 13.03.2021

Я заново создал тему, видимо забанили)) На счет эти символов, это было в другом коде, все вывелось. В 60 и 64 строке по идее должен выводиться % и символ градуса и С, на сколько я понял. Но этого не происходит.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

makssmr, сравните между собой строки 57, 59 и 61. Судя по комментариям, они все должны делать одно и то же, а цифры в них почему-то различаются.

Приведите код и комментарии в соответствии друг с другом и, думаю, проблема разрешится.

Upd: Впрочем, похоже, это не единственная ошибка, но исправьте пока эту.

makssmrr
Offline
Зарегистрирован: 13.03.2021

Если я правильно разобрался, мы просто выбираем место на дисплее куда будет выводиться следующий print, мне кажется там все верно, а в комментарии думаю просто ошиблись 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вы думаете, я буду уговаривать Вас исправлять ошибки?

Не хотите - не надо.

makssmrr
Offline
Зарегистрирован: 13.03.2021

Конечно хочу, просто я не понимаю что там можно исправить, код точь в точь как из источника, там одинаковые комментарии, и разные цифры. Я конечно попробую поиграться с ними , посмотрим 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Надо не "играться", а четко понимать, что делаешь и зачем.

Способ изготовления скетчей a'la обезьяна за пишущей машинкой, как правило, не приводит ни к чему хорошему.

makssmrr
Offline
Зарегистрирован: 13.03.2021

Ну а как тогда исправить ошибку о которой ты говоришь? Я взял код, и попытался разобраться в нем. Строки 57,59 и 61 я тебе выше сказал как я понял. Ты намекаешь на то что в этих строках есть проблема и не хочешь ее озвучить, остаётся только играться с разными вариантами.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

andriano пишет:

 a'la обезьяна за пишущей машинкой

Согласно известной одноименной теореме, рано или поздно это приведет к задуманному результату 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

makssmrr пишет:

Ну а как тогда исправить ошибку о которой ты говоришь? Я взял код, и попытался разобраться в нем. Строки 57,59 и 61 я тебе выше сказал как я понял. Ты намекаешь на то что в этих строках есть проблема и не хочешь ее озвучить, остаётся только играться с разными вариантами.

Намекаю - поправьте комментарии в соответсвии с тем, что в коде.