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 ?
Déja oui si tu n'appelle pas ta fonction elle ne se lancera jamais
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 :
quel déterrage de post datant de 2011
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