Go Down

Topic: Soucis de Codage (Read 4764 times) previous topic - next topic

little-monkey

May 31, 2013, 10:49 pm Last Edit: Jun 02, 2013, 08:07 pm by little-monkey Reason: 1
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

Code: [Select]
#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);
   
}

Viproz

#1
May 31, 2013, 10:58 pm Last Edit: May 31, 2013, 11:00 pm by Viproz Reason: 1
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é : http://arduino.cc/en/reference/servo
http://arduino.cc/en/Reference/Map

little-monkey

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

Viproz

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

chabot380

Salut

C'est la saison des : " Aidez moi svp c'est urgent pour le bac! "   :D
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 !   :smiley-eek-blue:

Sur ce bonne journée.
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

little-monkey

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


Code: [Select]
#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);
  }
}

Viproz

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

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

jfs

Edite ton titre et mets en un plus en rapport avec le sujet !
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

little-monkey

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)

infobarquee

bonjour,
+1 avec tout le monde.

ca veut dire quoi ce genre de code?
Quote
if(HIGH == digitalRead(capteur4))


Quote
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
AUCUNE AIDE PAR MP

papybricol

Bonjour,

...et peut-être bien la liaison (masse de la uno) avec (la masse de l'alim des servos à rotation continue) ?
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

jfs


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  :smiley-mr-green:
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

fdufnews

Je suppose que c'est ce code qui fait tourner les servos de propulsion?
Code: [Select]
  { 
  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.

papybricol

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.
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

little-monkey

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é ;) )

Go Up