Il "delay" mi agisce sull'intero programma come isolarlo ?

Salve a tutti sto realizzando un progetto di una casa domotica per la tesina ed ho quasi finito sto unendo i programmi in un unico programma ed ora ho un problema.
Il delay(1000) che dovrebbe far aggiornare la temperatura sul display mi agisce su tutto quanto ,facendomi andare ad intermittenza le luci i relè e tutto il resto sballandomi il programma. Come posso far in modo che quel delay(1000) mi agisca solo sull’aggiornamento del diplay ? Allego lo sketch :

#include <Stepper.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <LiquidCrystal.h>
#define pin_temp A0
float temp = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int rosso = 26 ; // calorifero
int blu = 27 ; // condizionatore
int pos = 1; // stato stepper
int receiver = 8; // pin 1 del rivevitore IR collegato ad Arduino al pin 8
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
Stepper myStepper(2048,28,30,29,31);
char stato;
void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
  myStepper.setSpeed(13);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Temperatura:");
  analogReference(INTERNAL1V1);
  
  pinMode(rosso, OUTPUT); // calorifero
  pinMode(blu, OUTPUT); // condizionatore
  pinMode(22, OUTPUT); // box
  pinMode(23, OUTPUT); // camera
  pinMode(24, OUTPUT); // cucina
  pinMode(25, OUTPUT); // salotto  
  pinMode (46,OUTPUT); // luce cortile
  pinMode (47,OUTPUT); // luce cortile
  pinMode (48,OUTPUT); // luce cortile
  pinMode (49,OUTPUT); // luce cortile
  pinMode (50,OUTPUT); // luce cortile
  pinMode (51,OUTPUT); // luce cortile
  pinMode (52,OUTPUT); // luce cortile
  pinMode (53,OUTPUT); // luce cortile
  stato==LOW;
  
}
void loop()
{
  /*Calcolo la temperatura
  =============================================*/
  temp = 0;
  for (int i = 0; i < 5; i++) { //Esegue l'istruzione successiva 5 volte
    temp += (analogRead(pin_temp) / 9.31); //Calcola la temperatura e la somma alla variabile 'temp'
  }
 { temp /= 5; //Calcola la media matematica dei  valori di temperatura
  /*===========================================*/

  /*Visualizzo la temperatura sul display LCD
  =============================================*/
  lcd.setCursor(0, 1); //Sposto il cursore sulla prima colonna e sulla seconda riga
  lcd.print(temp); //Stampo sul display LCD la temperatura
  lcd.print(" "); //Aggiungo spazio tra i gradi e  " ° "
  lcd.write(B11011111); //Simbolo grado celsius " ° "
  lcd.print("C"); //Stampo uno spazio e il carattere 'C' sul display
  delay(1000); //Ritardo di un secondo
  /*===========================================*/

  }
 }
  
  if(temp>23) {
   digitalWrite(rosso,LOW);
   }
 
 
  if(temp<22) {
   
   digitalWrite(rosso,HIGH);

 }
 
 if (temp<15) {
  
 
  digitalWrite(blu,LOW);
 
 }
 if (temp>17) {
   
  digitalWrite(blu,HIGH);
  
 
}  
{
   if (irrecv.decode(&results)) // have we received an IR signal?
  {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume();// receive the next value
  }
 
  if ( results.value == 0xFFA857 && pos == 1 ){ //tasto -  sul telecomando
  
   pos = 0;
   myStepper.step(2800); // apertura box 
  digitalWrite(22,HIGH);
}

else if ( results.value == 0xFF906F && pos == 0){ //tasto +  sul telecomando
  
  pos = 1; 
  myStepper.step(-2800); // chiusura box
  digitalWrite(22,LOW);
  
  }
  else if ( results.value == 0xFF30CF){ //tasto 1 sul telecomando
  stato=!stato;  // inverte stato con if in linea del C
  digitalWrite(23, stato); // luce camera
  
   delay(500);
}
else   if ( results.value == 0xFF18E7){ //tasto 2 sul telecomando
  stato=!stato;  // inverte stato con if in linea del C
  digitalWrite(25, stato); // luce sala
   delay(500);
}
else   if ( results.value == 0xFF7A85){ //tasto 3 sul telecomando
  stato=!stato;  // inverte stato con if in linea del C
  digitalWrite(22, stato); // luce box
   delay(500);
}
else   if ( results.value == 0xFF10EF){ //tasto 4 sul telecomando
  stato=!stato;  // inverte stato con if in linea del C
  digitalWrite(24, stato); // luce cucina
   delay(500);
}

 else if ( results.value == 0xFF9867){ //tasto ripeti sul telecomando
  stato=!stato;  // inverte stato con if in linea del C
  digitalWrite(26, stato); // accensione calorifero da telecomando
  delay(500);
 }
 
 
   else if ( results.value == 0xFFB04F){ //tasto u/sd sul telecomando
  stato=!stato;  // inverte stato con if in linea del C
  digitalWrite(27, stato); // azionamento condizionatore
   delay(500);

  }

int sensore=analogRead (A1);// fotoresistenza

if (sensore<200) { // se la luminosità scende al di sotto del valore si accendono i led 
  
  digitalWrite(46,HIGH);
  digitalWrite(47,HIGH);
  digitalWrite(48,HIGH);
  digitalWrite(49,HIGH);
  digitalWrite(50,HIGH);
  digitalWrite(51,HIGH);
  digitalWrite(52,HIGH);
  digitalWrite(53,HIGH);
  }
  else if (sensore>200) { // se la luminosità sale al di sopra del valore si spengono i led
    
  digitalWrite(46,LOW);
  digitalWrite(47,LOW);
  digitalWrite(48,LOW);
  digitalWrite(49,LOW);
  digitalWrite(50,LOW);
  digitalWrite(51,LOW);
  digitalWrite(52,LOW);
  digitalWrite(53,LOW);
  
  }
  
 
}

Ciao, il delay è bloccante devi per forza modificare il programma utilizzando la funzione millis() millis() - Arduino Reference

fabpolli:
Ciao, il delay è bloccante devi per forza modificare il programma utilizzando la funzione millis() http://www.arduino.cc/en/Reference/Millis

Ho provato con la funzione millis ma non riesco come diventerebbe il codice sopra postato ?

Devi a studiarti (... e non solo leggere :wink:) come si usa la millis() prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che alla fine capirai come modificare la struttura del tuo programma.

Guglielmo

gpb01:
Devi a studiarti (... e non solo leggere :wink:) come si usa la millis() prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che alla fine capirai come modificare la struttura del tuo programma.

Guglielmo

Risolto con il 2 link del signor Guglielmo grazie mille a entrambi

signor Guglielmo, sei grande! :wink: :wink: :wink:
Ciao Uwe

uwefed:
signor Guglielmo, sei grande! :wink: :wink: :wink:

:grin: :grin: :grin: :grin:

Guglielmo