Accensione di più led con un singolo bottone cambiando il tempo

ciao a tutti, è da un paio di giorni che mi sto sbizzarrendo con il mio Arduino Leonardo e mi sono imbattuto in un problema che non riesco a risolvere.
Voglio creare un piccolo giochino nel quale ho 4 pulsanti ognuno dei quali collegato ad un led.
Con il primo pulsante in pratica decido il tempo di accensione di uno degli altri tre led.
Intanto che un led è acceso per il tempo che gli ho dato ne accendo un altro impostato la durata dell'accensione sempre con il primo.
In un primo momento l'ho risolto con la funzione delay() però leggendo e provando ho visto che non si possono accendere o eseguire altre funzione intanto che questa è attiva.
In sintesi voglio per esempio impostare che il secondo led rimanga acceso per 10 secondi, il terzo di 20 e il quarto di 30, cambiando ogni volta la loro durata attraverso il primo pulsante.
Scusate se non ho specificato la mia domanda ma volevo chiedere perchè nel secondo metodo cioè quando uso il millis() i led non si accendono oppure se cambio le condizioni all'interno dell' if() i led rimangono accesi e non si spengono più.
Scusate per la dimenticanza ma sono nuovo.

1° metodo con delay().

#define LED1 8 
#define LED2 9
#define LED3 10
#define LED4 11
#define BUTTON1 2 
#define BUTTON2 3
#define BUTTON3 4
#define BUTTON0 0               
int statoled1 = 0;
int statoled2 = 0;
int statoled3 = 0;
int statoled4 = 0;
int cont=0;
void setup() {  
  pinMode(LED1, OUTPUT); 
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(BUTTON0, INPUT); 
  pinMode(BUTTON1, INPUT); 
  pinMode(BUTTON2, INPUT);
  pinMode(BUTTON3, INPUT);
  digitalWrite( LED1, statoled1 );
  digitalWrite( LED2, statoled2 );
  digitalWrite( LED3, statoled3 ); 
  digitalWrite( LED4, statoled4 ); 
}  
  
void loop() {  
  while(digitalRead(BUTTON1) == 0 && digitalRead(BUTTON2) == 0 && digitalRead(BUTTON3) == 0){
      if(digitalRead(BUTTON0) >0){
      if ( statoled4 == LOW  ){
      //cont=cont+5000; 
      statoled4 = HIGH;
      digitalWrite( LED4, statoled4 );
      delay(500);
      }      
      statoled4 = LOW;
      digitalWrite( LED4, statoled4 );
      cont+=5000;
      if(cont >= 20000){
      cont=20000;
      }
  }
 }
   if ( digitalRead(BUTTON1) > 0 ){
    if ( statoled1 == LOW  ){ 
    statoled1 = HIGH;
    digitalWrite( LED1, statoled1 );
    delay(cont);
    }                     
    statoled1 = LOW;
    digitalWrite( LED1, statoled1 );
  }
  if ( digitalRead(BUTTON2) > 0 ){
    if ( statoled2 == LOW  ){ 
    statoled2 = HIGH;
    digitalWrite( LED2, statoled2 );
    delay(cont);
    }                     
    statoled2 = LOW;
    digitalWrite( LED2, statoled2 ); 
  }
  if ( digitalRead(BUTTON3) > 0 ){
    if ( statoled3 == LOW  ){ 
    statoled3 = HIGH;
    digitalWrite( LED3, statoled3 );
    delay(cont);
    }                     
    statoled3 = LOW;
    digitalWrite( LED3, statoled3 );
    }
    cont=0;
}

il problema sorge usando il millis().

#define LED1 8 
#define LED2 9
#define LED3 10
#define LED4 11
#define BUTTON1 1 
#define BUTTON2 2
#define BUTTON3 3
#define BUTTON0 0
int statoled1=0;
int statoled2=0;
int statoled3=0;
int statoled4=0;
int cont=0;
int cont1=0;
int cont2=0;
int cont3=0;
int var=0;
unsigned long time=0;
unsigned long lampeggio_time=0;
unsigned long lampeggio_time2=0;
unsigned long lampeggio_time3=0;
void setup() {  
  time=millis();
  lampeggio_time=millis();
  pinMode(LED1, OUTPUT); 
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(BUTTON0, INPUT); 
  pinMode(BUTTON1, INPUT); 
  pinMode(BUTTON2, INPUT);
  pinMode(BUTTON3, INPUT);
  digitalWrite( LED1, statoled1 );
  digitalWrite( LED2, statoled2 );
  digitalWrite( LED3, statoled3 ); 
  digitalWrite( LED4, statoled4 ); 
}  
void loop() {
  time=millis();
  while(digitalRead(BUTTON1) == 0 ){
      if(digitalRead(BUTTON0) >0){
      if ( statoled4 == LOW  ){
      statoled4 = HIGH;
      digitalWrite( LED4, statoled4 );
      delay(200);
      }      
      statoled4 = LOW;
      digitalWrite( LED4, statoled4 );
      cont+=5000;
      if(cont > 20000){
      cont=20000;
      }
      cont=cont1;
      cont1=cont2;
      cont2=cont3;
  }
 }

if ( digitalRead(BUTTON1) > 0){
   if(time > lampeggio_time){
    statoled2=HIGH; 
    digitalWrite( LED1,statoled2 );
    } 
    if(time >lampeggio_time+cont1){
    statoled2=LOW;    
    digitalWrite( LED1, statoled2 );
    lampeggio_time=millis();
     }
  }
  
 if ( digitalRead(BUTTON1) > 0){
   if(time > lampeggio_time2){ 
    statoled3=HIGH;
    digitalWrite( LED2, statoled3 );
    } 
    if(time >lampeggio_time+cont2){
    statoled3=LOW;    
    digitalWrite( LED2, statoled3 );
    lampeggio_time2=millis();
     }
  }
  
 if ( digitalRead(BUTTON1) > 0){
   if(time > lampeggio_time3){ 
    statoled4=HIGH;
    digitalWrite( LED3, statoled4 );
    } 
    if(time >lampeggio_time+cont3){
    statoled4=LOW;    
    digitalWrite( LED3, statoled4 );
    lampeggio_time3=millis();
     }
  }
  cont=0;
  
}

Quando si è nuovi in un forum, prima si legge il regolamento poi, come richiesto dallo stesso, ci si presenta, ed infine si pubblica una domanda rispettandone le regole, ad esempio includendo il codice con gli appositi tag (vedi modifica al tuo post).