Merci Jean Francois.
A vrai dire je patauge un peu avec la fonction millis() ![]()
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. ![]()