temperatura e umidità

ciao! premesso che sono un neofita ho un problemino con il sensore di temperatura e l’umidità.
hardware usato:

Arduino nano
Schermo OLED 0.96"
DHT11

collegamenti:
Arduino 3.3V — OLED Vcc
Arduino GND — OLED GND
Arduino A4 — OLED SDA
Arduino A5 — OLED SCL
Arduino D2 — DHT11 Data
Arduino 5V — DHT Vcc
Arduino GND — DHT11 GND

codice usato:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SimpleDHT.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

 #if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

int pinDHT11 = 2;

SimpleDHT11 dht11;

byte temperature = 0;
byte humidity = 0;
byte data[40] = {0};


void setup() {
 // put your setup code here, to run once:

 if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
   display.print("Read DHT11 failed");
   return;
 }
 
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 display.display();
 
 
}

void loop() {
 // put your main code here, to run repeatedly:
 dataShow(); 
}

void dataShow(void) {

 display.setTextSize(1.5);
 display.setTextColor(WHITE);
 display.setCursor(0,0);
 display.clearDisplay();
 display.println("OLED DHT TEST");
 display.print("House Temp : ");
 display.print(temperature);
 display.println(" C");
 display.print("House Hum : ");
 display.print(humidity);
 display.println(" %");
 display.display();
 delay(1000);
 
}

il problema che riscontro è il seguente:
I valori di temperatura e umidità non si aggiornano ogni 1 secondo come indicato nel delay(1000); ma rimangono invariati a meno che non tolgo e rimetto la corrente. Stando alla regola se per esempio tengo tra le mani il sensore, dovrei vedere la temperatura/umidità cambiare e questo non avviene. il sensore sembra che funziona. chi ha dei suggerimenti?

Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO… Grazie.
Qui una serie di link utili, non inerenti al tuo problema:

Il codice DEVI racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

sixis,
quando hai fatto quanto richiesto fatti risentire, l’errore è molto banale.

>sixis: … mi raccomando, come ti è già stato detto ed in conformità al regolamento, punto 7, devi editare il tuo post iniziale (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie :slight_smile:

Guglielmo

>sixis: ... NON uare il bottone "Report to moderator" per comunicazioni relative al funzionamento del programma, ma scrivi direttamente qui nel thread. :)

Quel bottone (... che, per altro, manda il tuo messaggio hai moderatori di TUTTO il mondo e non solo a me) serve per segnalare cose importanti ai suddetti moderatori ... cross-posting, offese, post errati, ecc. ecc. ma NON per normali cose che riguardano il thread ;)

Grazie,

Guglielmo

Nel tuo sketch viene effettuata la lettura dei dati del sensore nel setup, parte che viene eseguita una volta sola, ma non nel loop, quindi i dati non verranno mai aggiornati. Ecco perché vedi dei valori fissi. Se noti in loop viene richiamata la funzione datashow() la quale si limita a mostrare sull'OLED le stringhe e le variabili temperature e humidity che però non sono aggiornate da nessuna parte.

La soluzione più semplice credo sia quella di ricopiare questo

 if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
   display.print("Read DHT11 failed");
   return;
 }

in datashow() subito prima della riga display.setTextSize(1.5);

Spero di essere stato chiaro!

zoomx: Nel tuo sketch viene effettuata la lettura dei dati del sensore nel setup, parte che viene eseguita una volta sola, ma non nel loop, quindi i dati non verranno mai aggiornati. Ecco perché vedi dei valori fissi. Se noti in loop viene richiamata la funzione datashow() la quale si limita a mostrare sull'OLED le stringhe e le variabili temperature e humidity che però non sono aggiornate da nessuna parte.

La soluzione più semplice credo sia quella di ricopiare questo

 if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
   display.print("Read DHT11 failed");
   return;
 }

in datashow() subito prima della riga display.setTextSize(1.5);

Spero di essere stato chiaro!

wowowow !! magnifico FUNZIONA! grazie mille e complimenti per la professionalità!! a presto ;-))