Deux tâches en même temps

Bonjour, je dois faire un parkassist pour mon projet de sciences de l’ingénieur, mais je rencontre un problème, je dois faire en même temps la détection d’obstacle avec des capteurs a ultrasons ET faire tourner le volant pour la manœuvre. Que faire ??? Voici la fonction en question, donc je prévoyais que quand Validation_OD = 1 , la détection d’obstacle dans la boucle while s’effectue, la manoeuvre s’effectue en même temps puis il repasse a 0 pour arrêter le tout. Mais tout ce qui va se passer c’est que la variable va repasser à 0 sans avoir pu lancer la détection d’obstacle n’est ce pas ? Si vous voyez d’autres erreurs, n’hésitez pas a le dire.

void volantdc()  {

    validation_VD = 1;

    while ( validation_VD == 1 ){
  
    digitalWrite(TRIGGER_PIN_D, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGGER_PIN_D, LOW);
  
    /* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
    unsigned long tpstimeout = millis(); // (initialiser temps)
    long measure = pulseIn(ECHO_PIN_D, HIGH, MEASURE_TIMEOUT);
    
    /* 3. Calcul la distance à partir du temps mesuré */
    float distance = measure / 2.0 * SOUND_SPEED / 1000.0;
  
  
    if (tpstimeout>MEASURE_TIMEOUT) {         
          validation_VD = 0;
          validation_OD = 1;
          digitalWrite(Moteurpin, HIGH); 
          delay(1000);
          digitalWrite(Moteurpin, LOW); 
          delay(1000);
          affichagetermine ();
          validation_OD = 0; 
    }

          while (validation_OD == 1){
            digitalWrite(TRIGGER_PIN_AV, HIGH);
            digitalWrite(TRIGGER_PIN_AR, HIGH);
            delayMicroseconds(10);
            digitalWrite(TRIGGER_PIN_AV, LOW);
            digitalWrite(TRIGGER_PIN_AR, LOW);
  
          
            
            long measure = pulseIn(ECHO_PIN_AV, HIGH, MEASURE_TIMEOUT);
            float distance = measure / 2.0 * SOUND_SPEED / 1000.0;
            

              
 if (distance<1.5 && distance>1) {
   
    distanceunpcinq();
  
  }
 if (distance<1 && distance>0.5) {
   
     distanceun();
     
  
}
 
 
 if (distance<0.5 && distance>0.25) {
   
    distancezeropcinq(); 
  
 }

 if (distance<0.5) {
  distancezeropvingtcinq();
  
 
 }


            
          }
          
          
        }
            
        
        long measure2 = pulseIn(ECHO_PIN_AR, HIGH, MEASURE_TIMEOUT);
        float distance2 = measure2 / 2.0 * SOUND_SPEED / 1000.0;
 if (distance2<1.5 && distance2>1) {
   
    distanceunpcinq();
   
  }
 if (distance2<1 && distance2>0.5) {
   
     distanceun();
     
  
}
 
 
 if (distance2<0.5 && distance2>0.25) {
   
    distancezeropcinq(); 
  
 }

 if (distance2<0.5) {
  distancezeropvingtcinq();
  
 
 }
        
      }

Ce que tu cherches à faire, si je comprends bien, c’est du multitasking. L’Arduino ne peut pas faire stricto sensu plusieurs tâches en même temps. Par contre, il peut alterner plusieurs tâches et le faire suffisamment vite pour que nous ayons l’impression qu’il les fait en même temps.
Tu peux chercher “Arduino multitasking” sur Internet, et tu trouveras des infos.
Par exemple : Adafruit multitasking