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