Due condizioni (if) per una ventola

Ciao a tutti!
Ho un Arduino Uno, e sono un neofita nel programmarlo, il problema che vi pongo è questo:
Sto progettando una piccola serra, dove i valori massimi di umidità e temperatura, sono "tenuti a bada" da una singola ventola... Giusto per compicare un po' le cose la ventola non deve entrare in conflitto con il riscaldatore! Cioè se il riscaldatore è acceso, indipendentemente dai dati che rileva la sonda, la ventola potrà partire solo quando questo si sarà spento!
Ho buttato giù due righe di codice:

//se la temperatura/umidità supera... accendi ventola (pin10)

    if (t>25 or h>55){  
    digitalWrite(ventola,HIGH);
    }
    else if (t<24 or h<50){
      digitalWrite(ventola,LOW);
      }
  
 // se la temperatura scende sotto... accendi riscaldatori (pin9)

   if (t<23) {
    digitalWrite(riscaldatori,HIGH);
    }
    else if (t>24){
      digitalWrite(riscaldatori,LOW);
      }

Ho omesso la parte di creazione delle variabili "riscaldatori" e "ventola".
Come dico alla ventola "non accenderti se il riscaldatore risulta acceso" ? Ho provato con:

void loop() {
  
  delay(500);

 // sensore umidità e temperatura
  int t = dht.readTemperature();
  int h = dht.readHumidity();

  // layout display
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temperatura " +String(t) + char(0xDF)+ "C"); // prima riga lcd
  lcd.setCursor(0,1);
  lcd.print("Umidita'    "+ String(h)+ "%"); //seconda riga lcd
  
  //se la temperatura e umidità supera... accendi ventola (pin10)
    if (t>25 or h>55){  
    digitalWrite(ventola,HIGH);
    }
    else if (t<24 or h<50){
      digitalWrite(ventola,LOW);
      }
      if(riscaldatori == HIGH){
        digitalWrite(ventola,LOW);
        }
  
 // se la temperatura scende sotto... accendi riscaldatori (pin9)
   if (t<23) {
    digitalWrite(riscaldatori,HIGH);
    }
    else if (t>24){
      digitalWrite(riscaldatori,LOW);
      }

Putroppo però l'effeto non è quello voluto.. Arduino controlla i valori, permettendo a ventola e riscaldatori di lavorare in contemporanea...
Non so, avete consigli da darmi? Temo che lavorando in contemporanea entrino in conflitto, con il risultato di non avere mai il valore richiesto di temperatura/umidità, in quando la ventola raffredda il riscaldatore che cerca di scaldare, bloccandosi in una reazione a catena infinita :stuck_out_tongue_closed_eyes: !!

Grazie in anticipo,

Emanuele.

Metti l'if della ventola dentro l'if dei riscaldatori.
Tipo:
se riscaldatore = spento allora valuto cosa fare con la ventola

O in alternativa passare per delle variabili intermedie:

if      (t>25 or h>55) { vent = 1; }
else if (t<24 or h<50) { vent = 0; }

if      (t<23) { risc = 1; }
else if (t>24) { risc = 0; }

digitalWrite(riscaldatori, risc);
digitalWrite(ventola, vent and !risc);

Non entro nel merito della correttezza logica delle condizioni di attivazione/disattivazione ventola tramite or, che mi lasciano qualche dubbio.

Claudio, dubbio che esista or in C/C++ ? Non esistono, ci sono solo nel core Arduino (mi pare una define).

No, dubbio che il secondo or debba essere un and.

nid69ita:
Claudio, dubbio che esista or in C/C++ ? Non esistono, ci sono solo nel core Arduino (mi pare una define).

Non esattamente, anzi ... leggi QUI ... :wink:

Guglielmo

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