problema con laser tag

Hola, estamos intentando hacer un sistema laser tag con el arduino. despues de ir resolviendo problemas que nos surgian, nos hemos topado con otro que no se si tiene solucion.
el tema es que queremos mostrar por pantalla cuando el arma recargue un mensaje tipo" recargando" y debajo de éste, que aparezcan unos graficos a modo de barra de carga. Esto, con la funcion "delay" lo conseguimos pero lo que pasa es que si usamos delay, el ardu no hace nada mas y si te disparan pos no leeria el dicho disparo. He probado con la funcion "millis" pero tampoco va, alguna idea?

long  tiempant=0;
int retardo=350;
void cambioClip(){
	if(digitalRead(recarga) == LOW && ammo > 0 && clips != 30){
          
           
            
         

        lcd.clear();
        lcd.print("   RECARGANDO");
        lcd.setCursor(0, 1);
    // escribo en pantalla el nuevo caracter
    if(millis() > tiempant + retardo){
    lcd.write(1);
    tiempant=millis();
    
    }
   
    if(millis() > tiempant + retardo){
    lcd.write(1);
    tiempant=millis();
    
    }
  
    if(tiempo > tiempant + retardo){
    lcd.write(1);
    tiempant=tiempo;
    
    }
     if(tiempo > tiempant + retardo){
    lcd.write(1);
    tiempant=tiempo;
    
    }

Hola buenas,

Yo lo que haría sería leer "cuando te disparan" como una interrupción, así conseguirías que pase lo que pase se ejecute la lógica necesaria cuando te disparan, y podrías controlar el gráfico con delay(). Aquí puedes ver la docu de interrupciones: attachInterrupt() - Arduino Reference

No sé si es lo que buscas, espero que te sirva de ayuda.