Sprung in Funktionen und zurück klappt nicht

Ok ich habe den Code jetzt zerlegt, so das man ihn besser lesen kann

Die Buttonabfrage und die Encoderabfrage funktionieren gut,
es geht nur im diese Menüstruktur, ob man das so macht oder nicht.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,8,7); //Create LCD object (RS,E,DB4,DB5,DB6,DB7)

#include <rotary.h> //github.com/brianlow/Rotary
Rotary r=Rotary(3,2);

const int RotSW=4; //Pushbutton
int butState=0;
unsigned char cnt=0;
int subMenu;
int rotTurn=0;

void setup()
 {pinMode(RotSW,INPUT_PULLUP);
  lcd.begin(20,4);
  lcd.clear();
  PCICR|=(1<<PCIE2);
  PCMSK2|=(1<<PCINT18)|(1<<PCINT19);
 }

void loop()
 {lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Your in the Loop");

  butState=getButton(); //Read state of pushbutton
  while(butState==3)
   {
    Main_Menu();
   } //Button long press -> Menü aufrufen

  delay(100);
 }


void Main_Menu()
 {lcd.setCursor(0,0);
  lcd.print("Set Exit            ");
  if(cnt==1)
   {
    rotTurn++;
    cnt=0;
    if(rotTurn>1)
     {
      rotTurn=0;
     }
   } //Encoder turn right
  if(cnt==2)
   {rotTurn--;
    cnt=0;
    if(rotTurn<0)
     {
      rotTurn=1;
     }
   } //Encoder turn left
  butState=getButton(); //Read state of pushbutton
  switch(rotTurn)
   {case 0: //In Sub_Menu() springen
       lcd.setCursor(0,1);
       lcd.print("---                 ");
       if(butState==1  &&  subMenu!=1)
        {
         subMenu=1;
         Sub_Menu();
        }
       break;
    case 1: //Menü() verlassen und in die Loop() zurückspringen
       lcd.setCursor(0,1);
       lcd.print("    ----            ");
       if(butState==1)
        {
         butState=0;
         loop();
        } //Springt nicht zurück in die Loop()
       break;
    default:
       break;
   }
  butState=3;
 }


void Sub_Menu()
 {lcd.setCursor(0,0);
  lcd.print("Set                 ");
  lcd.setCursor(0,1);
  lcd.print("                    ");
  if(cnt==1)
   {
    rotTurn++;
    cnt=0;
   } //Encoder turn right
  if(cnt==2)
   {
    rotTurn--;
    cnt=0;
   } //Encoder turn left
  if(rotTurn<0)
   {
    rotTurn=255;
   }
  if(rotTurn>255)
   {
    rotTurn=0;
   }
  lcd.setCursor(0,1);
  lcd.print("RotTurn (0-255): ");
  lcd.print(rotTurn);

  butState=getButton(); //Read state of pushbutton
  if(butState==1)
   {
    butState=0;
    Main_Menu();
   } //Sprint nicht zurück in die Main_Menu()

  while(subMenu==1)
   {
    delay(100);
    Sub_Menu();
   } //Verläßt das Sub_Menu() nach paar sekunden!
 }



ISR(PCINT2_vect) //Interrupt service routine for encoder
 {unsigned char result=r.process();
  if(result==DIR_CW)
   {
    cnt=1;
   }
  else if(result==DIR_CCW)
   {
    cnt=2;
   }
 }

byte getButton() //Read Pushbutton with debounce
 {butState=0;
  unsigned long dnTime, upTime;
  if(!digitalRead(RotSW))
   {delay(20);
    if(!digitalRead(RotSW))
     {
      dnTime=millis();
      while(!digitalRead(RotSW));
     }
    upTime=(millis()-dnTime);
    if(upTime>=1000)     return butState=3; //Long press
    else if(upTime>=400) return butState=2; //Medium press
    else                 return butState=1; //Short click
   }
  return butState=0;
 }