Problema con il codice

Ciao a tutti… :wink:
La mia idea sarebbe questa:

         /*variabili*/

int statoled=0;
int statopulsante=0;
int conta=0;
int controllo=0;

/*Fine delle variabili*/


void setup()
{

  pinMode(13,OUTPUT);//al piedino 13 si collega led 
  pinMode(3,OUTPUT);//al piedino 3 si collega led
  pinMode(7,INPUT);//serve per lo stato del pulsante
  pinMode(5,OUTPUT);//serve per stabilire se ci sono errori
  
}//fine del setup



void loop()
{

  statopulsante=digitalRead(7);//lettura stato del pulsante
  
    if((statopulsante==HIGH)and(statoled=0))
      {
        
         
        
         for(int i=0;i>=5;i++) //inizia ciclo for
             {
               digitalWrite(13,HIGH);
               digitalWrite(3,LOW);
               delay(1000);
               digitalWrite(3,HIGH);
               digitalWrite(13,LOW);
               delay(1000);
               
               if((statopulsante==HIGH)and(i<=4))
               {
                 digitalWrite(5,HIGH);
                 statoled=1;
                 break;
               }
                 
             }//FINE DEL CICLO FOR
             statoled=1;
             delay(1000);
       }//FINE DELLA PRIMA CONDIZIONE
       
       
             
                                                     /*Secondo caso*/      
         else if((statopulsante==HIGH)and(statoled=1))
                 {
                   
                   
                   do
                   {
                     
                     digitalWrite(13,HIGH);
                     digitalWrite(3,LOW);
                     delay(500);
                     digitalWrite(13,LOW);
                     digitalWrite(3,HIGH);
                     delay(500);
                     digitalWrite(13,HIGH);
                     digitalWrite(3,HIGH);
                     delay(500);
                     digitalWrite(13,LOW);
                     digitalWrite(3,LOW);
                     delay(500);
                     conta++;  
                     
                      if((statopulsante==HIGH)and(conta<=7))
                         {
                           digitalWrite(5,HIGH);
                           delay(1000);
                           statoled=2;
                           break;
                         }//fine del controllo 
   
                     
                   } while(conta==8);//fine del ciclo do-while
                   
                    
                   
            delay(1000);
            statoled=2;
          }//fine della seconda condizione
          
          
           else if((statopulsante==HIGH)and(statoled=2))
            {
                digitalWrite(3,LOW);
                digitalWrite(5,LOW);
                digitalWrite(13,LOW);
                statoled=0;
                delay(1000);
            }//fine della condizione di arresto del sistema

}//fine del programma

In parole umane io vorrei che premo il tasto ed esegue il ciclo for e se durante il ciclo premo nuovamente il tasto si illumina un terzo led(di colore rosso,ma questo non è importante) e deve così uscire dal ciclo e predisporre la variabile “statoled” in modo tale che se ripremo il tasto si avvii il secondo ciclo.
La stessa cosa deve succedere anche nel terzo con la sola differenza che ho usato nel primo caso il ciclo for mentre nel secondo il ciclo do-while.

La scheda però si comporta diversamente e cioè si accende subito il led 13,poi il led 3,ancora dopo il 13 e il 3 insieme e poi da solo il led 5 che sarebbe quello che dovrebbe segnalare un errore.
Cosa fare? Cosa ho sbagliato? :disappointed_relieved:

Grazie a tutti :grinning:

Correggi = con == nei punti in cui serve.

la mia idea sarebbe che metti il codice senza HTML Ciao Uwe

uwefed: la mia idea sarebbe che metti il codice senza HTML Ciao Uwe

Mentre scrivevi l'ha già ripulito.

Inoltre inutile controllare più volte statopulsante. Se è High lo è in tutto il sottocodice. Inoltre l'else si attiva solo se è LOW quindi non serve controllare nuovamente se è HIGH. Togli gli else e lascia gli IF.

/*variabili*/
int statoled = 0;
int statopulsante = 0;
int conta = 0;
int controllo = 0;
/*Fine delle variabili*/

void setup()
{
  pinMode(13, OUTPUT); //al piedino 13 si collega led
  pinMode(3, OUTPUT); //al piedino 3 si collega led
  pinMode(7, INPUT); //serve per lo stato del pulsante
  pinMode(5, OUTPUT); //serve per stabilire se ci sono errori
}//fine del setup

void loop()
{
  statopulsante = digitalRead(7); //lettura stato del pulsante

  if (statopulsante == HIGH) {
    switch (statoled) {
      case 0:
        for (int i = 0; i >= 5; i++) //inizia ciclo for
        {
          digitalWrite(13, HIGH);
          digitalWrite(3, LOW);
          delay(1000);
          digitalWrite(3, HIGH);
          digitalWrite(13, LOW);
          delay(1000);
          if ((statopulsante == HIGH) and (i <= 4))
          {
            digitalWrite(5, HIGH);
            statoled = 1;
            break;
          }
        }//FINE DEL CICLO FOR

        statoled = 1;
        delay(1000);
        break;
      //FINE DELLA PRIMA CONDIZIONE

      /*Secondo caso*/
      case 1:
        do
        {
          digitalWrite(13, HIGH);
          digitalWrite(3, LOW);
          delay(500);
          digitalWrite(13, LOW);
          digitalWrite(3, HIGH);
          delay(500);
          digitalWrite(13, HIGH);
          digitalWrite(3, HIGH);
          delay(500);
          digitalWrite(13, LOW);
          digitalWrite(3, LOW);
          delay(500);
          conta++;
        } while (conta == 8); //fine del ciclo do-while

        if ((statopulsante == HIGH) and (conta <= 7))
        {
          digitalWrite(5, HIGH);
          delay(1000);
          statoled = 3;
        }//fine del controllo

        delay(1000);
        statoled = 2;
        break;
      //fine della seconda condizione

      case 2:
        digitalWrite(3, LOW);
        digitalWrite(5, LOW);
        digitalWrite(13, LOW);
        statoled = 0;
        delay(1000);
        break;
      //fine della condizione di arresto del sistema

      default:
        break;
    }
  }
}//fine del programma

Variabili con valori < di 255 andrebbero dichiarate per correttezza con BYTE (0-255) o BOOLEAN (0-1)