Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème encodage robot anti collision

    15 janvier 2017 à 23:59:44

    Salut ,

    a chaque fois que j'essaye de compiler le mon programme pour ma voiture anti-collision je reçois (scan was not declared in this scope).

    Est ce que vous savez ce qui se passe ? je suis un débutant en programmation arduino .

    Merci d'avance

    Mon code :

    #include <Servo.h>

    #include <NewPing.h>

    #define Pin_Declenchement 8

    #define Pin_Echo 7

    #define Distance_maximum 100

    NewPing sonar(Pin_Declenchement,Pin_Echo,Distance_maximum); 

    unsigned int temps; //Valeur tjs +

    int distance_de_declenchement = 30;

    int distance_recu;

    int dFace;

    int dDroite;

    int dGauche;

    Servo Bougeur1;

    Servo Bougeur2;

    void setup()

    {

      Bougeur1.attach(2);

      Bougeur1.write(90);

      Bougeur2.attach(4);

      Bougeur1.write(90);

    }

    void loop(){

      etude();

      dFace=distance_recu;

      if (distance_recu < distance_de_declenchement);

      {

       RECULER();

       delay(1000);

       DROITE();

       delay(500);

       STOP();

       etude();

       dDroite=distance_recu;

       GAUCHE();

       delay(1000);

       STOP();

       etude();

       dGauche=distance_recu;

      {

      if (dGauche>dDroite){

       DROITE();

       delay(1000);

       AVANCER();

      }

      else if {

       AVANCER(); 

      }

      else {

        AVANCER();

      } 

      }

    void etude(){

      distance_recu=sonar.ping_cm();

      if (distance_recu==0);

      distance_recu= 100;

      delay(500); 

    }

    void AVANCER(){

      Bougeur1.write(180);

      Bougeur2.write(180);

    }

    void RECULER(){

      Bougeur1.write(180);

      Bougeur2.write(0);

    }

    void DROITE(){

      Bougeur1.write(0);

      Bougeur2.write(0);

    }

    void GAUCHE(){

      Bougeur1.write(180);

      Bougeur2.write(180); 

    }

    void STOP(){

      Bougeur1.write(90);

      Bougeur2.write(95);

    }

    -
    Edité par Autherain 16 janvier 2017 à 0:00:40

    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2017 à 8:18:16

      Avec les balises codes, ce serait beaucoup plus lisible ;)

      Je t'invite donc à éditer ton message pour poster ton code à l'aide du bouton en forme de </> au dessus de la zone d'édition du message.

      -----

      Pour ce qui est de ton problème, il n'y a aucune variable ou fonction nommé "scan" dans ton code...

      Pourrais tu nous copier/coller tout ce que t'affiche le compilateur ?

      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2017 à 16:26:52

        #include <Servo.h>
        
        #include <NewPing.h>
        
        #define Pin_Declenchement 8
        
        #define Pin_Echo 7
        
        #define Distance_maximum 100
        
        NewPing sonar(Pin_Declenchement,Pin_Echo,Distance_maximum); 
        
        unsigned int temps; //Valeur tjs +
        
        int distance_de_declenchement = 30;
        
        int distance_recu;
        
        int dFace;
        
        int dDroite;
        
        int dGauche;
        
        Servo Bougeur1;
        
        Servo Bougeur2;
        
        void setup()
        
        {
        
          Bougeur1.attach(2);
        
          Bougeur1.write(90);
        
          Bougeur2.attach(4);
        
          Bougeur1.write(90);
        
        }
        
        void loop(){
        
          etude();
        
          dFace=distance_recu;
        
          if (distance_recu < distance_de_declenchement);
        
          {
        
           RECULER();
        
           delay(1000);
        
           DROITE();
        
           delay(500);
        
           STOP();
        
           etude();
        
           dDroite=distance_recu;
        
           GAUCHE();
        
           delay(1000);
        
           STOP();
        
           etude();
        
           dGauche=distance_recu;
        
          {
        
          if (dGauche>dDroite){
        
           DROITE();
        
           delay(1000);
        
           AVANCER();
        
          }
        
          else if {
        
           AVANCER(); 
        
          }
        
          else {
        
            AVANCER();
        
          } 
        
          }
        
        void etude(){
        
          distance_recu=sonar.ping_cm();
        
          if (distance_recu==0);
        
          distance_recu= 100;
        
          delay(500); 
        
        }
        
        void AVANCER(){
        
          Bougeur1.write(180);
        
          Bougeur2.write(180);
        
        }
        
        void RECULER(){
        
          Bougeur1.write(180);
        
          Bougeur2.write(0);
        
        }
        
        void DROITE(){
        
          Bougeur1.write(0);
        
          Bougeur2.write(0);
        
        }
        
        void GAUCHE(){
        
          Bougeur1.write(180);
        
          Bougeur2.write(180); 
        
        }
        
        void STOP(){
        
          Bougeur1.write(90);
        
          Bougeur2.write(95);
        
        }
        


        Oops excusez moi ,

        Quand je parlais de fonction scan je parlais de fonction "etude" .Je me suis trompé dans le post du forum mea culpa .

        Il y a toujours la même erreur qui est : (etude was not declared in this scope)

        Toutes les autres fonctions (RECULER;AVANCER ....) ne sont pas marqués comme déclarée et donc (not declared in this scope).

        Mon code :

        • Partager sur Facebook
        • Partager sur Twitter
          16 janvier 2017 à 19:24:44

          Le compilateur va analyser ton code ligne par ligne, du début à la fin.

          Si on prend l'exemple de la fonction RECULER, tu t'en sert à la ligne 53 alors que tu la cré à la ligne 123.

          Alors forcément, quand le compilateur arrive à la ligne 53, il va te dire que la fonction n'existe pas car il n'a pas encore atteins la ligne 123.

          Pour résoudre ce genre de problème, il suffit de déclarer le prototype des fonctions au début.

          Dans ton cas, tu devrais ajouter les lignes suivantes avant le setup :

          // Déclaration des prototypes :
          void etude();
          void AVANCER();
          void RECULER();
          void DROITE(); 
          void GAUCHE();
          void STOP();



          • Partager sur Facebook
          • Partager sur Twitter
            17 janvier 2017 à 23:04:53

            Merci beaucoup de m'avoir répondu .

            Apres avoir fait des modifs je me suis redu compte que cela ne marchais pas donc j'ai préféré refaire le programme dans une seule boucle

            Cependant quand j'essaye de compiler je trouve une erreur avec un problème de if

            #include <Servo.h>
            #include <NewPing.h>
            
            
            #define Pin_Declenchement 8
            #define Pin_Echo 7
            #define Distance_maximum 100
            
            NewPing sonar(Pin_Declenchement,Pin_Echo,Distance_maximum); 
            unsigned int temps; //Valeur tjs +
            int distance_de_declenchement = 30;
            int distance_recu;
            int dFace;
            int dDroite;
            int dGauche;
            
            Servo Bougeur1;
            Servo Bougeur2;
            
            
            void loop(){
              distance_recu=sonar.ping_cm();
              if (distance_recu==0);
              distance_recu= 100;
              delay(500);
              dFace=distance_recu;
              if (distance_recu < distance_de_declenchement);
              {
               Bougeur1.write(180);
               Bougeur2.write(0);
               delay(1000);
               Bougeur1.write(0);
               Bougeur2.write(0);
               delay(500);
               Bougeur1.write(90);
               Bougeur2.write(95);;
               distance_recu=sonar.ping_cm();
               if (distance_recu==0);
               distance_recu= 100;
               delay(500);
               dDroite=distance_recu;
               Bougeur1.write(180);
               Bougeur2.write(180);
               delay(1000);
               Bougeur1.write(90);
               Bougeur2.write(95);
               distance_recu=sonar.ping_cm();
               if (distance_recu==0);
               distance_recu= 100;
               delay(500);
               dGauche=distance_recu;
                 if (dGauche>dDroite);
                 {
                 Bougeur1.write(0);
                 Bougeur2.write(0);
                 delay(1000);
                 Bougeur1.write(180);
                 Bougeur2.write(180);
                 }
                 else 
                 {
                 Bougeur1.write(180);
                 Bougeur2.write(180);
                 }
              }
                else 
               {
               Bougeur1.write(180);
               Bougeur2.write(180);
               }
              }

            Voici les erreurs :

            Arduino : 1.8.0 (Windows 10), Carte : "Arduino/Genuino Uno"
            
            D:\Desktop\ROBOT_TPE_\ROBOT_TPE_.ino: In function 'void loop()':
            
            ROBOT_TPE_:60: error: 'else' without a previous 'if'
            
                  else 
            
                  ^
            
            ROBOT_TPE_:66: error: 'else' without a previous 'if'
            
                 else 
            
                 ^
            
            exit status 1
            'else' without a previous 'if'
            
            Ce rapport pourrait être plus détaillé avec
            l'option "Afficher les résultats détaillés de la compilation"
            activée dans Fichier -> Préférences.
            



            • Partager sur Facebook
            • Partager sur Twitter
              18 janvier 2017 à 8:27:07

              Il ne faut pas mettre de point virgule après les if, les for et les while.

              // Code incorrect :
              
              if ( i == 5 );
              {
                  Serial.print("hello");
              }
              
              for ( int i = 0 ; i < 10 ; i++ );
              {
                  Serial.print("hello");
              }
              // Code correct :
              
              if ( i == 5 )
              {
                  Serial.print("hello");
              }
              
              for ( int i = 0 ; i < 10 ; i++ )
              {
                  Serial.print("hello");
              }




              • Partager sur Facebook
              • Partager sur Twitter
                20 janvier 2017 à 1:29:39

                Merci de ta réponse Lorrio

                Bon je vais paraître chiant mais quand j'essaye de compiler le code j’obtiens ;

                Arduino : 1.8.0 (Windows 10), Carte : "Arduino/Genuino Uno"
                
                C:\Users\UTILIS~1\AppData\Local\Temp\ccZNDAQ6.ltrans0.ltrans.o: In function `main':
                
                C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined reference to `setup'
                
                collect2.exe: error: ld returned 1 exit status
                
                exit status 1
                Erreur de compilation pour la carte Arduino/Genuino Uno
                
                

                Du coup je ne sais pas comment résoudre ce problème car certain disent qu'il faut changer le nom et d'autres disent qu'il faut ajouter une nouvelle librairie etc ...

                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2017 à 9:52:04

                  Tout est écrit dans l'erreur : main.cpp:43: undefined reference to `setup' 

                  Il te dit ici qu'il ne trouve pas la fonction setup.

                  Cette fonction est obligatoire pour tous les projets arduino et sert à l'initialisation du système.

                  C'est dans cette fonction que tu devrais initialiser les pins en Input/Ouput, configurer le serial et autre.

                  Si tu n'as pas besoin de faire des initialisations, cette fonction doit quand même être présente, quitte à être vide si nécessaire.

                  void setup() {
                      /* vide (pas de setup nécessaire à ce projet) */
                  }



                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 janvier 2017 à 22:50:23

                    Merci beaucoup tout marche maintenant .

                    je suis désolé de ne pas avoir répondu plus tot

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème encodage robot anti collision

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown