struttura switch case

Buona sera a tutti, sto provando ad utilizzare la funzione switch case. Ho utilizzato una serie di if come antirimbalzo e poi la struttura case per accendere dei led diversi in base allo stato. il problema è che appena passo dallo stato 0 allo stato 1 i led cominciano come a “vibrare”, cioè lampeggiano molto velocemente, e poi se mollo il pulsante si accende un led a caso. qualcuno riesce a trovare l’errore? grazie mille

int Mode = 0;
int buttonState;

// Avvio dell'applicazione
void setup()
{
 pinMode(LED1, OUTPUT);       // imposta il pin digitale come output
 pinMode(LED2, OUTPUT);
 pinMode(LED3, OUTPUT);
 pinMode(val2, INPUT);
 pinMode(val, INPUT);
 digitalWrite(BUTTON, HIGH);
}

// Avvio del loop
void loop()
{
 val = digitalRead(32);
 delay(10);
 val2 = digitalRead(32);

 if (val == val2)
 {
   if (val != buttonState)
   {
     if (val == LOW)
     {
       sw1 = 1;
     
     }
    else
   {
    sw1 = 0;
   } 
 }
 }

switch (Mode) {
case 0:

 digitalWrite(LED1, LOW);
 digitalWrite(LED2, LOW);
 digitalWrite(LED3, LOW);
 if (sw1 == 1) Mode = 1;

 break;
case 1:  // controlla se il pulsante è stato premuto una volt
 digitalWrite(LED1, HIGH);
 digitalWrite(LED2, LOW);
 digitalWrite(LED3, LOW);
 if (sw1 == 1) Mode = 2;
 
 break;
case 2:  // controlla se il pulsante è stato premuto due volte
 digitalWrite(LED1, LOW);
 digitalWrite(LED2, HIGH);
 digitalWrite(LED3, LOW);
 if (sw1 == 1) Mode = 3;
 
 break;
case 3:  // controlla se il pulsante è stato premuto tre volte
 digitalWrite(LED1, LOW);
 digitalWrite(LED2, LOW);
 digitalWrite(LED3, HIGH);
 if (sw1 == 1) Mode = 0;
 
 break;

}

buttonState = val;
}

sketch_may25b.ino (1.75 KB)

Dacci uno sketch che compila senza errori. Non ho voglia di correggerlo per poterlo provare.

switch (Mode) {
case 0:

  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  if (sw1 == 1) Mode = 1;

  break;
case 1:  // controlla se il pulsante è stato premuto una volt
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  if (sw1 == 1) Mode = 2;
 
  break;
case 2:  // controlla se il pulsante è stato premuto due volte
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, LOW);
  if (sw1 == 1) Mode = 3;
 
  break;
case 3:  // controlla se il pulsante è stato premuto tre volte
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, HIGH);
  if (sw1 == 1) Mode = 0;
 
  break;

Devi mettere sw1 a zero dopo che hai modificato Mode senó Ti fa tutta la fila dei case.

Ciao Uwe