Bonjour à tous,
j'aurais besoin de rédiger un programme non bloquant. Je m'explique. En fait, je travail actuellement sur un robot qui contient 4 moteurs et 6 capteurs infrarouges. Si par exemple, les trois capteurs infrarouges du devant détectent du vide, alors le robot recule. Si c'est ceux de droite alors il tourne à gauche ect. Le problème, c'est que je me sers de delay. Et donc si mon robot détecte du vide à l'avant, il recule pendant 5 secondes par exemple. Le problème est que du coup, les autres capteurs ne sont plus vérifiés, et si pendant ces 5 secondes, il y a du vide à l'arrière par exemple il va tomber. J'ai essayé avec des boucles while sans succès. Voici un extrait du programme simplifié pour que vous puissiez facilement comprendre le problème :
while(analogRead(infra0)<valA){ //ValA est la variable pour les capteurs infrarouges, infra0 est
un des capteur infrarouge
arret(5000); // Fonction arrêt (le paramètre est un delay)
droite(5000); // Fonction droite (le paramètre est un delay)
}
while(analogRead(infra1)<valA){
reculer(5000);
tourner(5000);
}
while(analogRead(infra2)<valA){
arret(5000);
gauche(5000);
}
Et voici la fonction avancer() pour que vous voyez sa structure :
void avancer(int DELAY){
digitalWrite(sens1AVD,HIGH); //roue avant droite tourne en avant
digitalWrite(sens2AVD,LOW);
digitalWrite(sens1AVG,HIGH); //roue avant gauche tourne en avant
digitalWrite(sens2AVG,LOW);
digitalWrite(sens1ARD,HIGH); //roue arriere droite tourne en avant
digitalWrite(sens2ARD,LOW);
digitalWrite(sens1ARG,HIGH); //roue arriere gauche tourne en avant
digitalWrite(sens2ARG,LOW);
delay(DELAY);
}
Voilà pour le porgramme, j'espère avoir été clair et vous remercie d'avance pour votre aide.