Bonjour a tous
Je suis sur la réalisation d' un robot a 2 roues évitant les obstacles , avec capteurs IR , capteur ultra son , ...
J' utilise un ATmega328 et programme avec le soft Arduino ...
J 'ai des capteurs détectant la présence / absence du sol devant les roues .
Les capteurs en eux même fonctionnent bien ( sort env. 1V en présence du sol , et 4V dans le vide )
J ' ai connecté ses capteurs sur les entrées digital 2 et 3 , pour utiliser les interruptions INT0 , INT1
Puis dans le setup()Code:const int SOL_D = 2 ; // Capteur Sol Avant Droit sur entrée digitale 2 const int SOL_G = 3 ; // Capteur Sol Avant Gauche sur entrée digitale 3
Dans le programme principal , pour l' instant je ne fais que Avancer .Code:pinMode ( SOL_D , INPUT) ; // entree capteur presence sol a droite attachInterrupt ( 0 , Capteurs_Sol , RISING ) ; // valid. interruption INT0 pinMode ( SOL_G , INPUT) ; // entree capteur presence sol a gauche attachInterrupt ( 1 , Capteurs_Sol , RISING ) ; // valid. interruption INT1
Je voudrais que lorsque un des capteurs détecte le vide , le robot recule immediatement
pendant un certain temp ( encore a déterminer ) puis tourne sur place .
J'ai cru comprendre que les tempo ( delay() , millis() ... ) ne fonctionnent pas dans les interruptions
J' ai donc essayé une boucle For () comme ceci
Le programme entre bien dans la boucle d' interruption ( moteurs en arrière ) mais reste la indéfiniment .Code:void Capteurs_Sol() { Recule () ; for ( int i=0 ; i<=50 ; i++ ) { Recule () ; } }
Comment lui faire durer cette boucle ( marche arrière ) seulement un certain temp
avant de revenir au programme principal ?
Merci , bonne journée
-----