Richiesta aiuto principiante

Ciao a tutti, come da soggetto sono un principiante alle prime esperienze in programmazione.
Ho bisogno di un aiuto per capire come mai questo sketch non va. Ho unito due sketch che presi singolarmente vanno, quando eseguo lo sketch nel monitor seriale vedo la temperatura rilevata dal sensore e nel caso essa sia inferiore a 23 gradi la scritta FanOff. Se scaldo il sensore quando la temperatura supera i 23 gradi vedo la scritta FanOn ma il relè non scatta.
Cortesemente mi dite dove sbaglio?
Grazie

<>

//NJarpa
//Arduino&Lbview with 2 DS18

#include <OneWire.h>
#include <DallasTemperature.h>
#define RELAY1 7 //pin del relè
 
// Data to Arduino pin 2
#define ONE_WIRE_BUS 2
 

OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
 
void setup(void)
{
  Serial.begin(9600);

  // Start up the library
  sensors.begin();
}
 
 
void loop(void)
{

  sensors.requestTemperatures(); // Send the command to get temperatures
 String sensor1 = String(sensors.getTempCByIndex(0),DEC);
 String sensor2 = String(sensors.getTempCByIndex(1),DEC);
String temp1 = String("A" + sensor1);
// String temp2 = String("B" + sensor2);
 
  Serial.println(temp1); 
  
  // Serial.println(temp2);

  if (sensors.getTempCByIndex(0)<23){
  digitalWrite(RELAY1,0); // Turns Relay1 off
        Serial.println("Fan OFF");
  }        
     
       else {
       digitalWrite(RELAY1,1);          // Turns Relay1 On
        Serial.println("Fan ON"); 

  }
   
  
  delay(3000);

 
}

<>

per la tua tecnologica vecchiaia ( :smiley: )ti consiglio di aggiungere
pinMode(RELAY1, OUTPUT);
nel setup

poi, anche se funziona lo stesso, sarebbe più corretto mettere LOW (che corrisponde a 0) e HIGH (che corrisponde a 1) nelle digitalWrite :wink:

Grazie mille @Patrick_M appena riesco provo e poi ci risentiamo.
:wink:

Perfetto! funziona a dovere.
Avrei altre due cose da chiedere, 1. Quando apro la finestra del monitor seriale il relè si chiude per un frazione di secondo, avete idea del perché? 2. É un problema se il codice comanda la messa ad HIGH quando il pin si trova già in HIGH? il dubbio mi è sorto perché pensavo di azionare un motore stepper al raggiungimento di una certa temperatura. Il motore quindi non deve ruotare ad ogni ciclo di codice che rilievi un temperatura superiore alla soglia impostata. Pensavo di integrare una variabile che vari il suo valore ad ogni azionamento del motore e mettere una condizione nel if che salti l'azionamento del motore nel caso questa variabile abbia già valore uguale al movimento che dovrebbe fare il motore.
Quindi se il sensore rileva una temperatura oltre i 23 gradi il motore esegue una rotazione e imposta la variabile "Pippo" a 1. Nel ciclo successivo se la temperatura è ancora oltre i 23 il motore non si muove in quanto la variabile è già a 1, stessa cosa per la temperatura sotto i 23.
La logica è corretta?

Grazie mille.

  1. Quando avvii il monitor seriale arduino si resetta "il codice parte da capo"

  2. Non c'è nessuno problema ad inviare lo stesso stato ad un pin, cioè se il pin è HIGH O LOW, non esiste
    problema a fare una digitalWrite() con lo stesso stato

  3. Quello che vuoi fare si chiama variabile flag, una variabile che assume due valori, per chiarirti le idee
    puoi vedere esempi con variabile flag

:slight_smile:

Grazie torn_24,
prima di mettermi a cercare tutorial sulla variabile flag, avrei bisogno di sapere se il mio ragionamento (sulla parte dei motori step ) è corretta, in quanto non ho le basi per capirlo da solo.

Grazie

ilarioQ:
Quindi se il sensore rileva una temperatura oltre i 23 gradi il motore esegue una rotazione e imposta la variabile "Pippo" a 1. Nel ciclo successivo se la temperatura è ancora oltre i 23 il motore non si muove in quanto la variabile è già a 1, stessa cosa per la temperatura sotto i 23.
La logica è corretta?

Grazie mille.

la logica comunque è corretta

Benissimo, grazie a tutti.