Dubbi funzione if

Ciao a tutti! Sono appena entrato nel mondo di arduino e ho subito una domanda.. ho fatto uno sketch sul controllo di 2 relè che attiveranno una pompa ed un ventilatore in base a valori rilevati dal sensore temperatura e umidità dht22. Ho un problema con la funzione if. Vorrei far "accendere" un relè quando temperatura e umidità superano un valore max (e questo lo ho fatto e funziona) ma allo stesso modo vorrei far accendere una pompa quando il valore di umidità scende sotto un minimo... ecco quest'ultimo non riesco a farlo funzionare. Ho fatto una di seguito allatta due funzioni if...else. Qualcuno saprebbe aiutarmi? Grazie mille in anticipo!

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: - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Posta il codice, senza vederlo difficile aiutarti.

Dopo che ti sei presentato e tutto il resto, posta il codice e vediamo come hai lavorato ;) Mi raccomando i TAG code

si scusate… pensavo di aver postato il post di presentazione e invece…
vabbe ora l’ho postato e vi ripropongo i mio quesito:

questo è lo sketch

#include <DHT.h>

#define DHTPIN 2     
#define DHTTYPE DHT22  

#define fan 4

#define rele 7


int maxHum = 100;

int maxTemp = 20;

int minHum = 80;

DHT dht(DHTPIN, DHTTYPE);

void setup() {
 pinMode(fan, OUTPUT);
 Serial.begin(9600); 
 dht.begin();
}

void loop() {

 delay(2000);

 float h = dht.readHumidity();
 // Read temperature as Celsius
 float t = dht.readTemperature();
 
 
 if (isnan(h) || isnan(t)) {
   Serial.println("Impossibie leggere dal sensore!");
   return;
 }
 
 if(h > maxHum || t > maxTemp) {
     digitalWrite(fan, HIGH);
 } else {
    digitalWrite(fan, LOW); 
 }

 if(h <= minHum) {
      digitalWrite(rele, HIGH);
  } else {
     digitalWrite(rele, LOW); 
  }
 
 Serial.print("Umidita': "); 
 Serial.print(h);
 Serial.print(" %\t");
 Serial.print("Temperatura: "); 
 Serial.print(t);
 Serial.println(" *C ");

}

la seconda “if” non mi funziona…

 if(h <= minHum) {
      digitalWrite(rele, HIGH);
  } else {
     digitalWrite(rele, LOW); 
  }

dove sbaglio???

grazie mille in anticipo!!

… vedo però che il REGOLAMENTO NON lo hai letto con la DOVUTA attenzione ! :smiling_imp:

In conformità al suddetto regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More → Modify) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Guglielmo

credo di aver capito tutto ora! :stuck_out_tongue_closed_eyes:

Pari12: credo di aver capito tutto ora! :stuck_out_tongue_closed_eyes:

... si, a parte che ... ti sei accorto che ti sei portato dietro dei comandi di formattazione ? ... rileggi il sorgente e guarda nel loop() ... troverai dentro dei [ u] e [ /u] che non c'entrano nulla con il codice ... dagli una ripulita ;)

Guglielmo

ringrazio per la pazienza! :D

Beh quell’if mi pare correttamente impostato
Se l’umidità che leggi è minore di 80 verifica ciò che è dentro l’if, altrimenti fa un’altra cosa.
Se non funziona mi domanderei se il sensore segna meno di 80 oppure se i collegamenti siano giusti.
Hai provato anche semplicemente a mettere una serial.println nell’if e vedere se ci entra?

Premettwndo che il mio arduino è dotato di shield 4 rele che si incastra pwrfettamente sui pin di arduino e che i 5 rele sono pilotati dai pin 4, 5, 6 e 7. Il problema è che sul monitor seriale legge circa dai 29 ai 30 gradi come temperatura e come umidità sta intorno al 60 %, quindi in teoria dovrebbe darmi un qualche segnale sul pin 7 (vedendo lo sketch) e il led del rele pilotato dal pin 7 non si accende… mentre il relè pilotato dal pin 4 si, rispettando ed eseguendo perfettamente il comando

 if(h > maxHum || t > maxTemp) {
     digitalWrite(fan, HIGH);
 } else {
    digitalWrite(fan, LOW); 
 }

:’(

Mi sembra che ti sia sfuggito di settare in OUTPUT il pin del relé.

PS: "if" è un'istruzione, non una funzione.

SukkoPera: Mi sembra che ti sia sfuggito di settare in OUTPUT il pin del relé.

Quoto!

Ecco cosa avevo dimenticato! Grazie mille ragazzi!!

Pari12: Ecco cosa avevo dimenticato! Grazie mille ragazzi!!

Ricorda pure la modifica di Sukko, if è un'istruzione e non una funzione ;)