Dubbio su sintassi programma per uscire da una funzione

Salve a tutti, quello che vorrei fare è: una volta che entro nella funzione

 void Avviocontrollo() {
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print( "Menu " );
  lcd.setCursor(0,1);
  lcd.print( "Avvio controllo" );   
  delay( SETMODETIME );
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print( "Avvio controllo" );
  lcd.setCursor(0, 1);
  lcd.print("valori settaggio");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp.:");
  lcd.setCursor(10,0);
  lcd.print(DHT11.temperature,DEC);
  lcd.setCursor(0,1);
  lcd.print("Umid.:");
  lcd.setCursor(10,1);
  lcd.print(DHT11.humidity,DEC);
  delay(5000);
  
  int chk;
  chk=DHT11.read(DHT11PIN);
  if(DHT11.temperature >= TmpSett + 1){
   for(a=0;a<150;a++){
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
     }
     delay(2000);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Temp.:");
     lcd.setCursor(10,0);
     lcd.print(DHT11.temperature, DEC);
     lcd.setCursor(0,1);
     lcd.print("Umid.:");
     lcd.setCursor(10,1);
     lcd.print(DHT11.humidity, DEC );
       if(DHT11.temperature >= TmpSett + 2){
         for(a=0;a<150;a++){
          digitalWrite(motorPin1, HIGH);
          digitalWrite(motorPin2, LOW);
          digitalWrite(motorPin3, LOW);
          digitalWrite(motorPin4, LOW);
          delay(delayTime);
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, HIGH);
          digitalWrite(motorPin3, LOW);
          digitalWrite(motorPin4, LOW);
          delay(delayTime);
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, LOW);
          digitalWrite(motorPin3, HIGH);
          digitalWrite(motorPin4, LOW);
          delay(delayTime);
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, LOW);
          digitalWrite(motorPin3, LOW);
          digitalWrite(motorPin4, HIGH);
          delay(delayTime);
           }
          }
          delay(2000);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Temp.:");
        lcd.setCursor(10,0);
        lcd.print(DHT11.temperature, DEC);
        lcd.setCursor(0,1);
        lcd.print("Umid.:");
        lcd.setCursor(10,1);
        lcd.print(DHT11.humidity, DEC );
        if(DHT11.temperature >= TmpSett + 3){
          while(DHT11.temperature > 28){
            pinMode(50,OUTPUT);
            digitalWrite(50,LOW);
           }    
        }
       }
  if(DHT11.temperature < 26){
   for(c=0;c<150;c++){
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
      }
     delay(2000);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Temp.:");
     lcd.setCursor(10,0);
     lcd.print(DHT11.temperature, DEC);
     lcd.setCursor(0,1);
     lcd.print("Umid.:");
     lcd.setCursor(10,1);
     lcd.print(DHT11.humidity, DEC ); 
      if(DHT11.temperature < 26){
       for(c=0;c<150;c++){
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, HIGH);
        delay(delayTime);
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, HIGH);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
          }  
        }
        delay(2000);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Temp.:");
        lcd.setCursor(10,0);
        lcd.print(DHT11.temperature, DEC);
        lcd.setCursor(0,1);
        lcd.print("Umid.:");
        lcd.setCursor(10,1);
        lcd.print(DHT11.humidity, DEC );
        if(DHT11.temperature < 24){
          while(DHT11.temperature < 24){
            pinMode(50,OUTPUT);
            digitalWrite(50,LOW);
           }
         }      
 }
    delay(2000);

}

alla pressione di uno dei pulsanti della mia display shield uscire da questa funzione ed entrare in un altra funzione. Non so come fare, grazie

Forse mi sono spiegato male.

