Vérifier des conditions simultanément

Bonjour,
je fais encore une fois appel au forum car je suis vraiment bloqué et n'arrive plus à avancer. J'ai déjà demander de l'aide, mais a ne fonctionne toujours pas. Voici mon problème :
J'ai un robot qui possède 6 capteurs infrarouges et 4 moteurs. Selon ce qu'il détecte, il doit avancer, reculer...
Par exemple, si il y'a un trou devant lui, il doit reculer pendant admettons 5 secondes. Le problème est qu'en utilisant un delay, si pendant ces 5 secondes en reculant il y a un trou derrière, il ne réagira pas car le delay bloque le programme et l'empêche de vérifier les capteurs. J'ai essayé d'utiliser la fonction millis, mais aucun résultat satisfaisant. Je fais donc appel à vous. Pour que cela soit plus compréhensible, voici une partie du code :
Déclaration des varaibles et constantes

int sens1AVD=13;  //sens 1 avant droit (en avant)
int sens2AVD=12;  //sens 2 avant droit (en arriere)

int sens1AVG=11;  //sens 1 avant gauche (en avant)
int sens2AVG=10;  //sens 2 avant gauche (en arriere)

int sens1ARD=7;  //sens 1 arriere droit (en avant) 
int sens2ARD=6;  //sens 2 arriere droit (en arriere)

int sens1ARG=9;  //sens 1 arriere gauche (en avant) 
int sens2ARG=8;  //sens 2 arriere gauche (en arriere)

const unsigned long periode1 = 3000;
const unsigned long periode2 = 3000;
unsigned long chrono1;
unsigned long chrono2;

int infra0=A0;  //capteur infrarouge 0
int infra1=A1;  //capteur infrarouge 1
int infra2=A2;  //capteur infrarouge 2
int infra3=A3;  //capteur infrarouge 3
int infra4=A4;  //capteur infrarouge 4
int infra5=A5;  //capteur infrarouge 5

les chronos dans le setup()

  chrono1 = millis();
  chrono2 = millis();

fonctions avancer et reculer

 void avancer(){
  if (millis() - chrono1 < periode1){
  chrono1 = millis();
  
  analogWrite(sens1AVD,ValVitesse);  //roue avant droite tourne en avant (valVitesse est analogique,    
pas                     important)
  digitalWrite(sens2AVD,LOW);

  analogWrite(sens1AVG,ValVitesse);  //roue avant gauche tourne en avant 
  digitalWrite(sens2AVG,LOW);

  analogWrite(sens1ARD,ValVitesse);  //roue arriere droite tourne en avant 
  digitalWrite(sens2ARD,LOW);

  analogWrite(sens1ARG,ValVitesse);  //roue arriere gauche tourne en avant 
  digitalWrite(sens2ARG,LOW);
  }
}
 

//pour faire reculer 
void reculer(){
    if (millis() - chrono2 < periode2){
  chrono2 = millis();
  Serial.println(chrono2);
   digitalWrite(sens1AVD,LOW);  //roue avant droite tourne en arriere 
  analogWrite(sens2AVD,ValVitesse);

  digitalWrite(sens1AVG,LOW);  //roue avant gauche tourne en arriere 
  analogWrite(sens2AVG,ValVitesse);

  digitalWrite(sens1ARD,LOW);  //roue arriere droite tourne en arriere 
  analogWrite(sens2ARD,ValVitesse);

  digitalWrite(sens1ARG,LOW);  //roue arriere gauche tourne en arriere 
  analogWrite(sens2ARG,ValVitesse);
    }
 
}

Enfin la boucle principale :

void loop(){
  avancer();
while(analogRead(infra0)>600&&analogRead(infra1)>600&&analogRead(infra2)>600&&analogRead(infra3)<600&&analogRead(infra4)<600&&analogRead(infra5)<600){
  reculer();
}
}

Le 600 pour les capteurs représentent une valeur arbitraire
Je pense que pas grand chose ne va dans ce programme, c'est pourquoi je demande votre aide.
Je ne suis pas sur que la fonction millis soit au bon endroit, et je ne sais pas quoi mettre dans la loop.
Merci.

Par exemple, si il y'a un trou devant lui, il doit reculer pendant admettons 5 secondes

et après les 5 secondes, il doit faire quoi ? et s'il y a un autre trou, il doit faire quoi ?

essayez de décrire l'algo avec des notions de "séquences de commandes" et "invalidation de séquences"

par exemple

séquence: aller tout droit

contraintes:

  • si trou sur la route: invalider séquence. Nouvelle séquence reculer 3 secondes + tourner 90°droite + aller tout droit
  • si mur sur la route: invalider séquence. Nouvelle séquence reculer 2 secondes + tourner 90°gauche + aller tout droit

votre code principal doit dérouler la séquence et tester les contraintes

Très bien alors en fait le robot été penser de la manière suivante :
Toujours avancer
Si trou devant reculer pendant 5 secondes puis tourner à droite
Si trou à gauche tourner à droite
Si trou à droite tourner à gauche
Si trou derrière avancer 5 secondes puis tourner à gauche

Si il y a un autre trou arrêter la séquence en cours et prendre l’an nouvelle séquence adaptée