Programmation arduino pour suiveur de ligne

Bonjour ,

J'ai pour projet de faire un robot suiveur de ligne. Mais, je de grandes difficultés en ce qui concerne la programmation de la Arduino UNO.
Dans un premier temps je dois faire un test: je fais tourner un servo à rotation continue indéfiniment et , lorsque que j'enclenche un contact NO (normalement ouvert), le servo doit se stopper.

Voici mon ébauche de code :

#include <Servo.h>
 #define UPDD 3  // On attache le capteur à la patte 3 de l'arduino

    Servo servo;
     void setup()
    {
      servo.attach(9); // On attache le servomoteur à la patte 9 de l'arduino
      Serial.begin(9600); // On va envoyer des informations à l'ordinateur grâce à ce port
      pinMode(UPDD, INPUT);
    }

 void loop()
    {
      int i = 92;
       while(i <= 92)
       {
          servo.write(i);  
          Serial.println(i); //On affiche la valeur en cours de l'angle  
          delay(1000); // On attend une seconde pour avoir le temps de lire la valeur qui nous interesse
       
         i = i-1;  
       }
     } //le moteur tourne sans arrêt

void handleUPDD(int updd)
{

  if(digitalRead(UPDD)==HIGH) //Si le capteur est enclenché
  {  
  
int i = 92;
servo.write(i); //le servo se stoppe car il est au neutre

        
       }
    
  }

Je compile et lorsque je transfère à la carte le servo tourne bien mais il ne s'arrête pas quand j'appuie sur le contact.
J'aimerais de l'aide si possible.

Merci d'avance.

PS: on m'as dit que la fonction handleUPDD n'avait pas été appelée, comment faire ?

Il faut que ta fonction soit déclarée avant le loop() (il me semble) et qu'elle soit appelée à l'intérieur de cette boucle:
handleUPDD(valeur)

Il faudrait donc que je rajoute ça dans mon code ?

void loop()
{
     handleUPDD(UPDD);
}

Déja oui si tu n'appelle pas ta fonction elle ne se lancera jamais :wink:

Mais je pense que ton code ne fonctionnera pas : deja le delay() que tu as inséré dans ta boucle while va te louper ta ligne. Moi j'aurais plus vu quelque chose comme ça :

#include <Servo.h>
 #define UPDD 3  // On attache le capteur à la patte 3 de l'arduino


int Depart;
int i=92;

    Servo servo;

     void setup()
    {
      servo.attach(9); // On attache le servomoteur à la patte 9 de l'arduino
      Serial.begin(9600); // On va envoyer des informations à l'ordinateur grâce à ce port
      pinMode(UPDD, INPUT);
      Depart=millis();
    }

 void loop() {

 if(digitalRead(UPDD)==HIGH) {
      i=92;
      servo.write(i);  
 } else {
         if (millis()-Depart>=1000){
                Depart=millis();
                i = i-1;                 
                servo.write(i);  
                Serial.println(i); 
                }
          } 
}




        
          
  }

Merci ! je teste tout ça et je vous donne de mes nouvelles

EDIT: ton code marche, mais il produit un effet contraire à celui désiré : le servo ne tourne pas , puis quand j’appuie sur le contact il tourne.
Et même si je n'appuie pas, au bout d'un certain temps il tourne.
Alors je l'ai modifié en ça :

#include <Servo.h>
 #define UPDD 3  // On attache le capteur à la patte 3 de l'arduino


int Depart;
int i=0;

    Servo servo;

     void setup()
    {
      servo.attach(9); // On attache le servomoteur à la patte 9 de l'arduino
      Serial.begin(9600); // On va envoyer des informations à l'ordinateur grâce à ce port
      pinMode(UPDD, INPUT);
      Depart=millis();
    }

 void loop() {

 if(digitalRead(UPDD)==LOW) {
      i=0;
      servo.write(i);  
 } else {
         if (millis()-Depart>=1000){
                Depart=millis();
                i = 92;                 
                servo.write(i);  
                Serial.println(i); 
                }
          } 
}

Et ça marche ! Merci !
Bon maintenant il faut que je rajoute un deuxième servo.

Bonjour, l'arduino c'est vraiment génial, mais pour faire un véhicule ou robot suiveur de ligne, pas besoin d'arduino, quelques composant tout simple font très bien l'affaire, tu peux aller voir en vidéo ici :

Bonne journée à toi, et tien nous au courant.

quel déterrage de post datant de 2011 :slight_smile:
depuis le temps, tu ne crois pas qu'il ait terminé ou abandonné le projet?
Et en plus, tu demandes d'être tenu au courant :wink: