Progetto camera albergo problemi configurazione dht11

Salve a tutti, Sto simulando una camera di albergo con controllo accessi tramite lettore di card rfid, che fa accendere una luce quando la luminosità e bassa grazie alla fotoresistenza che ho integrato. Vado al dunque ho inserito un sensore dht 11, ho preso lo sketch dal kit 37 sensori elegoo; il mio problema è che non riesco a fare visualizzare la temperatura sul monitor seriale. Posto lo sketch, se c'è qualche anima pia che mi può aiutare grazie...

Sketch

digita o incolla il codice qui

#include <MFRC522.h>
#include <string.h>
#include <dht_nonblocking.h>
#define GREEN_LED_PIN 2
#define RED_LED_PIN 3
#define RELAY_PIN 8
#define DHTPIN 7
#define DHT_SENSOR_TYPE DHT_TYPE_11

MFRC522 rfid(10, 9);

static const int DHT_SENSOR_PIN = 7;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );

String users[] = {"f3e11e15"};
int usersSize = sizeof(users)/sizeof(String);
int relay = 8;
int val = 0;                    // variable for reading the pin status
int inputPin = 6;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int fotoresistenzaPin = A0;
int soglia = 500;               //fotoresistors

void setup(){
 Serial.begin(115200); 
 SPI.begin();
 rfid.PCD_Init();
 pinMode(GREEN_LED_PIN, OUTPUT);
 pinMode(RED_LED_PIN, OUTPUT);
 pinMode(RELAY_PIN, OUTPUT);
 pinMode(inputPin, INPUT);     // declare sensor as input
 pinMode(DHT_SENSOR_PIN, INPUT);
}


void loop(){
 if(rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()){
   char a = uid = getUID();
   if(checkUID(uid)){
     blinkLed(GREEN_LED_PIN, 2000, 1);
     digitalWrite(RELAY_PIN, HIGH);
   }else{
     blinkLed(RED_LED_PIN, 400, 2);
     digitalWrite(RELAY_PIN, LOW);
   }
   }else if{
     float temperature;
     float humidity;

 if(dht_sensor.measure(&temperature, &humidity)){
   Serial.print( "T = " );
   Serial.print( temperature, 1 );
   Serial.print( " deg. C, H = " );
   Serial.print( humidity, 1 );
   Serial.println( "%" );
 }
}
   }
 }
 delay(100);
 
  val = digitalRead(inputPin);  // read input value
 if (val == HIGH) {            // check if the input is HIGH
   digitalWrite(relay, HIGH);  // turn LED ON
   if (pirState == LOW) {
     // we have just turned on
     Serial.println("Motion detected!");
     // We only want to print on the output change, not state
     pirState = HIGH;
     delay(10000);
   }
 } else {
   digitalWrite(relay, LOW); // turn LED OFF
   if (pirState == HIGH){
     // we have just turned of
     Serial.println("Motion ended!");
     // We only want to print on the output change, not state
     pirState = LOW;
   }
 }
 
 
  int luminosita = analogRead(fotoresistenzaPin);
 Serial.print("Luminosita: ");
 Serial.println(luminosita);
 delay(100);
 
}

String getUID(){
 String uid = "";
 for(int i = 0; i < rfid.uid.size; i++){
   uid += rfid.uid.uidByte[i] < 0x10 ? "0" : "";
   uid += String(rfid.uid.uidByte[i], HEX);
 }
 rfid.PICC_HaltA();
 return uid;
}

bool checkUID(String uid){
 for(int i = 0; i < usersSize; i++){
   if(users[i] == uid){
     return true;
   }
 }
 return false;
}

void blinkLed(int led, int duration, int repeat){
 for(int i = 0; i < repeat; i++){
   digitalWrite(led, HIGH);
   delay(duration/2);
   digitalWrite(led, LOW);
   delay(duration/2);
   }
  
}
  

@francescoesp32 : in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di fare il tutto al più presto. :wink:

Cosa ti restituisce il serial monitor?

In questo modo visualizzi solo il primo numero :face_with_raised_eyebrow:

An optional second parameter specifies the base (format) to use; permitted values are BIN(binary, or base 2) , OCT(octal, or base 8) , DEC(decimal, or base 10) , HEX(hexadecimal, or base 16) . For floating point numbers, this parameter specifies the number of decimal places to use.<

Grazie 1000, ho risolto utilizzando un altro sketch del sensore

Cosa cambiava dal codice che hai postato?
Condividi la tua esperienza, così se qualcuno avrà lo stesso problema può trovare la soluzione :slight_smile:

Essendo il codice postato non scritto e indentato bene, l'ho provato su
Notepad++ che evidenza le coppie di parentesi graffe.
Be c'è un else if ma senza condizione, 3/4 del codice che dovrebbero fare parte del loop() sono fuori, in quanto troppe parentesi graffe { che sembrano messe a caso. Non so se il programma va bene ma già per questi motivi non poteva funzionale.
Codice scritto da gli altri si intende librerie ma non copia e incolla, che sono solo esempi e non codice da utilizzare.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.