uscire da un CASE senza appesantirlo

avrei bisogno si sapere se cè un modo meno articolato per uscire da questo CASE:
questo case è composto da due “sequenze” in cui viene inviato prima un codice rf per 20 secondi, una volta trascorsi invia un secondo codice per 10 secondi.
io voglio che se mando un altro dato tramite la seriale mi esca dal “CASE”, avevo provato col BREAK ma se mi trovo nel primo while mi blocca quello e passa al secondo while.
così mi funziona (mettendo il controllo del case sul while) ma ho paura che sia un ciclo troppo “lento”.
grazie

 case 17: //apertura totale/parziale ripostiglio
      //  Serial.println("inizio apertura parziale");
      iniziomov = millis();
      while ((millis() - iniziomov < (unsigned long)tempomov) && (comando == 17)) { //apertura totale cucina/camera
        mySwitch.send(524698, 24);
        if (Serialint.available()) { // Controllo se vi è qualche comando in arrivo dall'esp per bloccare il movimento
          comando = (Serialint.read() - 48); //Metto nella variabile comando quanto ricevuto dalla seriale
          delay (15);
        }
        Serial.println("apertura parziale 1");
      }
      delay (500);
      iniziomov = millis();
      while ((millis() - iniziomov < (unsigned long)tempomezzomov) && (comando == 17)) { //mezza apertura ripostiglio
        mySwitch.send(15250081, 24);
        if (Serialint.available()) { // Controllo se vi è qualche comando in arrivo dall'esp per bloccare il movimento
          comando = (Serialint.read() - 48); //Metto nella variabile comando quanto ricevuto dalla seriale
          delay (15);
        }
        Serial.println("apertura parziale 2");
      }
      comando = statoriposo;
      break;

Usa il break, ma poi devi per forza mettere qualche confronto anche nel while "esterno" io consiglio una variabile vera/falsa o 1/0 esempio esci=0; se vuoi spezzare cicli metti esci=1 ma poi nei vari cicli dovrai anche aggiungere nel test esci==0 esempio while ( (testiniziale) && esci==0) ... testiniziale è il test che hai già, aggiungi AND esci==0

P.S. scusa ho letto bene tutto il tuo msg. Si come hai fatto va bene, e non importa se c'e' un test in più. Non rallenta di sicuro per un piccolo test in più

nid69ita: Usa il break, ma poi devi per forza mettere qualche confronto anche nel while "esterno" io consiglio una variabile vera/falsa o 1/0 esempio esci=0; se vuoi spezzare cicli metti esci=1 ma poi nei vari cicli dovrai anche aggiungere nel test esci==0 esempio while ( (testiniziale) && esci==0) ... testiniziale è il test che hai già, aggiungi AND esci==0

P.S. scusa ho letto bene tutto il tuo msg. Si come hai fatto va bene, e non importa se c'e' un test in più. Non rallenta di sicuro per un piccolo test in più

perfetto grazie. edit: ho fatto un test inserendo due "serial.print (millis()-iniziomov)". uno prima di mySwitch.send e uno dopo per vedere quanto tempo ci mette. ho scoperto che tra prima e dopo "mySwitch" il tempo è praticamente nullo, ma tra un giro e l'altro ci mette ben 456 millisecondi! da cosè causato questo tempo? si può ridurre?

Secondo me quelle serial print apertura parziale fatte ad ogni giro saturano il buffer di trasmissione rendendo bloccanti le print stesse.

Claudio_FF: Secondo me quelle serial print apertura parziale fatte ad ogni giro saturano il buffer di trasmissione rendendo bloccanti le print stesse.

quelle serialprint le avevo escuse. ho tenuto solo un prima e una dopo del myswich, quindi nel seriale mi comparivano solo i 2 tempi