Arduino, programmation raté.
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Arduino, programmation raté.



  1. #1
    invitea9b786c8

    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

  2. #2
    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.

  3. #3
    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 » .

  4. #4
    invitea9b786c8

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

  5. A voir en vidéo sur Futura
  6. #5
    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.

  7. #6
    invitea9b786c8

    Re : Arduino, programmation raté.

    Je vous tient au courant si jamais le programme ne fonctionne pas sur son support. Merci dans tout les cas

  8. #7
    Jack
    Modérateur

    Re : Arduino, programmation raté.

    Le compilateur ne donne pas la ligne à laquelle il a détecté une erreur de syntaxe? C'est étonnant.

    A+

  9. #8
    PA5CAL

    Re : Arduino, programmation raté.

    Citation Envoyé par Jack Voir le message
    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.

  10. #9
    Jack
    Modérateur

    Re : Arduino, programmation raté.

    C'est pourquoi je m'interroge toujours sur ce genre de question.

    A+

  11. #10
    invitea9b786c8

    Re : Arduino, programmation raté.

    Le compilateur arduino, non.

  12. #11
    invitea9b786c8

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

  13. #12
    Jack
    Modérateur

    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+

  14. #13
    invitea9b786c8

    Re : Arduino, programmation raté.

    Enfaîte j'ai du mal à comprendre certaines phrases en anglais du compilateur

  15. #14
    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.

  16. #15
    invitea9b786c8

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

Discussions similaires

  1. quelle est la difference entre programmation procedurale et la programmation orientee objet
    Par invite430abc62 dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 27/01/2016, 12h34
  2. Réponses: 23
    Dernier message: 30/03/2012, 23h23
  3. Rate exponent?
    Par invite76b19d0a dans le forum Chimie
    Réponses: 8
    Dernier message: 23/10/2010, 17h55