void Avviocontrollo() {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print( "Menu " );
  lcd.setCursor(0,1);
  lcd.print( "Avvio controllo" );   
  delay( SETMODETIME );
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print( "Avvio controllo" );
  lcd.setCursor(0, 1);
  lcd.print("valori settaggio");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp.:");
  lcd.setCursor(10,0);
  lcd.print(DHT11.temperature,DEC);
  lcd.setCursor(0,1);
  lcd.print("Umid.:");
  lcd.setCursor(10,1);
  lcd.print(DHT11.humidity,DEC);
  delay(5000);
  if(buttonPress=0) {
  int chk;
  chk=DHT11.read(DHT11PIN);
  if(DHT11.temperature >= TmpSett + 1){
   for(a=0;a<150;a++){
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
     }
     delay(2000);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Temp.:");
     lcd.setCursor(10,0);
     lcd.print(DHT11.temperature, DEC);
     lcd.setCursor(0,1);
     lcd.print("Umid.:");
     lcd.setCursor(10,1);
     lcd.print(DHT11.humidity, DEC );
       if(DHT11.temperature >= TmpSett + 2){
         for(a=0;a<150;a++){
          digitalWrite(motorPin1, HIGH);
          digitalWrite(motorPin2, LOW);
          digitalWrite(motorPin3, LOW);
          digitalWrite(motorPin4, LOW);
          delay(delayTime);
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, HIGH);
          digitalWrite(motorPin3, LOW);
          digitalWrite(motorPin4, LOW);
          delay(delayTime);
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, LOW);
          digitalWrite(motorPin3, HIGH);
          digitalWrite(motorPin4, LOW);
          delay(delayTime);
          digitalWrite(motorPin1, LOW);
          digitalWrite(motorPin2, LOW);
          digitalWrite(motorPin3, LOW);
          digitalWrite(motorPin4, HIGH);
          delay(delayTime);
           }
          }
          delay(2000);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Temp.:");
        lcd.setCursor(10,0);
        lcd.print(DHT11.temperature, DEC);
        lcd.setCursor(0,1);
        lcd.print("Umid.:");
        lcd.setCursor(10,1);
        lcd.print(DHT11.humidity, DEC );
        if(DHT11.temperature >= TmpSett + 3){
          while(DHT11.temperature > 28){
            pinMode(50,OUTPUT);
            digitalWrite(50,LOW);
           }    
        }
       }
  if(DHT11.temperature < 26){
   for(c=0;c<150;c++){
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
      }
     delay(2000);
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Temp.:");
     lcd.setCursor(10,0);
     lcd.print(DHT11.temperature, DEC);
     lcd.setCursor(0,1);
     lcd.print("Umid.:");
     lcd.setCursor(10,1);
     lcd.print(DHT11.humidity, DEC ); 
      if(DHT11.temperature < 26){
       for(c=0;c<150;c++){
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, HIGH);
        delay(delayTime);
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, HIGH);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, LOW);
        digitalWrite(motorPin3, LOW);
        digitalWrite(motorPin4, LOW);
        delay(delayTime);
          }  
        }
        delay(2000);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Temp.:");
        lcd.setCursor(10,0);
        lcd.print(DHT11.temperature, DEC);
        lcd.setCursor(0,1);
        lcd.print("Umid.:");
        lcd.setCursor(10,1);
        lcd.print(DHT11.humidity, DEC );
        if(DHT11.temperature < 24){
          while(DHT11.temperature < 24){
            pinMode(50,OUTPUT);
            digitalWrite(50,LOW);
           }
         }      
 }
    delay(2000);



}








}

quello che vorrei fare è: alla pressione di uno dei pulsanti della mia display shield uscire da questo void ed entrare in un altro void del mio programma. Come posso fare? Grazie

Da una funzione si esce con il return, per entrare in un altra funzione basta chiamarla con il nome ...

Comunque consiglierei di prendere un testo di C e studiare la sintassi ... :wink:

Puoi cominciare con QUESTO e puoi scaricarti QUESTO libro (... tranquillo, è un sito legale, purché per esclusivo uso PERSONALE).

Guglielmo

Non si puó usire ed entrare in un altra funzione.
Si puó uscire da una funzione oppure chiamare un altra funzione.

Ti consiglio di cambiare la logica del sketch.
Nel Tuo Sketch non c'é nessuna lettura di un pulsante.
Usando tanti delay() e cicli for blocchi l'esecuzione dello Sketch e puoi comunque non puoi leggere di continuo la pressione di un pulsante.

Devi strutturare il sketch con millis() in modo che non hai blocchi di esecuzione.

Ciao Uwe

quello che vorrei fare è: alla pressione di uno dei pulsanti della mia display shield uscire da questo void ed entrare in un altro void del mio programma. Come posso fare? Grazie

La funzione delay() si dice essere bloccante e questo crea grandi problemi di reattività.
Cosa significa "bloccante"? Il forum è pieno e anche internet.
Di base quando diciamo "non ho nulla da fare" significa che si è liberi, questo vale per noi umani, mentre il micro è impegnato a fare nulla, che vuol dire comunque essere impegnati.
Il delay() impegna il micro a fare nulla per tot millesimi di secondo, essendo quindi impegnato comunque, l'esecuzione del codice accusa perdite di reattività.

Per ovviare si usa la funzione millis(), che però necessità di una logica inversa al delay. In sostanza con il delay fermi il codice per n secondi, con millis esegui codice su condizione, la quale è simile a:
Salvo il valore del contatore (se ho appena salvato non devo ripetere il salvataggio ad ogni loop) in saveTimer
if (millis() > (saveTimer + intervallo) )
// Il tempo "intervallo" è passato da quando ho salvato il valore del contatore
else
// eseguo codice

In modo diretto non è possibile prenotare l'esecuzione di una funzione B prima di uscire da A, tramite puntatori a funzione è possibile uscire da una funzione B, tornando al chiamante A la quale contiene codice che chiama una funzione prenotata prima di uscire dalla funzione B.

Ciao.