uscire da un do while quando voglio (ESPLORA)

raga volevo creare un menù dal quale posso accedere a diverse funzioni e tornare quando ne ho bisogno ma non riesco a ritornarci, ho provato a usare break ma mi interrompe l’operazione dopo una volta, allora ho provato a mettere un controllo dopo ogni operazione ma non funge lo stesso, vi presento l’intero codice che contiene il controllo (if (k==0) {t=1;} e il break,please aiutatemi :disappointed_relieved: :disappointed_relieved:

#include <Esplora.h>

void setup(){
  Mouse.begin();
}
  
void loop(){
  
  int r=0;
  
    do{
         int t=0;
         int k=Esplora.readJoystickSwitch();
         if (k==0) {t=1;};
         if(Esplora.readButton(SWITCH_1)==LOW){
           if (k==0) {t=1;};
           do{ 
            if (k==0) {t=1;};
            long double x = Esplora.readJoystickX();
            if (k==0) {t=1;};
            long double y = Esplora.readJoystickY();
            if (k==0) {t=1;};
              long double mx = map(x,1023,-1023,-10,10);
            if (k==0) {t=1;};
            long double my = map(y,1023,-1023,-10,10);
            if (k==0) {t=1;};
            Mouse.move((mx/4),(-my/4),0);
            if (k==0) {t=1;};
            Esplora.writeRGB(100,0,0);
            if (k==0) {t=1;};
            if (Esplora.readButton(SWITCH_DOWN)==LOW) {
              if (k==0) {t=1;};
              Mouse.press(MOUSE_LEFT);  
              if (k==0) {t=1;};
            }
            else if (Esplora.readButton(SWITCH_4)==LOW){
              if (k==0) {t=1;};
              Mouse.press(MOUSE_RIGHT);
              if (k==0) {t=1;};
            }
            else if (Esplora.readButton(SWITCH_3)==LOW){
              if (k==0) {t=1;};
              Mouse.press(MOUSE_MIDDLE);
              if (k==0) {t=1;}; 
            }
            else {
              Mouse.release(MOUSE_MIDDLE);
              if (k==0) {t=1;};
              Mouse.release(MOUSE_RIGHT);
              if (k==0) {t=1;};
              Mouse.release(MOUSE_LEFT);
              if (k==0) {t=1;};

            }
            break;
            if (k==0) {t=1;};
           }while(t<1);
         }
          
          if (k==0) {t=1;};
          if(Esplora.readButton(SWITCH_2)==LOW){
            if (k==0) {t=1;};
           do{
             if (k==0) {t=1;};
            int light = Esplora.readLightSensor();
            if (k==0) {t=1;};
            Serial.print("L'intensita' luminosa e': ");
            Serial.println(light);
            if (k==0) {t=1;};    
            int lightness=light/4;
            if (k==0) {t=1;};
            if (light>1000){
              if (k==0) {t=1;};
              Esplora.writeRGB(lightness,lightness,lightness);
              if (lightness>=200)  {
                if (k==0) {t=1;};
                int slider = Esplora.readSlider();
                int frequenza1=0;
                int frequenza2=0;
                int frequenza3;
                if(slider<=255){
                 if (k==0) {t=1;};
                 frequenza1=179;
                 frequenza2=233;
                 frequenza3=262;
                }
                else if(slider>255&&slider<=511) {
                 if (k==0) {t=1;};
                 frequenza1=440;
                 frequenza2=494;
                 frequenza3=523;
                }
                else if(slider>511&&slider<=767) {
                 if (k==0) {t=1;};
                 frequenza1=701;
                 frequenza2=755;
                 frequenza3=784;
                }
                else if(slider>767){
                 if (k==0) {t=1;};
                 frequenza1=962;
                 frequenza2=1016;
                 frequenza3=1045;
                }
                if (k==0) {t=1;};
                 Esplora.tone(frequenza1);
                if (k==0) {t=1;};
                delay(500);
                if (k==0) {t=1;};
                Esplora.noTone();
                if (k==0) {t=1;};
                delay(200);
                if (k==0) {t=1;};
                Esplora.tone(frequenza2);
                if (k==0) {t=1;};
                delay(500);
                if (k==0) {t=1;};
                Esplora.noTone();
                if (k==0) {t=1;};
                delay(200);
                if (k==0) {t=1;};
                Esplora.tone(frequenza2);
                if (k==0) {t=1;};
                delay(500);
                if (k==0) {t=1;};
                Esplora.noTone();
                if (k==0) {t=1;};
                delay(200);
                if (k==0) {t=1;};
                Esplora.tone(frequenza2);
                if (k==0) {t=1;};
                delay(500);
                if (k==0) {t=1;};
                Esplora.noTone();
                if (k==0) {t=1;};
                delay(200);
                if (k==0) {t=1;};
                Esplora.tone(frequenza3);
                if (k==0) {t=1;};
                delay(500);
                if (k==0) {t=1;};
                Esplora.noTone();
                if (k==0) {t=1;};
                delay(200);
                if (k==0) {t=1;};
               Esplora.writeRGB(0,0,0);
                if (k==0) {t=1;};
              }
            }
            else {
              if (k==0) {t=1;};
              delay(5000);
              if (k==0) {t=1;};
            }
            break;
            if (k==0) {t=1;};
           }while(t<1);
          }
          if (k==0) {t=1;};
          if(Esplora.readButton(SWITCH_3)==LOW){
            if (k==0) {t=1;};
           do{
             if (k==0) {t=1;};
            if (Esplora.readButton(SWITCH_DOWN) == LOW) {
              if (k==0) {t=1;};
              int slider = Esplora.readSlider();
              if (k==0) {t=1;};
              Esplora.tone(slider, 1000);
              if (k==0) {t=1;};
              Esplora.writeRGB(0,slider,0);
              if (k==0) {t=1;};
            }
            else if (Esplora. readButton(SWITCH_UP) == LOW) {
              if (k==0) {t=1;};
              int slider = Esplora.readSlider();
              if (k==0) {t=1;};
              Esplora.tone(slider, 1000);
              if (k==0) {t=1;};
              Esplora.writeRGB(slider,0,0);
              if (k==0) {t=1;};
            }
            else {
              Esplora.noTone();
              if (k==0) {t=1;};
            }
            break;
            if (k==0) {t=1;};
           }while(t<1);  
        }
          
          
          if (k==0) {t=1;};
          if(Esplora.readButton(SWITCH_4)==LOW){
            if (k==0) {t=1;};
           do{
            if (k==0) {t=1;};
            int a=0;
            int b=0;
            int c=0;
            int d=0;
            int e=0;
            if (k==0) {t=1;};
            while (e<2){
              if (k==0) {t=1;};
              while (d<2){
                if (k==0) {t=1;};
                if (a==0){
                  if (k==0) {t=1;};
                  for (a;a<240;a++){
                    if (k==0) {t=1;};
                    Esplora.writeRGB(a,b,c);
                    if (k==0) {t=1;};
                    delay(1);
                    if (k==0) {t=1;};
                  }
                  }
                else if (a==240){
                  if (k==0) {t=1;};
                  for (a;a>0;a--){
                    if (k==0) {t=1;};
                    Esplora.writeRGB(a,b,c);
                    if (k==0) {t=1;};
                    delay(1);
                    if (k==0) {t=1;};
                  }
                }
                d++;
              }
              
               
              /*c'erano altre operazioni simili*/

              while (d<14){
                if (k==0) {t=1;};
                if (c==0&&b==0&&a==0){
                  if (k==0) {t=1;};
                  while(c<240&&b<240&&a<240){
                    if (k==0) {t=1;};
                    c++;
                    b++;
                    a++;
                    if (k==0) {t=1;};
                    Esplora.writeRGB(a,b,c);
                    if (k==0) {t=1;};
                    delay(1);
                    if (k==0) {t++;};
                  }
                }
                else if (a==240&&c==240&&b==240){
                  if (k==0) {t=1;};
                  while(c>0&&b>0&&a>0){
                    if (k==0) {t=1;};
                    c--;
                    b--;
                    a--;
                    if (k==0) {t=1;};
                    Esplora.writeRGB(a,b,c);
                    if (k==0) {t=1;};
                    delay(1);
                    if (k==0) {t++;};
                  }
                }
                d++;
              }
               e++;
            }
            break;
            if (k==0) {t=1;};
           }while(t<1);  
        
          
          }
        }while(r<1);
}

Troppi do while nidificati.
Dovresti suddividere il codice in sottofunzioni più semplici.
E' troppo contorto e si perde il filo.

Poi scusa, puoi spiegare tutti questi blocchi di codice?

if (k==0) {t=1;};
                delay(500);
                if (k==0) {t=1;};
                Esplora.noTone();
                if (k==0) {t=1;};
                delay(200);
                if (k==0) {t=1;};

Fanne solo 1....
if (k==0) {
t=1;
delay(500);
Esplora.noTone();
delay(200);
}

@ricky, ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: http://forum.arduino.cc/index.php?topic=113640.0
e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0

break;

ma di solito per i menu si usa case non do while