Menu keypad lcd non funziona come sperato

Buongiorno a tutti,
innanzitutto ringrazio chi mi ha aiutato la scorsa volta, il programma funziona e sta facendo il suo dovere!

Vorrei implementare il circuito con dei pulsanti (3 o 4) e dei menu che mi permettano di settare i parametri di funzionamento dell’Arduino senza dover smontare tutto ogni volta.

L’lcd mentre è in standby dovrebbe mostrare le informazioni in tempo reale (temperatura e altro). Cliccando un tasto dovremmo accedere al menu dei parametri, in totale 5 voci. Per ciascun parametro ho dei valori già noti che vorrei poter impostare (vedi array fTemp, cStartup e cIdle sotto).

Cercando sul web trovavo menu realizzati con librerie già pronte, delle quali capisco ben poco.
Ho trovato QUESTO esempio molto interessante. Ho provato a modificarlo per il keypad lcd, però non sono riuscito a farlo funzionare.

Innanzitutto, riesco a fare tutto utilizzando soli 3 pulsanti?
Lo schema logico dell’esempio al link sopra può funzionare nel mio caso?

#include <LiquidCrystal.h>
#define BUTTON A0
#define BACKLIGHT 10
LiquidCrystal lcd(8,9,4,5,6,7);// inizializzazione display lcd

int val_up[]={120,160};
int val_down[]={300,350};
int val_sel[]={720,760};
int val_left[]={480,520};
int val_right[]={0,20};
int button=0;
int sets=0;
int selection=0;
int x=0;
float fermentationTemp=19;  //variabile di temperatura predefinita
unsigned long coldStartup=9000;  //variabile di tempo di accensione predefinita
unsigned long coldIdle=60000;  //variabile di tempo di standby predefinita
float fTemp[31]={0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23,24,25,26,27,28};  //array con valori di temperatura in gradi celsius
unsigned long cStartup[16]={40000,50000,60000,70000,80000,90000,100000,110000,120000,130000,140000,150000,180000,360000,720000,1440000};  //array con valori di tempo di accensione in millisecondi
unsigned long cIdle[16]={480000,540000,600000,660000,720000,780000,840000,900000,960000,1020000,1080000,1140000,1200000,1500000,1800000,2400000};  //array con valori di tempo di standby in millisecondi
unsigned long timer=0;  //timer per tempo di rimbalzo quando si preme un pulsante
unsigned long debounce=150;  //tempo di rimbalzo

void setup(){
  pinMode(BACKLIGHT,OUTPUT);
  pinMode(BUTTON,INPUT);
  digitalWrite(BACKLIGHT,HIGH);
  lcd.begin(16,2);
}

void loop(){
  button=analogRead(A0);
  if(val_down[0]<=button&&button<=val_down[1]&&millis()-timer>=debounce){
    sets++;
  }
  else if(val_up[0]<=button&&button<=val_up[1]&&millis()-timer>=debounce){
    sets--;
  }
  if(selection==0){
    while(x==0){
      x++;
    }
    lcd.setCursor(0,0);
    lcd.print("TEMPERATURE");
    lcd.setCursor(0,1);
    lcd.print(fTemp[sets]);
    button=analogRead(A0);
    if(sets<1){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(fTemp[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        fermentationTemp=fTemp[sets];
        selection=1;
      }
    }
    else if(sets<2){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(fTemp[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        fermentationTemp=fTemp[sets];
        selection=1;
      }
    }
    else if(sets<3){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(fTemp[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        fermentationTemp=fTemp[sets];
        selection=1;
      }
    }
    if(sets>=3||sets<=0){
      sets=0;
    }
  }
  else if(selection=1){
    for(int x=0;x<1;x++){
      lcd.clear();
      sets=0;
      selection=2;
    }
  }
  else if(selection==2){
    lcd.setCursor(0,0);
    lcd.print("COLD STARTUP");
    lcd.setCursor(0,1);
    lcd.print(cStartup[sets]);
    button=analogRead(A0);
    if(sets<1){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(cStartup[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        coldStartup=cStartup[sets];
        selection=3;
      }
    }
    else if(sets<2){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(cStartup[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        coldStartup=cStartup[sets];
        selection=3;
      }
    }
    else if(sets<3){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(cStartup[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        selection=3;
      }
    }
    if(sets>=3||sets<=0){
      sets=0;
    }
  }
  else if(selection=3){
    for(int x=0;x<1;x++){
      lcd.clear();
      sets=0;
      selection=4;

    }
  }
  else if(selection==4){
    lcd.setCursor(0,0);
    lcd.print("COLD IDLE");
    lcd.setCursor(0,1);
    lcd.print(cIdle[sets]);
    button=analogRead(A0);
    if(sets<1){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(cIdle[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        coldIdle=cIdle[sets];
        selection=5;
      }
    }
    else if(sets<2){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(cIdle[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        coldIdle=cIdle[sets];
        selection=5;
      }
    }
    else if(sets<3){
      lcd.setCursor(0,1);
      lcd.print(' ');
      lcd.setCursor(1,1);
      lcd.print(' ');
      lcd.setCursor(2,1);
      lcd.print(' ');
      lcd.setCursor(3,1);
      lcd.print(' ');
      lcd.setCursor(0,1); 
      lcd.print(cIdle[sets]);
      if(val_sel[0]<=button&&button<=val_sel[1]&&millis()-timer>=debounce){
        coldIdle=cIdle[sets];
        selection=5;
      }
    }
    if(sets>=3||sets<=0){
      sets=0;
    }
  }
  else if(selection=5){
    for(int x=0;x<1;x++){
      lcd.clear();
      sets=0;
    }
  }
  if(val_left[0]<=button&&button<=val_left[1]){
    sets=0;
    selection=0;
    x=0;
  }
}

I problemi che riscontro con il codice così sono:
-premendo select a display non viene scritto più nulla
-premendo up a qualsiasi valore della variabile “sets”, viene visualizzato 0.000, mentre down funziona