#include <NewPing.h>
// capteur ultrasonic
#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 cm = 0; //declare une variable cm qui je l'utilise dans la comparaison
boolean PasObstacle;
const int distanceObstacle = 10; // Distance de détection d'un obstable : ici 10 cm
int distance = 0;
//définition des bouttons
int button1 = 20; //vert
int button = 21; //rouge
int z;
int w;
// définition des capteur ultrason
int cap1 = 3; // cap gauche
int cap2 = 4; // cap milieu
int cap3 = 5; // cap milieu
int cap4 = 6; // cap droite
// definition de boche de la carte de puissance
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;// j'ecrit stope à la fin "e" car tt simplement lorque j'ecrit stop elle devient en rouge don je pense que c'est une fonction prédifine.
boolean left;
boolean right;
boolean forward;
boolean backward;
void setup() {
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() {
a = digitalRead(cap1) ; // a recoi la valeur de cap1 (1 ou 0)
b = digitalRead(cap2) ;// b recoi la valeur de cap2 (1 ou 0)
c = digitalRead(cap3) ;// c recoi la valeur de cap3 (1 ou 0)
d = digitalRead(cap4) ;// d recoi la valeur de cap4 (1 ou 0)
right = (((!a) && (d)) && (c || (!b))); // le robot doit tourner à droite lorsque la condition est vrai c'est à dire ( le capteur à droite est en noir OU bien le capteur droite ET le milieu en noir )
left = ((a && (!d)) && (b || (!c))); // le robot doit tourner à gauche lorsque la condition est vrai c'est à dire ( le capteur à gauche est en noir OU bien le capteur gauche ET le milieu en noir )
backward = (((!a) && (!c)) && ((!b) && (!d))); // le robot doit étre marche en arriére lorsque il sort de map c'est à dire les 4 capteur en blanc
forward = ((!a) && (b) && (c) && (!d)); // le robot doit étre marche en avant lorsque le 2 capteur au milieu est en noir
stope = (a && b && c && d); // le robot fait un stop lorsque les 4 capteur en noir
lecture ();// fonction pour just affichier le valeur des capteur en moniteur série
distance = mesureDistance(); // on lit la valeur en cm
if (PasObstacle) {
z = digitalRead(20);
w = digitalRead(21);
if ((stope) && (w == 1)) // si le robot est en stop est on appui sue le bouton rouge il tourne droite
{
droite ();
delay(500);
}
else if ((stope) && (z == 1)) // si le robot est en stop est on appui sue le bouton vert rouge il marche avant
{
avant();
delay(500);
}
if (left)
{
gauche () ;
}
else if (right)
{
droite();
}
else if (forward)
{
avant();
}
else if (backward)
{
arrier ();
}
else if (stope)
{
stopp();
}
}
else
{
stopp();
}
}
unsigned int mesureDistance() { // fonctin pour comparer la distance calculé avec la distanceobstacle
int cm = sonar.ping_cm();
if (cm > distanceObstacle) {
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);
analogWrite(varmot2, 255);
digitalWrite(av2, 1);
digitalWrite(ar2, 0);
}
void droite ()
{
analogWrite(varmot1, 255);
digitalWrite(av1, 1);
digitalWrite(ar1, 0);
analogWrite(varmot2, 100);
digitalWrite(av2, 0);
digitalWrite(ar2, 0);
}
void avant ()
{
analogWrite(varmot1, 250);
digitalWrite(av2, HIGH);
digitalWrite(ar2, LOW);
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);
}