HELP! - LCD scroll menu issue

Hello,

I am having trouble scrolling menu after going into a sub menu. The code works fine and the menu also scrolls when the buttons are pressed. But once i go to sub menu (like case 'A' or Case 'B'), and press * to get back to the home page the scrolling stops. All the functions work; I can still go to sub menu but cannot scroll down or up.

I would highly appreciate if you guys can help me out on this issue.

Regards,

#include <LiquidCrystal.h>
#include <Keypad.h>

int value=0;
int Cement_Weight = 0;
int Sand_Weight = 0;
int Water_Weight = 0;
char selection;

int page_counter=1 ;    
int up = 52;              
int down = 53;                        

boolean current_up = LOW;          
boolean last_up=LOW;            
boolean last_down = LOW;
boolean current_down = LOW;

const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] =
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {14,15,16,17}; //row pinouts of the keypad (L1, L2, L3, L4)
byte colPins[COLS] = {18,19,20,21}; //column pinouts of the keypad (R1, R2, R3)

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


LiquidCrystal lcd1(2,3,4,5,6,7);
LiquidCrystal lcd2(2,9,4,5,6,7);

void setup()
{
  Serial.begin(9600);
  lcd1.begin(20,4);  
  lcd2.begin(20,4);  
  lcd1.clear();
  lcd2.clear();

  Live_Weight_Display();  
  keypad.addEventListener(keypadEvent);
}
  
boolean debounce(boolean last, int pin)
 {
  boolean current = digitalRead(pin);
  if (last != current)
  {
   delay(5);
   current = digitalRead(pin);
  }
  return current;
 }


void loop()
{
  char key = keypad.getKey();
  Scroll(); 
  
}

void Scroll()
{
  
 
  current_up = debounce(last_up, up);         
  current_down = debounce(last_down, down);

  
    
//Page Up
  if (last_up== LOW && current_up == HIGH)
   { 
    lcd1.clear();                     //When page is changed, lcd clear to print new page   
    if(page_counter <3)
    {              //Page counter never higher than 3(total of pages)
    page_counter= page_counter +1;   //Page up
    }
    else
    {
     page_counter= 1;                //return to page 1
    }
   }
  last_up = current_up;

//Page Down
   if (last_down== LOW && current_down == HIGH)
    {
     lcd1.clear();                     //When page is changed, lcd clear to print new page    
     if(page_counter >1)
     {              //Page counter never lower than 1 (total of pages)
      page_counter= page_counter -1;   //Page down
     }
     else
     {
     page_counter= 3;              //return to page 3
     }
    }
  last_down = current_down;

  switch (page_counter) 
  {
   case 1:
   {     
    menu();
   }
    break;

   case 2: 
   { //Design of page 3
     lcd1.setCursor(5,0);
     lcd1.print("This is");
     lcd1.setCursor(4,1);
     lcd1.print("Page 3");
     
   }
    break;

   case 3: 
   {   //Design of page 2 
     lcd1.setCursor(1,0);
     lcd1.print("You are now on");
     lcd1.setCursor(4,1);
     lcd1.print("Page 2");
     
    }
    break;
  }
  
}

void Live_Weight_Display()
{
  lcd2.clear();
  lcd2.print("  Weight  Settings");
  lcd2.setCursor(0,1);
  lcd2.print("Cement  Sand  Water");
  lcd2.setCursor(0,2);
  lcd2.print(Cement_Weight);
  lcd2.print(" kg");
  lcd2.setCursor(8,2);
  lcd2.print(Sand_Weight);
  lcd2.print(" kg");
  lcd2.setCursor(14,2);
  lcd2.print(Water_Weight);
  lcd2.print(" kg");
} 

void menu()
{
 lcd1.setCursor(0,0);
 lcd1.print("Menu: ");
 lcd1.setCursor(0,1);
 lcd1.print("For Cement Press A");
 lcd1.setCursor(0,2);
 lcd1.print("For Sand   Press B");
 lcd1.setCursor(0,3);
 lcd1.print("For Water  Press C");
}

void keypadEvent(KeypadEvent key)
{
 switch (key)
 {
  case 'A':
      lcd1.clear();
      lcd1.print("Enter Cement Weight");
      lcd1.setCursor(0,1);
      lcd1.print("& Then Press #");
      lcd1.setCursor(5,2);
      lcd1.print("kg");
      Cement_Weight = getTheNumber();
      Live_Weight_Display(); 
      break;

  case 'B':
      lcd1.clear();
      lcd1.print("Enter Sand Weight");
      lcd1.setCursor(0,1);
      lcd1.print("& Then Press #");
      lcd1.setCursor(5,2);
      lcd1.print("kg");
      Sand_Weight = getTheNumber();
      Serial.print (Sand_Weight);
      Live_Weight_Display(); 
      break;

  case 'C':
      lcd1.clear();
      lcd1.print("Enter Water Weight");
      lcd1.setCursor(0,1);
      lcd1.print("& Then Press #");
      lcd1.setCursor(5,2);
      lcd1.print("kg");
      Water_Weight = getTheNumber();  
      Live_Weight_Display();
      break;
    
  case 'D':
      lcd1.clear();
      lcd1.print("Cement:");
      lcd1.setCursor(7,0);
      lcd1.print(Cement_Weight);
      lcd1.print(" kg");
      lcd1.setCursor(0,1);
      lcd1.print("Sand  :");
      lcd1.setCursor(7,1);
      lcd1.print(Sand_Weight);
      lcd1.print(" kg");
      lcd1.setCursor(0,2);
      lcd1.print("Water :");
      lcd1.setCursor(7,2);
      lcd1.print(Water_Weight);
      lcd1.print(" kg");
      lcd1.setCursor(0,3);
      lcd1.print("Hold # to reset");    
      break;

   case '*':
      lcd1.clear();
      page_counter= 1;
      loop();
      break;
 }
 switch (keypad.getState())
 {
  case HOLD:
      if (key == '#') 
      {
          Cement_Weight = 0;
          Sand_Weight = 0;
          Water_Weight = 0;
          lcd1.clear();
          lcd1.print("Cement:");
          lcd1.setCursor(7,0);
          lcd1.print(Cement_Weight);
          lcd1.print(" kg");
          lcd1.setCursor(0,1);
          lcd1.print("Sand  :");
          lcd1.setCursor(7,1);
          lcd1.print(Sand_Weight);
          lcd1.print(" kg");
          lcd1.setCursor(0,2);
          lcd1.print("Water :");
          lcd1.setCursor(7,2);
          lcd1.print(Water_Weight);
          lcd1.print(" kg");
          lcd1.setCursor(0,3);
          lcd1.print("Hold # to reset");
          Live_Weight_Display();          
       }
          break;
 }
}

int getTheNumber()
{
    
    char buffer[4];

    // Input up to 3 numbers until we find a * or #
    int i=0;
    while (1)
    {
        char key = keypad.getKey();

        // If it's a number AND we have space left, add to our string
        if ('0' <= key && key <= '9' && i < 3)
        {
            buffer[i] = key;
            i++;    
            Serial.print(key);
            lcd1.setCursor(i,2);
            lcd1.print(key);
            
        }
        // If it's a * or #, end
        else if ('#' == key && i > 0)
        {
            // Null terminate
            buffer[i] = 0;
            int value = atoi(buffer);  // Convert to an integer
            i = 0;
            return value;
            break;
        }    
    }
}