Test de reflejos

Hola, estoy intentando hacer un juego de reflejos de cinco leds (cada led tiene un boton asignado) que se encienden aleatoriamente durante 30 segundos.
La parte del encendido aleatorio (y los botones asignados) y la cuenta regresiva funciona correctamente por separado pero no consigo que funcione a la vez. No me importa que cuando llegue a cero siga funcionando (de momento), ya investigaré como pararlo pero me he atascado con hacerlo funcionar a la vez. ¿Me podéis ayudar? Gracias.

#include <LiquidCrystal.h>
#define T1000 995
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
int myLedsPins[] = {A3, A2, 2, 3, 4};
int myButtonsPins[] = {A0, A1, 5, 6, 13};
int ledinicial;
int ledactual;
int posicion;
int exito = 0;
int asegundos    = 0;      
int segundostotal= 30;      
unsigned long time = 0;

void setup() {
lcd.begin(16, 2);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(13, INPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);  
}

void loop() {
lcd.clear();

while (segundostotal > 0)
{
              
if (millis()-time > T1000) {segundostotal--; time = millis();}
asegundos = segundostotal ;        
lcd.setCursor(0,1);
lcd.print("Time:");        
lcd.setCursor(6,1);
if (asegundos < 10) lcd.print("0");  
lcd.print(asegundos);                
lcd.print(" segundos:");
}
posicion = random(5);  lcd.setCursor(0,0); lcd.print("RESULTADO"); lcd.setCursor(13,0); 
if (exito < 10) lcd.print("00");
if (exito >= 10 && exito < 100) lcd.print("0");
lcd.print(exito,DEC);
 
ledinicial = myLedsPins[posicion];

if (ledactual != ledinicial)
  {digitalWrite(ledinicial, HIGH); while (digitalRead(myButtonsPins[posicion])==0){}
    exito++;
    digitalWrite(ledinicial, LOW);
    ledactual = ledinicial;}
}

¿Alguna idea? No soy capaz de continuar