hello everyone
i have a problem with my ultrasonic sensor , i don't know why it doesn't work but for me it sems that a code problem
my project is to creat a line follower robot: for that i use 2 motors and 4 infrared sensor ..
my robot suppose to stop when the 4 sensors in black OR the ultrsonic sensor detects an obstacle in 10 cm
when i put the code for just following line it works perfectliy but when i add the ultrasonic never work and
he don't follows the line anymore
can you please help me
#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);
}