Je suis actuellement en Terminale STI2D SIN et nous avons un projet pour la fin de l'année scolaire.
Je tiens a dire que je ne suis qu'un débutant en programmation, mais ce domaine m’intéresse beaucoup.
Mon projet est de programmer une pince en aluminium possédant 2 servos moteurs ainsi qu'un châssis à chenille.
Le type de carte est une arduino Romeo, reconnu par l'ordinateur sous le nom de Leonardo.
Mon objectif est de, suivant le numéro que j'entre dans le moniteur série du logiciel, que la pince fasse un mouvement spécifique.
Je m'explique :
Si j'entre le numéro 2, le châssis avance pendant 2 secondes , la pince s'ouvre puis se referme en prennant l'objet, le chassis recule pendant 2 secondes.
Si j'entre le numéro 5, le châssis avance pendant 4 secondes, il tourne à gauche, la pince s'ouvre puis se referme en prennant l'objet, le châssis recule à droite puis recule en ligne droite.
Mon problème avec le programme ci dessous, c'est que pour n'importe quel numéro entré, le chassis ne cesse d'avancer.
Voila le programme en cours ( ce n'est qu'un test avec marche arrière / avant ) :
int speed = 100; // Vitesse
int E1 = 5;
int E2 = 6;
int M1 = 4;
int M2 = 7;
void avancer()
{
analogWrite (E2, speed);
digitalWrite(M2,HIGH);
analogWrite (E1, speed);
digitalWrite(M1,HIGH);
}
void reculer()
{
analogWrite (E2, speed);
digitalWrite(M2,LOW);
analogWrite (E1, speed);
digitalWrite(M1,LOW);
}
void setup(void)
{
int i;
for(i=6;i<=9;i++)
pinMode(i, OUTPUT);
Serial.begin(19200); // Configurer le baud
}
void loop()
{
if (Serial.available() > 0)
{
char reference = Serial.read();
switch (reference) {
case 1: //si le message est "1"
avancer();
break;
case 2: //si le message est "2"
reculer();
break;
}
}
}
De plus ton code ne prévois pas les autres cas. C'est pour celà qu'en général en plus des case que tu souhaites, tu dois définir un default. Au final ça donnerait :
if (Serial.available() > 0)
{
char reference = Serial.read();
switch (reference) {
case '1': //si le message est "1" <=> équivalent à "case 49 :"
avancer();
break;
case '2': //si le message est "2" <=> équivalent à "case 50 :"
reculer();
break;
default:
// code à exécuter si mauvaise commande par exemple:
Serial.print("Commande inconnue !");
break;
}
}
B@tto:
Bah non, 1 est un entier
Sauf qu'ici il le case était 1 alors qu'en réalité ce qui était reçu était 49 donc la condition ne pouvait être validée
Etant donné que la commande n'était pas reconnu, rien n'aurait du bouger.
Il faudrait peut être se poser des questions sur l'initialisation de la commande des moteurs.
Dans le setup il n'y a rien à ce sujet. Mais peut être n'est-ce qu'une partie du code.
Le programme fonctionne comme il faut, quand je rentre le numéro 1 sur le moniteur série le chassis avance, et recule quand j'entre le numéro 2. Merci beaucoup pour votre aide.
P.S : J'ai donné tout le programme.