voila, je travaille depuis un momant à fabriquer mon robot. tout comme roby il évite des obstacle grace à un capteur de distance, mais la tete de mon robot tourne en continu sur 180 degré et observe tout autour de lui pour mieu réagir à différente situation, malheureusement j'ai un petit problème avec mon code. Je voudrait que mon robot puisse recevoir les info de mon capteur de distance pendant qu'il tourne la tete ,alors qu'en se moment il tourne la tete ,puis reçoit les info. Je ne sait pas si j'ai été assez claire n'ésitez pas à me demander d'autres information
voici mon code actuelle:
#define AVANT 1
#define ARRIERE 0
#define GAUCHE 2
#define DROITE 3
#define SERVOG 1
#define SERVOD 0
#define VMAX 5
Servo tete;
// tourner tete
void RotTete (int pos = 0)
{
for(pos = 0; pos < 180; pos += 1)
{
tete.write(pos);
delay(15);
}
for(pos = 180; pos>=1; pos-=1)
{
tete.write(pos);
delay(15);
}
}
//avant,gauche,droite,arrière
Servo servog;
Servo servod;
int getNeutral(int s)
{
if(s == SERVOG)
return 86;
else
return 84;
}
void handleS(int s, int speed)
{
//Vitesse :
// 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
int tab[6] = {0,1,3,8,10,30};
int pos = getNeutral(s);
int acc;
if (speed < 0)
acc = - tab[abs(speed)];
else
acc = tab[speed];
if(s == SERVOG)
servog.write(pos += acc);
else
servod.write(pos -= acc);
}
void move(int direction)
{
int m1 = 0, m2 = 0;
switch(direction)
{
case DROITE: m1 = 1; m2 = -1; break;
case GAUCHE: m1 = -1; m2 = 1; break;
case AVANT: m1 = 1; m2 = 1; break;
case ARRIERE: m1 = -1; m2 = -1; break;
}
handleS(SERVOG, m1*VMAX);
handleS(SERVOD, m2*VMAX);
}
//agir selon les situations
void action()
{ int yeux = analogRead(5); //capteur de distance
int cou = analogRead(4);//potentiomètre du servomoteur
if (cou >=0 <=45 && yeux >=0 <=300) // && veut dire ''et''
{digitalWrite(11, LOW);
move (GAUCHE);}
}
void setup()
{
tete.attach(11);
servog.attach(9);
servod.attach(10);
move (AVANT);
}
void loop()
{
RotTete ();
action ();
move (AVANT);
delay(100);[/code]