Soucis de Codage

Salut,
J'ai un problème avec la fonction map, je voudrait l'inclure pour que mon robot aille tout droit, j'utilise des servos pour le faire avancer
Merci de vos réponses

#include <Servo.h> 
int capteur1 = 3;    // Connecté au Pin 3
int capteur2 = 4;
int capteur3 = 5;
int capteur4 = 6;
Servo servo;
Servo servo1;
Servo servo2;
int pos = 0;
void setup()   {                
  pinMode(capteur1, INPUT);
  pinMode(capteur2, INPUT);
  pinMode(capteur3, INPUT);
  pinMode(capteur4, INPUT);
  servo.attach(9);
  servo1.attach(10);
  servo2.attach(11);
  Serial.begin(9600); 
}
void loop()                     
{
  if(HIGH == digitalRead(capteur1))
    for(pos = 0; pos < 45; pos += 1) // goes from 45 degrees to 0 degrees, he turn right
    {                                 
    servo.write(45);       
    delay(15);                        
  }
    else  Serial.println("Capteur1: BLANC");
    delay(1000);
  if(HIGH == digitalRead(capteur2))
    for(pos = 0; pos < 27; pos+=1)     // goes from 27 degrees to 0 degrees, he turn right
  {                                
    servo.write(27);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
    else Serial.println("Capteur2: BLANC");
    delay(1000);
    if(HIGH == digitalRead(capteur3))
    for(pos = 27; pos>=1; pos-=1)     // goes from 0 degrees to 37 degrees 
  {                                
    servo.write(27);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
    else Serial.println("Capteur3: BLANC");
    delay(1000);
    if(HIGH == digitalRead(capteur4))
    for(pos = 45; pos>=1; pos-=1)     // goes from 0 degrees to 45 degrees, he turn left
  {                                
    servo.write(45);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
    else Serial.println("Capteur4: BLANC");
    delay(1000);
    
}

Ton code est moche, les gens qui écrivent URGENT dans le titre ça m'énerve et regarde les docs avant de poster.

Tu n'a meme pas essayer d'utiliser la fonction map() dans ton code

Élan de bonté : Servo - Arduino Reference
http://arduino.cc/en/Reference/Map

Si j'ai essayé mais il n'avance pas, le sujet n'est pas de savoir s'il est beau ou pas mon code mais je voudrais que mon robot avance et recommence la ligne, j'ai vraiment besoin d'aide

Servo.write dans le cadre d'un servo motor tournant sans limite va définir la vitesse de rotation du moteur, lisla doc !

Toutes tes boucles for sont donc bizarres

Salut

C'est la saison des : " Aidez moi svp c'est urgent pour le bac! " :smiley:
Pour le bac ne doit ton pas faire un travail personnel ?
Que diront-ils quand ils seront dans une entreprise ? Excusez moi il faut que je consulte des forums d'entraide ! :fearful:

Sur ce bonne journée.

J'ai mis servo.write mais mon robot n'avance toujours pas mais capte la ligne.

#include <Servo.h> 
int capteur1 = 3;    // Connecté au Pin 3
int capteur2 = 4;
int capteur3 = 5;
int capteur4 = 6;
Servo servo;
Servo servo1;
Servo servo2;
int pos = 0;
int n =0;
void setup()   {                
  pinMode(capteur1, INPUT);
  pinMode(capteur2, INPUT);
  pinMode(capteur3, INPUT);
  pinMode(capteur4, INPUT);
  servo.attach(9);
  servo1.attach(10);
  servo2.attach(11);
  
  Serial.begin(9600); 
}
void loop()                     
{
  if(HIGH == digitalRead(capteur1))
    for(pos = 0; pos < 45; pos += 1) // goes from 45 degrees to 0 degrees, he turn right
    {                                 
    servo.write(pos);       
    delay(15);                        
  }
    else  Serial.println("Capteur1: BLANC");
    delay(1000);
  if(HIGH == digitalRead(capteur2))
    for(pos = 0; pos < 27; pos+=1)     // goes from 27 degrees to 0 degrees, he turn right
  {                                
    servo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
    else Serial.println("Capteur2: BLANC");
    delay(1000);
    if(HIGH == digitalRead(capteur3))
    for(pos = 27; pos>=1; pos-=1)     // goes from 0 degrees to 37 degrees 
  {                                
    servo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
    else Serial.println("Capteur3: BLANC");
    delay(1000);
    if(HIGH == digitalRead(capteur4))
    for(pos = 45; pos>=1; pos-=1)     // goes from 0 degrees to 45 degrees, he turn left
  {                                
    servo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
    else Serial.println("Capteur4: BLANC");
    delay(1000);
  {  
  servo1.write(n);
  servo2.write(180-n);
  }
}

Tu récupères quoi en serial sur le pc ?

Puis, ton robot doit bien faire de petits mouvements, lesquels sont ils ?

Edite ton titre et mets en un plus en rapport avec le sujet !

j'ai un robot suieur de ligne, qui fonctionne qu'avec des servos, un servo pour faire la direction et 2 pour faire la "puisssance" (en faite, pour tourner sans interruption), j'ai branché les servos de puissance sur une batterie extérieur mais le fil de commande sur la carte arduino (uno)

bonjour,
+1 avec tout le monde.

ca veut dire quoi ce genre de code?

if(HIGH == digitalRead(capteur4))

j'ai branché les servos de puissance sur une batterie extérieur mais le fil de commande sur la carte arduino (uno)

manque pas la fin de la phrase? XD

Bonjour,

...et peut-être bien la liaison (masse de la uno) avec (la masse de l'alim des servos à rotation continue) ?

Jean-François:
Edite ton titre et mets en un plus en rapport avec le sujet !

La prochaine fois que tu postes sans tenir compte de cette remarque ..... pouffff adieu le sujet :grin:

Je suppose que c'est ce code qui fait tourner les servos de propulsion?

  {  
  servo1.write(n);
  servo2.write(180-n);
  }

n est initialisé à 0 au début et tu ne lui affectes jamais d'autre valeur donc pas étonnant que ton robot n'avance pas.

Bonjour,

Si ce sont bien des servos à rotation continue:

Servo.write(0) -------> rotation vitesse maxi dans un sens
Servo.write(180)------> vitesse maxi dans l'autre sens

Si les servos sont montés en sens inverse, de chaque côté , (cas normal), cette commande permet d'avancer (ou reculer!) droit. En réalité il faut ajuster les 2 valeurs au voisinage de 0 et de 180...

Donc pour le diriger il suffit de jouer sur la vitesse à droite OU à gauche.
Je ne comprends pas l'utilité du 3°servo destiné à la direction.

Bonjour à toi papybricol,

J'utilise 2 servos pour aller tout droit et après le 3ème servo sert décaler le robot ( et parce que ça m'était imposé :wink: )

Jean-François:

Jean-François:
Edite ton titre et mets en un plus en rapport avec le sujet !

La prochaine fois que tu postes sans tenir compte de cette remarque ..... pouffff adieu le sujet :grin:

sujet verouillé !
Tu peux m'envoyer un MP....

Bonjour,

Tu nous files un code à la syntaxe et à l'indentation plus que douteuse.
Tu nous files une fonction sans même l'utiliser dans ton code.
Tu crie à qui veut l'entendre que ton robot n'avance pas.

MAIS

Tu ne nous à toujours pas dit comment ton robot était conçu, l'emplacement des moteurs, l'orientation des moteurs, ...
On ne sait absolument pas quel est ton but final !
Tu utilises un capteurs de : lumière / couleur / autre (rayez la mention inutile) ? Ce serait bien de le préciser tu ne crois pas ?

Avec si peu d'info et un "je m'en foutisme" total (il y a une charte sur ce forum ! J-F tu est bien trop gentil ;)) on ne peut pas te donner de réponses claires.
Pour un projet si "urgent" le minimum c'est de faire le nécessaire pour obtenir des réponses claires rapidement ...

Salut,
J'utilise des line-finder qui utilisent de l'infrarouge.
Les servos sont placés à l'arrière et ils sont sans butés.
Mon but final, d'avoir un programme qui fonctionne et qui fasse rouler le robot