bonjour tout le monde
J'ai un problème avec mon capteur à ultrasons, je ne sais pas pourquoi cela ne fonctionne pas je pense c'est un problème de code
mon projet est de créer un robot suiveur de ligne: pour cela, j'utilise 2 moteurs et 4 capteurs infrarouges.
mon robot suppose de s'arrêter lorsque les 4 capteurs en noir OU le capteur ultrsonique détectent un obstacle en 10 cm
quand je mets le code pour juste suivre la ligne cela fonctionne parfaitement mais quand j’ajoute les ultrasons ne fonctionnent jamais et il ne suit plus la ligne
Pouvez-vous m'aider s'il vous plaît
#include <NewPing.h>
// ****************************************
// Déclaration des constantes et variables
// ****************************************
// capteur de distance
#define trigPin 12 // Pin Trigger branchée sur la broche 12 de l'arduino
#define echoPin 11 // Pin Echo branchée sur la broche 11 de l'arduino
NewPing sonar(trigPin, echoPin);
int maximumDistance = 50; // distance Maximale acceptée (de 0-450 cm)
int minimumDistance = 0; // distance Minimale acceptée (en cm)
int cm = 0;
boolean PasObstacle = true; // valeur à O ou true si pas d'obstacle détecté sinon la valeur prend 1
const int distanceObstacle = 10; // Distance de détection d'un obstable : ici 15 cm
int distance = 0;
int attenteCateur = 200;
//définition des bouttons
int button1=1; //vert
int button=2; //rouge
int z;
int w;
int cap1=3;
int cap2=4;
int cap3=5;
int cap4=6;
int varmot2=9;
int av2=7; //avant
int ar2=8; //arrière
int varmot1=14;
int av1=15; //avant
int ar1=16;
boolean a;
boolean b; //les deux capteurs au milieu
boolean c; //les deux capteurs au milieu
boolean d;
boolean stope;
boolean left;
boolean right;
boolean forward;
boolean backward;
void setup() {
// dir.attach(13);
//dir.write(90);
pinMode(varmot1,OUTPUT);
pinMode(av1,OUTPUT);
pinMode(ar1,OUTPUT);
pinMode(varmot2,OUTPUT);
pinMode(av2,OUTPUT);
pinMode(ar2,OUTPUT);
Serial.begin(9600);
pinMode(button,INPUT);
pinMode(button1,INPUT);
}
void loop() {
int val1,val2,val3,val4 ;
val1 = digitalRead(cap1) ;
a = val1 ; //< 500;
val2 = digitalRead(cap2) ;
b = val2 ; //< 500;
val3 = digitalRead(cap3) ;
c = val3 ; //< 500;
val4 = digitalRead(cap4) ;
d = val4 ; //< 500;
right= (((!a)&&(d))&&(c||(!b))); //(((!b)&&(!a))&& d);
left= ((a&&(!d))&&(b||(!c))); //(((!d)&& a) &&(!c));
backward= (((!a)&&(!c))&&((!b)&&(!d))); //||(b&&d)))||((!b)&&(!d)&&a&&c);
forward= ((!a)&&(b)&&(c)&&(!d)); //||(a&&d)))||(a&&(!b)&&(!c)&&d);
stope= (a&&b&&c&&d);
lecture ();
distance = mesureDistance(); // on lit la valeur en cm
if (PasObstacle) {
z=digitalRead(1);
w=digitalRead(2);
if ((stope)&&(w==1))
{
droite ();
delay(500);
}
else if ((stope)&&(z==1))
{
avant();
delay(500);
}
if (left)
{
gauche () ;
}
else if (right)
{
droite();
}
else if (forward)
{
avant();
}
else if (backward)
{
arrier ();
}
else if (stope)
{
stopp();}
}
else
{
stopp();}
// on lit la valeur en cm
}
unsigned int mesureDistance() {
// déclaration des variables locales
int cm = sonar.ping_cm();
if (cm > distanceObstacle || cm <= minimumDistance) {
PasObstacle = true; // on renvoie true s'il n'y pas d'obstacle
}
else {
PasObstacle = false; // on renvoie false s'il y a un obstacle
}
return cm; // retourne la distance du capteur en cm
}
void lecture ()
{
Serial.print(a);
Serial.print(b);
Serial.print(c);
Serial.println(d);
}
void gauche ()
{
analogWrite(varmot1,100);
digitalWrite(av1,0);
digitalWrite(ar1,0);
//dir.write(50);
analogWrite(varmot2,255);
digitalWrite(av2,1);
digitalWrite(ar2,0);
}
void droite ()
{
analogWrite(varmot1,255);
digitalWrite(av1,1);
digitalWrite(ar1,0);
//dir.write(130);
analogWrite(varmot2,100);
digitalWrite(av2,0);
digitalWrite(ar2,0);
}
void avant ()
{
analogWrite(varmot1,250);
digitalWrite(av2,HIGH);
digitalWrite(ar2,LOW);
//dir.write(90);
analogWrite(varmot2,250);
digitalWrite(av1,1);
digitalWrite(ar1,0);
}
void arrier ()
{
analogWrite(varmot1,150);
digitalWrite(av2,LOW);
digitalWrite(ar2,HIGH);
analogWrite(varmot2,150);
digitalWrite(av1,0);
digitalWrite(ar1,1);
}
void stopp ()
{
digitalWrite(av1,LOW);
digitalWrite(ar1,LOW);
digitalWrite(av2,LOW);
digitalWrite(ar2,LOW);
}