-
01/07/2012 - 16h29 labatteur
Arduino, programmation raté.
Bonjour à tous,
je viens de finir la programmation de mon programme arduino et à priori j'ais fais une erreur mais j'ai beau chercher je ne la trouve pas, à priori c'est une erreur très ... Donc si vous avez un peu de temps à perdre, je vous laisse le code : Code: int pinM = A3;
int pinG = A2;
int pinD = A1;
int valeurGauche = 0; // Valeur LDR gauche
int valeurMilieu = 0;
int valeurDroite = 0; // Valeur LDR droite
int erreur =0; // La deviation entre les deux LDRs
int erreurMOY = 0; // La moyenne de la deviation
int deadband = 10; // Sensibilite : 10 = -10 to +10
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT); pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
// Lecture des LDRs
valeurGauche = analogRead(pinG);
valeurDroite = analogRead(pinD);
valeurMillieu = analogRead(pinM);
//Calcul de l'erreur
erreur = (valeurGauche + valeurDroite)/2;
}
{
if (valeurGaughe < valeurDroite)
{
digitalWrite(12, HIGH);
}
else
{
digitalWrite(11, HIGH);
}
if (erreur > valeurMillieu)
{
return 0;
}
else
{
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
} Thanks à tous
Dernière modification par JPL ; 01/07/2012 à 22h32.
Motif: ajour de la balise Code pour garder l'indentation
-
01/07/2012 - 17h02 PA5CAL
Re : Arduino, programmation raté.
Bonjour
Pour commencer, quand on présente un bout de code sur le forum, il faut l'insérer entre des balises [CODE]...[/CODE], que tu peux obtenir directement avec le bouton # en mode d'édition avancé (bouton « Aller en mode avancé »). Cela permet de conserver l'indentation du texte, qui est nécessaire pour garder un minimum de lisibilité. Par exemple : Code: int pinM = A3;
int pinG = A2;
int pinD = A1;
int valeurGauche = 0; // Valeur LDR gauche
int valeurMilieu = 0;
int valeurDroite = 0; // Valeur LDR droite
int erreur = 0; // La déviation entre les deux LDRs
int erreurMOY = 0; // La moyenne de la déviation
int deadband = 10; // Sensibilité : 10 = -10 à +10
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}
... (NB: le compilateur de l'Arduino autorise l'emploi des voyelles accentuées dans les commentaires)
Ensuite, le compilateur ne supporte pas les fautes d'orthographe. Ainsi, tu ne peux pas nommer des variables valeurGauche et valeurMilieu, puis les utiliser plus loin en écrivant valeurGaughe et valeurMillieu.
Les accolades délimitent des blocs de code. Si tu les places mal, tu risques de rendre des parties du code inaccessibles au moment de l'exécution. C'est le cas pour tout ce qui suit la ligne « erreur = (valeurGauche + valeurDroite)/2; ».
La valeur de retour d'une fonction doit correspondre à sa déclaration. Lorsque la déclaration spécifie « void » (c'est le cas de la fonction « loop() » ), il n'y a pas de valeur de retour, et pour quitter la fonction en cours de route on doit utiliser « return; », et non pas « return 0; ».
Lors d'une compilation, les erreurs rencontrées sont indiquées dans la partie inférieure de la fenêtre de l'outil de développement (en orange sur fond noir). Il suffit généralement de les lire pour trouver les problèmes et les corriger.
Enfin, faute d'indication sur l'environnement matériel et sur ce que tu souhaites obtenir, le fonctionnement de ce programme n'est pas suffisamment clair pour qu'on puisse t'indiquer s'il est correct, indépendamment des erreurs de syntaxe qui pourront être corrigées.
Dernière modification par PA5CAL ; 01/07/2012 à 17h07.
-
01/07/2012 - 17h10 PA5CAL
Re : Arduino, programmation raté.
Comme il y a 0% d'électronique dans le problème posé, je pense que ce sujet aurait plutôt sa place sur le forum « Programmation et langages, Algorithmique » .
-
01/07/2012 - 18h24 labatteur
Re : Arduino, programmation raté.
J'ai modifié le programme, mais j'ai toujours ce problème de parenthèse Code: int pinM = A3;
int pinG = A2;
int pinD = A1;
int valeurGauche = 0; // Valeur LDR gauche
int valeurMilieu = 0;
int valeurDroite = 0; // Valeur LDR droite
int erreur =0; // La deviation entre les deux LDRs
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT); pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
// Lecture des LDRs
valeurGauche = analogRead(pinG);
valeurDroite = analogRead(pinD);
valeurMilieu = analogRead(pinM);
//Calcul de l'erreur
erreur = (valeurGauche + valeurDroite) /2;
}
{
if (valeurGaughe < valeurDroite)
{
digitalWrite(12, HIGH);
}
else
{
digitalWrite(11, HIGH);
}
if (erreur > valeurMilieu)
{
return 0;
}
else
{
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
} -
01/07/2012 - 18h37 PA5CAL
Re : Arduino, programmation raté.
Dans la fonction loop() : Code: ...
//Calcul de l'erreur
erreur = (valeurGauche + valeurDroite) /2;
}
{
if (valeurGaughe < valeurDroite)
... Les deux accolades doivent être supprimées, et le « g » transformé en « c ».
Dernière modification par PA5CAL ; 01/07/2012 à 18h38.
-
01/07/2012 - 21h15 labatteur
Re : Arduino, programmation raté.
Je vous tient au courant si jamais le programme ne fonctionne pas sur son support. Merci dans tout les cas
-
01/07/2012 - 21h54 Jack
Re : Arduino, programmation raté.
Le compilateur ne donne pas la ligne à laquelle il a détecté une erreur de syntaxe? C'est étonnant.
A+
-
01/07/2012 - 22h19 PA5CAL
Re : Arduino, programmation raté.
 Envoyé par Jack Le compilateur ne donne pas la ligne à laquelle il a détecté une erreur de syntaxe? C'est étonnant.
A+ En tout cas, la version la plus récente du compilo indique bien une erreur sur la ligne correspondant à l'accolade ouvrante que j'ai mise en rouge plus haut, avec le diagnostic " error: expected unqualified-id before '{' token "
Dernière modification par PA5CAL ; 01/07/2012 à 22h20.
-
01/07/2012 - 22h31 Jack
Re : Arduino, programmation raté.
C'est pourquoi je m'interroge toujours sur ce genre de question.
A+
-
02/07/2012 - 14h55 labatteur
Re : Arduino, programmation raté.
Le compilateur arduino, non.
-
02/07/2012 - 15h04 labatteur
Re : Arduino, programmation raté.
Enfin maintenant je sais plus, sinon j'ai remodifié mon programme, mais je me suis aperçu d'un petit problème, je ne sais pas comment faire pour que mes capteurs partie analogique reçoivent une tension, sinon le nouveau code qui a été amélioré sauf sur ça, car je ne sais pas faire. Code: int pinM = A3;
int pinG = A2;
int pinD = A1;
int valeurGauche = 0; // Valeur LDR gauche
int valeurMilieu = 0;
int valeurDroite = 0; // Valeur LDR droite
int erreur = 0;
int erreur1 = 0;
int erreur2 = 0;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT); pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
// Lecture des LDRs
valeurGauche = analogRead(pinG);
valeurDroite = analogRead(pinD);
valeurMilieu = analogRead(pinM);
//Calcul de l'erreur
erreur = (valeurGauche + valeurDroite) /2;
erreur1 = (valeurGauche + valeurMilieu) /2;
erreur2 = (valeurMilieu + valeurDroite) /2;
if (valeurGauche < erreur2)
{
digitalWrite(12, HIGH);
}
if (valeurDroite < erreur1)
{
digitalWrite(12, HIGH);
}
if (erreur < valeurMilieu)
{
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
}
Dernière modification par labatteur ; 02/07/2012 à 15h08.
-
02/07/2012 - 15h05 Jack
Re : Arduino, programmation raté.
Purtant d'après PA5CAL, c'est le cas. J'ai du mal à imaginer comment on peut trouver une erreur de compil si aucun message n'est affiché. C'est peut-être pour ça aussi que j'ai abandonné les arduino pour le cartes panda.
A+
-
02/07/2012 - 15h22 labatteur
Re : Arduino, programmation raté.
Enfaîte j'ai du mal à comprendre certaines phrases en anglais du compilateur
Dernière modification par labatteur ; 02/07/2012 à 15h25.
-
02/07/2012 - 15h54 PA5CAL
Re : Arduino, programmation raté.
Le programme que tu présentes est bien compilable maintenant.
Il lit bien les tensions présentes sur les entrées A1, A2 et A3 de la carte.
En revanche, l'utilité de ce qu'il en fait après n'est pas très clair :
• La led (pin 13) est allumée au démarrage, et n'est jamais éteinte.
• La pin 12 est portée à l'état haut si la tension sur A1 est plus faible que la moyenne des tensions sur A2 et A3, ou si la tension sur A2 est plus faible que la moyenne des tensions sur A1 et A3. Elle est portée à l'état bas si la tension sur A3 est plus élevée que la moyenne des tensions sur A1 et A2.
• La pin 11 n'est pas initialisée par le programme, et n'est jamais portée à l'état haut. Elle devrait rester tout le temps à l'état bas, qui est en principe l'état de sortie par défaut.
-
02/07/2012 - 16h35 labatteur
Re : Arduino, programmation raté.
Les leds 13, 12, 11 sont en réalité des relais, le 13 commande la marche avant du véhicule, mais je n'ai pas encore acheter le capteur de proximité donc pas de programmation pour l'instant pour lui, le 12 et le 11 commande la direction selon le capteur (a1 ou a2 ou a3 ), c'est le capteur recevant le plus d'ir qui ordonne une action à un des relais, et j'ai corrigé une petite faute sur le programme Code:
if (valeurGauche < erreur2)
{
digitalWrite(12, HIGH);
}
if (valeurDroite < erreur1)
{
digitalWrite(11, HIGH);
}
if (erreur < valeurMilieu)
{
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
} | | |