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();
}
}