J'ai une petite question ...
je fais des tests sur une plateforme avec 3 sonars et 2 moteurs...
et je rencontre un probleme, j'ai fait 3 conditions:
si distance G< 15 alors tourne à D
si distance D< 15 alors tourne à G
si distance AV< 15 alors recule
else avance
et malheureusement ce n'est pas aussi smple, en faite, la premiere ligne pour la D est ok, elle marche bien, par contre le 2ème pour la G on commence à ressentir des lags dans les moteurs, des accoups, qui je pense sont dû au temps d'access des sonards... et la marche AR est la ligne qui marche nikel.
bref les détections et les actions sont loin d'être fluide !!! j'ai fait plein de modif dans mes lignes de codes mais là c'est ce qui est le mieux ! lol
int E1 = 6; int M1 = 7; int E2 = 5; int M2 = 4; #include "Ultrasonic.h" #define TRIG_PIN_A 8 #define ECHO_PIN_B 9 Ultrasonic OurModule_G(TRIG_PIN_A, ECHO_PIN_<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; #define TRIG_PIN_C 10 #define ECHO_PIN_D 11 Ultrasonic OurModule_M(TRIG_PIN_C, ECHO_PIN_D); #define TRIG_PIN_E 12 #define ECHO_PIN_F 13 Ultrasonic OurModule_D(TRIG_PIN_E, ECHO_PIN_F); void setup() { pinMode(M1, OUTPUT); pinMode(M2, OUTPUT); avance(); } void loop() { if ( (OurModule_D.Ranging(CM)) < 17 & (OurModule_D.Ranging(CM)) < (OurModule_G.Ranging(CM))) { droite(); delay(50); } if ( (OurModule_G.Ranging(CM)) < 17 & (OurModule_G.Ranging(CM)) < (OurModule_D.Ranging(CM))) { gauche(); delay(50); } if ( (OurModule_M.Ranging(CM)) < 13 ) { recul(); delay(750); } else avance(); } void avance() { digitalWrite(M1,HIGH); digitalWrite(M2, HIGH); analogWrite(E1, 255); analogWrite(E2, 255); } void droite() { digitalWrite(M1,HIGH); digitalWrite(M2,HIGH); analogWrite(E1, 255); analogWrite(E2, 10); } void gauche() { digitalWrite(M1,HIGH); digitalWrite(M2,HIGH); analogWrite(E1, 10); analogWrite(E2, 255); } void recul() { digitalWrite(M1,LOW); digitalWrite(M2,LOW); analogWrite(E1, 75); analogWrite(E2, 175); }
j'ai essayer de réécrire le prog en utilisant DO WHILE... mais ça ne marche pas du tout...
voici une petite vidéo pour explication...
http://youtu.be/-yuA7bORxgM