desktop

Código para mostrar temperatura y humedad en pantalla LCD 16*2 con I2C

Cordial saludo, amigos. Espero se encuentren muy bien en cualquier parte del mundo donde se encuentren.
Quisiera preguntarles, ya que soy realmente nuevo en el tema de Arduino.
He comprado un Arduino uno R3 con una pantalla 16*2 con un adaptador I2C y un sensor DHT22.
He probado el código de ejemplo y puedo ver los datos en el monitor serie, pero ahora quiero ver los datos en la pantalla.
H
e investigado en Internet pero los códigos que muestran dichas páginas me muestra error al verificar el código.
He intentado crear un código por mi cuenta siguiendo algunos tutoriales, utilizando lo siguiente:
C++:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN,DHTTYPE);
void setup() {
pinMode(8,OUTPUT);
lcd.init();
lcd.backlight();
// put your setup code here, to run once:
}
void loop() {
digitalWrite(8,HIGH);
float h = dht.readHumidity();
float h = dht.readTemperature();
delay(2000);
lcd.setCursor(0,1)
lcd.print(Humedad);
lcd.setCursor(1,1);
lcd.print("temperatura");
// put your main code here, to run repeatedly:
}
Y al realizar este código obtengo el siguiente error:
C++:
C:\Users\rodrigo\AppData\Local\Temp\.arduinoIDE-unsaved2023317-5496-578xb3.0lzfc\sketch_apr17b\sketch_apr17b.ino: In function 'void loop()':
C:\Users\rodrigo\AppData\Local\Temp\.arduinoIDE-unsaved2023317-5496-578xb3.0lzfc\sketch_apr17b\sketch_apr17b.ino:20:7: error: redeclaration of 'float h'
float h = dht.readTemperature();
^
C:\Users\rodrigo\AppData\Local\Temp\.arduinoIDE-unsaved2023317-5496-578xb3.0lzfc\sketch_apr17b\sketch_apr17b.ino:19:7: note: 'float h' previously declared here
float h = dht.readHumidity();
^
C:\Users\rodrigo\AppData\Local\Temp\.arduinoIDE-unsaved2023317-5496-578xb3.0lzfc\sketch_apr17b\sketch_apr17b.ino:23:1: error: expected ';' before 'lcd'
lcd.print(Humedad);
^~~
Se encontraron varias bibliotecas para "LiquidCrystal_I2C.h"
Usado: C:\Users\rodrigo\Documents\Arduino\libraries\LiquidCrystal_I2C
No utilizado: C:\Users\rodrigo\Documents\Arduino\libraries\New-LiquidCrystal-master
exit status 1

Compilation error: redeclaration of 'float h'
Tengo muchas dudas sobre qué colocar en el código lcd.print(); para mostrar los datos.
A
gradezco a la persona de buen corazón que me desee colaborar.
 
Última edición por un moderador:
Aquí:

float h = dht.readHumidity();
float h = dht.readTemperature();

No se puede declarar dos veces una variable con el mismo nombre, es decir "h"...

Además, al colocar un valor en "h" sin después hacer algo con él, hace que se pierda el dato de la primera línea haciendo que solo tendrás la data de dht.readTemperature.

Crea una variable para cada proceso...
 
También, si quieres, puedes usar una única variable h, pero has de escribir en el LCD el valor de esa variable antes de volver a usarla:

Código:
float h = dht.readHumidity();
lcd.SetCursor (0,1;)
lcd.Print h;
float h = dht.readTemperature();
lcd.SetCursor (1,1;)
lcd.Print h;

Un saludo.

Alba.
 
Hola queria saber si me podrian ayudar cómo hacer para mostrar la temperatura de un LM35 en una pantalla LCD 16*2 en Bascom AVR para el microcontrolador ATmega328P pude hacer algo pero no llegue al funcionamiento que queria.

Código:
$regfile = "m328pdef.dat"
$crystal = 16000000

Config Lcd = 16x2
Config Lcdpin = Pin , Rs = Portd.2 , E = Portd.1 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7


Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Temp As Word

Do

Adc Channel 0, Temp


Temp =(temp * 500) / 1024


Lcdout $fe , 1 , "Temperatura: " , #temp , "C"

    Wait 2
Loop

Circuito:
Foro.png

Errores Foro 2.png
 
Para leer el ADC usas Getadc(0)
La temperatura, ten cuidado con el rango por que digamos a 80℃ con la relación de 10mV por cada ℃ tendrás 800mV ahora esto entre el escalado (se usa 2^res-1 = 1023) 5000mV/1023= 4.88mV por cada unidad del ADC, entonces leería aproximadamente 164 en el ADC y si pones 164*500= 82000, word es de 16 bits así que 2^16-1= 65535 sería el límite, por lo que estarías desbordando, hagamos los cálculos inversos, 65535/500 = 131 entonces 131*4.88= 639.28mV por lo que lo máximo que podrías medir sería cerca de 61.9℃
Otro tema, si vas a hacer la división de enteros deberías ocupar \ y dejarlo más como (temp * 500)\1023
 
Perfecto igual esto es para una mini heladera osea que la medicion es para abajo voy a estar midiendo unos 10 grados por ahi aprox asi que ahora veo si puedo hacer algo gracias
No me podrias proporcionar el codigo arreglado?
 
Última edición:
Atrás
Arriba