Menu display LCD pulsanti two-way functionality

Salve a tutti, sono alle prese con un progetto che mi sta veramente esaurendo… Premetto che sono nuovo nella programmazione di Arduino. Devo realizzare un sistema di ricarica per veicoli elettrici, in particolare devo realizzare l’algoritmo per gestire la ricarica di 4 prese. Ho un display LCD 16x2 dove sulla prima riga è indicata ora e data (che non credo sarà un problema) e sulla seconda ho le etichette delle 4 prese: P1 P2 P3 P4. Sotto ad ognuna di queste etichette ho 4 altrettanti pulsanti che se premuti una volta sola scorrono le possibili azioni che si possono fare sulla relativa presa (OFF, ricarica = 8 ore, mantenimento = 2 ore al giorno, o ricarica con priorità) e se premuti per più di 5 secondi selezionano quella voce. I pulsanti sono tutti collegati alle resistenze tra di loro e mandano il segnale sul solo pin A0, quindi per sapere che pulsante è stato premuto basta fare un analogRead(). E fin lì ci sono. Il problema è che non so come risolvere il fatto dello scorrimento del menu, perché in teoria sarebbero 4 menu differenti che possono essere visitati contemporaneamente. In più non so come fare il controllo del click singolo o dell’hold dei pulsanti. Ho trovato diversa roba su internet ma si parla solo di digitalRead e di valori TRUE o FALSE. Per l’analog read come posso fare? Tutto il codice che ho trovato non è commentato, magari mi chiedo se esiste una libreria o un progetto simile che fanno questo tipo di lavoro (non penso di essere l’unico a dover implementare questo tipo di progetto, ce ne saranno di simili con il two-way button functionality!). Vi incollo il codice fatto finora, anche se alquanto inutile e moolto provvisorio…

#include <LiquidCrystal.h> 

#define P1 0     //pulsante P1   
#define P2 1     //pulsante P2
#define P3 2     //pulsante P3
#define P4 3     //pulsante P4
#define CL 4     //pulsante di modifica dell'orologio

// Pin usati nello schermo LCD
LiquidCrystal lcd(3, 2, 13, 12, 11, 10); 

int valorePin = 0;  //valorePin è la variabile dove metto il valore di A0
int premuto= LOW;
unsigned long contatore;
unsigned long contaimpulsi;

void setup() {
 contatore=millis();
 contaimpulsi=0;
}


void loop() {
  int pulsantePremuto=seleziona();          //capisce di che switch si tratta
  //Serial.println(valorePin);
  Serial.println(pulsantePremuto);
}

int seleziona()                    
{
  valorePin =analogRead(0);    //legge il valore su A0
  Serial.println(valorePin);
/*  if (valorePin ==0){
  int premuto= LOW;
  }
else{
  premuto= HIGH;
} */ 
if (contatore!=millis()) { //è tempo di un controllo
    contatore=millis();
  if (valorePin > 1000 && contaimpulsi<5) {
    contaimpulsi++;
  }
  else if (valorePin > 1000 && contaimpulsi==5){
  
  
  }
    Serial.println(valorePin);
    return P1;
  }
  if (valorePin < 790) {
  Serial.println(valorePin);
  return P2;
  }
  if (valorePin < 555) {
  Serial.println(valorePin);
  return P3;
  }
  if (valorePin < 380) {
  Serial.println(valorePin);
  return P4;
  }
  if (valorePin < 195) {
  Serial.println(valorePin);
  return CL;
  }
}