Partage
  • Partager sur Facebook
  • Partager sur Twitter

robot à ultrason avec une erreur

no match for 'operator<' (operand types are 'NewPing' and 'int')

    15 septembre 2018 à 21:30:11

    Bonjour à toutes et tous,

    Cherchant à développer un robot autonome, j'ai commencé à développer un robot symple avec un capteur à ultrason et un servo.

    A l'usage, je me suis rendu compte de certaine failles de détection, donc j'ai rajouté 2 capteurs ultrason complémentaires pour affiner la détection latérale permettant de longer des pans de mur tout en restant à une distance minimum.

    Le problème ce pose à ce stade, j'ai une erreur que je n'arrive pas à regler de type:

    "no match for 'operator<' (operand types are 'NewPing' and 'int')"

    Voici le code:

    Par avance merci pour votre aide.

      
        #include <Servo.h>
        #include <NewPing.h>
       
      
        //DÉCLARATIONS EN LIEN AVEC LES MOTEURS 
          #define mgV 3
          #define mdV 11
          #define mgS 12
          #define mdS 13
          #define brkD 9
          #define brkG 8
          char valSerie;
     
        //DÉCLARATIONS SONAR AVANT
        #define echoSonar 5
        #define trigSonar  6
        
        //DECLARATION SONAR SECU DROITE
        #define echoSecuD  1 
        #define trigSecuD  0
        
        //DECLARATION SONAR SECU GAUCHE
        #define echoSecuG  4 
        #define trigSecuG  2
        
        //DECLARATION DE LA DISTANCE MAXIMUM
        #define MAX_DISTANCE 200
        
        // DECLARATION DES MESURES DE DISTANCE
        NewPing distanceAvant (echoSonar, trigSonar,MAX_DISTANCE);
        NewPing distanceDroite (echoSonar, trigSonar,MAX_DISTANCE);
        NewPing distanceGauche (echoSonar, trigSonar,MAX_DISTANCE);
        NewPing securiteDroite (echoSecuD, trigSecuD, MAX_DISTANCE);
        NewPing securiteGauche (echoSecuD, trigSecuD, MAX_DISTANCE);
        float intervalle;
        float intervallesecu;
        
        //CREATION DE L'OBJET SERVO
        Servo myservo; 
        const int delay_time = 250; //Temps accordé au servo pour la mesure de la distance de chaque côté 250 ms
       
        //SETUP 
        void setup()
        {
          //Initialisation de la communication série
          Serial.begin(9600);
          
          //Initialisation des broches des moteurs
         
          pinMode(mgS,OUTPUT);
          pinMode(mdS,OUTPUT);
          pinMode(brkD,OUTPUT);
          pinMode(brkG,OUTPUT);
    
          //Initialisation des capteurs ultrasons
          
        unsigned int distanceAvant_val = 0;
        unsigned int distanceGauche_val = 0;
        unsigned int distanceDroite_val = 0;
        unsigned int securiteDroite_val = 0;
        unsigned int securiteGauche_val = 0;
          
          //Initialisation du servomoteur
          myservo.attach(7);
          myservo.write(80);
          
        }
        //FONCTIONS POUR LES MOTEURS 
        void avancer()
        {
        
        digitalWrite(mgS,HIGH);
        digitalWrite(mdS,HIGH);
        digitalWrite(brkG,LOW);
        digitalWrite(brkD,LOW);
        analogWrite(mgV,200);
        analogWrite(mdV,200);
        }
        void gauche()
        {
          
        digitalWrite(mgS,HIGH);
        digitalWrite(mdS,LOW);
        digitalWrite(brkG,LOW);
        digitalWrite(brkD,LOW);
        analogWrite(mgV,150);
        analogWrite(mdV,150);
        }
        void droite()
        {
         
        digitalWrite(mgS,LOW);
        digitalWrite(mdS,HIGH);
        digitalWrite(brkG,LOW);
        digitalWrite(brkD,LOW);
        analogWrite(mgV,150);
        analogWrite(mdV,150);
        }
        void reculer()
        {
         
        digitalWrite(mgS,LOW);
        digitalWrite(mdS,LOW);
        digitalWrite(brkG,LOW);
        digitalWrite(brkD,LOW);
        analogWrite(mgV,150);
        analogWrite(mdV,150);
        }
        void arreter()
        {
         
        digitalWrite(mgS,LOW);
        digitalWrite(mdS,LOW);
        digitalWrite(brkG,HIGH);
        digitalWrite(brkD,HIGH);
        analogWrite(mgV,0);
        analogWrite(mdV,0);  
        }
        void pivoterGauche()
        {
          
        digitalWrite(mgS,HIGH);
        digitalWrite(mdS,LOW);
        digitalWrite(brkG,LOW);
        digitalWrite(brkD,LOW);
        analogWrite(mgV,200);
        analogWrite(mdV,200);
        }
        void pivoterDroite()
        {
         
        digitalWrite(mgS,LOW);
        digitalWrite(mdS,HIGH);
        digitalWrite(brkG,LOW);
        digitalWrite(brkD,LOW);
        analogWrite(mgV,200);
        analogWrite(mdV,200);
        }
        //FONCTIONS POUR LE MODE ULTRASON 
        void mesurerDistanceAvant()
        {
          unsigned int distanceAvant_val = distanceAvant.ping();
          myservo.write(80);
          delay(delay_time);
          distanceAvant_val = intervalle;
          Serial.println("Distance avant:");
          Serial.println(intervalle);
          
        }
        void mesurerDistanceGauche()
        {
          myservo.write(170);
          delay(delay_time);
          intervalle = distanceGauche.ping();
          Serial.println("Distance gauche:");
          Serial.println(intervalle);
          
        }
        void mesurerDistanceDroite()
        {
          myservo.write(10);
          delay(delay_time);
          intervalle = distanceDroite.ping();
          Serial.println("Distance droite:");
          Serial.println(intervalle);
          
        }
    
        //Mesure des distance de securitées
    
         void mesurerDistanceSecuDroite()
        {
          intervallesecu = securiteDroite.ping();
          Serial.println("Distance secu droite:");
          Serial.println(intervallesecu);
          
        }
    
        void mesurerDistanceSecuGauche()
        {
          intervallesecu = securiteGauche.ping();
          Serial.println("Distance secu gauche:");
          Serial.println(intervallesecu);
         
        }
    
        //Actions en fonction des distances de sécurités mesurèes
    
        void modeUltrasonSecu()
        {
         mesurerDistanceSecuDroite();
         delay(delay_time);
         mesurerDistanceSecuGauche();
         delay(delay_time);
    
         if(securiteDroite < 10 && securiteDroite < securiteGauche)
         {
          gauche();
          delay(1);
      
         }
         else if (securiteGauche < 10 && securiteGauche < securiteDroite)
         {
          droite();
          delay(1);
        //  
         }
        else
        {
          avancer();
        }
       }
        
        //Actions en fonction des distances mesurées
        void modeUltrason()
        {
          mesurerDistanceAvant();
          modeUltrasonSecu();
          
          if(distanceAvant < 50) //Si la distance avant est de moins de 50cm
          {
            reculer();
            delay(5);
            arreter();
    
            mesurerDistanceAvant();
            
            if(distanceAvant < 10) //Si la distance avant est de moins de 10cm
            {
              reculer();
              delay(100);
            }
            mesurerDistanceGauche();
            delay(delay_time);
            mesurerDistanceDroite();
            delay(delay_time);
            
            if (distanceGauche < 25 && distanceDroite < 25 ) //Si la distance à gauche et la distance à droite sont de moins de 25cm
            {
              reculer();
              delay(500);
              pivoterGauche();
              delay(25);
            }
            else if(distanceGauche > distanceDroite) //Si la distance gauche est plus grande que la distance droite
            {
              pivoterGauche();
              delay(25);
            }
            else if(distanceGauche < distanceDroite) //Si la distance gauche est plus petite ou égale à la distance droite
            {
              pivoterDroite();
              delay(25);
            }
    
           
          }
          else //Si la distance avant est de plus de 50cm
          {
            avancer();
          }
        }
      
        //BOUCLE 
        void loop()
        {
     
            modeUltrason();
        
        }



    • Partager sur Facebook
    • Partager sur Twitter
      15 septembre 2018 à 22:20:45

      Hello,

      C'est parce que tu compares 2 types qui sont différents, à savoir NewPing et int. Par exemple ici securiteDroite < 10 ou ici distanceAvant < 50. Et il y en a plein comme ça dans ton code.

      Utilise les fonctions ping selon tes besoins (ms, inches ou centimètres) pour récupérer une valeur.

      • Partager sur Facebook
      • Partager sur Twitter

      ...

        16 septembre 2018 à 14:11:57

        Merci beaucoup pour ton aide, je vais me repencher dessus.

        Je voulais utiliser la bibliothèque NewPing pour les fonctions de distance de sécurité latérales pour les différencier de la distance de détection d'obstacle.

        Pour toi quel serait le meilleur moyen de résoudre le problème, j'ai un-peu de mal à me projeter dans la correction de mon code.

        Je vais le laisser de coté pour quelques jours avant de m'y replonger et de tout remettre à plat, et revoir le fonctionnement de la bibliothèque NewPing (que je ne maitrise pas pleinement.

        Bon dimanche

        Steph

        -
        Edité par StephanBrunstein 16 septembre 2018 à 14:19:28

        • Partager sur Facebook
        • Partager sur Twitter

        robot à ultrason avec une erreur

        × 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