Probleme delay et capteur ultrasons

Merci Jean Francois.
A vrai dire je patauge un peu avec la fonction millis() :roll_eyes:
J'ai pensé gerer le capteur ultrasons plutot que le reste avec la fonction millis en utilisant ce petit programme :

Mais rien n'y fait...Et puis comme je ne comprend pas trés bien le programme j'ai du mal a l'adapter à mes besoins.
Je suis au passage passé à un capteur 4 fils (aucun intéret si ce n'est que d'utiliser une entrée en plus...)
Pour l'instant,j'en suis là:

//Declaration des bibliotheques
#include <Servo.h>


// Declaration des  pins moteurs
const int SENS_MOT_1=7;    // sortie broche 7-->M1  sens moteur 1
const int VIT_MOT_1=6;    // sortie broche 6-->E1 PWM vitesse moteur 1
const int SENS_MOT_2=4;    // sortie broche 4-->M2 sens moteur 2
const int VIT_MOT_2=5;    // sortie broche 5-->E2 PWM vitesse moteur 2

//Declaration broche capteur ultrasons
const int TrigPin = 10; //Broche D10 emission du signal ultrasons
const int EchoPin =11; //Broche D11 reception du signal ultrasons
//Declaration servomoteurs
Servo servoultrasons;
//Declaration des variables
int pos = 0;   //variable de position servo ultrasons


void setup() 
{ 
  Serial.begin(9600);
      
//Declaration des connecteurs servomoteurs
servoultrasons.attach (9);
      
// Declaration des  pins moteurs en sorties 
pinMode (SENS_MOT_1,OUTPUT); // Broche sensMoteur1 configurée en sortie
pinMode (VIT_MOT_1,OUTPUT); // Broche vitesseMoteur1 configurée en sortie
pinMode (SENS_MOT_2,OUTPUT); // // Broche sensMoteur2 configurée en sortie
pinMode (VIT_MOT_2,OUTPUT); // Broche vitesseMoteur2 configurée en sortie


}
//Attention sorties 4,5,6,7 reservées aux moteurs!

void loop() {
 

 long impulsionsignal, cm; //variable de durée du signal ultrasons et conversion en cm

 //La broche 7 est utilisée comme emetteur puis recepteur du signal ultrasons
 //Phase emission
  pinMode(TrigPin, OUTPUT);//Broche 10 en sortie pour envoi signal ultrasons
  digitalWrite(TrigPin, LOW);//Broche 10 niveau bas
  delayMicroseconds(5);
  digitalWrite(TrigPin, HIGH);//Broche 10 niveau haut/emission signal
  delayMicroseconds(5);
  digitalWrite(TrigPin, LOW);//Broche 10 niveau bas
//Phase reception
  pinMode(EchoPin, INPUT);//Broche 11 en entrée pour reception signal ultrasons
  impulsionsignal = pulseIn(EchoPin, HIGH);//Reception signal quand Broche 11 niveau haut
   
//Conversion signal/cm
  cm = microsecondsToCentimeters(impulsionsignal);
  Serial.print(cm);
  Serial.println("cm");
  
  delay(100);


  
 //Gestion des moteurs droit et gauche
          //moteur 1
          if (cm<30 ) {    // si distance < 30cm
          digitalWrite(SENS_MOT_1, LOW);    // Marche arriere moteur 1 et 2
          digitalWrite(SENS_MOT_2, LOW);
          analogWrite(VIT_MOT_1,90);    // impulsion PWM vitesse moteur 1 et 2
          analogWrite(VIT_MOT_2,90);
            
          }
          if (cm>=40 && cm<=50 ){     // si distance comprise entre 40 et 50 cm
          digitalWrite(SENS_MOT_2,LOW);//Marche arriére moteur 2
          analogWrite(VIT_MOT_1,0);   // broche PWM au niveau bas = pas d'impulsion PWM
          analogWrite(VIT_MOT_2,127); //Vitesse moteur 2
          }
           if (cm>50) {    // si distance > 50cm
          digitalWrite(SENS_MOT_1, HIGH);   // Marche avant  moteur 1 et 2
          digitalWrite(SENS_MOT_2, HIGH);     
          analogWrite(VIT_MOT_1,160);    // impulsion PWM vitesse moteur 1 et 2
          analogWrite(VIT_MOT_2,160); 
          }
          //Partie gestion servomoteur sonar ultrasons (Impossible pour probléme de delay)
/* for(pos = 50; pos < 130; pos +=1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    servoultrasons.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 130; pos>=50; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    servoultrasons.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } */
          
          }


long microsecondsToCentimeters(long microseconds)//Variable de conversion signal/cm
{
  /*La vitesse du son est de 340m/s ou 29 microsecondes par centimetres.
  Le signal va et vient et il convient de diviser le resultat par 2 pour obtenir la distance réelle*/
  return microseconds / 29 / 2;
}

J'ajoute que je souhaite utiliser une commande vocale via easyVR pour commander mon robot.
J'ai donc le programme sous la main(easyVR uniquement) mais je ne peux compiler l'ensemble (easyVR+capteur ultrasons) sans rencontrer de gros problémes les delay().
Bref,je suis en train de m'arracher les cheveux...Help!!
Si quelqu'un a un petit exemple a me donner en partant du programme plu haut et en ajoutant des delay() aux commandes moteur(par exemple) je veux bien. :grin: