Spero che quanto segue possa servire a qualcuno.
Ho provato svariati codici per far funzionare un DHT11 con un display 16x2 e finalmente ci sono riuscito.
Utilizzando la porta seriale il sensore funziona regolarmente ma quando cercavo di visualizzare la temperatura su un display LCD 16x2 non c'era verso...
#include <LiquidCrystal.h> //Libreria per pilotare il display LCD
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 8
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Inizializzazione della libreria con i pin del display LCD
const int ledPin = 12;
void setup() {
lcd.begin(16, 2); //Impostazione del numero di colonne e righe del display LCD
lcd.setCursor(2, 0); //Sposto il cursore sulla prima riga (riga 0) e sulla prima colonna
lcd.print("Temperatura:"); //Stampo il messaggio 'Temperatura:' sulla prima riga
pinMode(12, OUTPUT);
digitalWrite(ledPin, HIGH);
lcd.setCursor(13, 1);
lcd.print("OFF");
}
void loop() {
DHT11.read(DHT11PIN);
lcd.setCursor(6, 1); //Sposto il cursore sulla prima colonna e sulla seconda riga
lcd.print((float)(DHT11.temperature), 0); //Stampo sul display LCD la temperatura con ",1" imposto il numero di decimali dopo la virgola
lcd.print(" C"); //Stampo uno spazio e il carattere 'C' sul display
if((float)(DHT11.temperature)>30)
{digitalWrite(ledPin, HIGH);
lcd.setCursor(13, 1);
lcd.print("OFF");}
else if((float)(DHT11.temperature)<25)
{digitalWrite(ledPin, LOW);
lcd.setCursor(13, 1);
lcd.print(" ON");}
delay(1000);
}
nello sketch c'è anche la gestione di un relè che comanda una resistenza affinché nell'ambiente venga mantenuta una temperatura compresa tra i 25° e i 30°
in allegato troverete la libreria del DHT11 che ho usato.
dht11.zip (2.58 KB)