La suite
void checkDirectionVersBordureGauche () {
Serial.println("checking direction");
if (ObsticalAhead == true) { // on a un obstacle devant, on coupe les moteurs et on regarde à gauche en premier
nextStep = Brake;
drive();
myservo.write(180); // servo va à 180° pour la gauche
delay(400); // attente 15ms pour que le servo aille à la position
nextStep = TurnLeft; // On force le bateau à tourner vers la gauche jusqu'au contact Echo
checkDistance();
// là on regarde la gauche
if (ObsticalAhead == true) { // si ObstacleDevant est vrai donc si le coté gauche détecté, on s'y dirige
nextStep = TurnLeft;
Serial.println("Next step is TurnLeft");
delay (3000); // Si le bateau dépasse l'angle saillant de la piscine
// on le force à continuer à tourner encore pendant 3 sec pour le recoller au bord
myservo.write(90);//RAZ de la position du servo
delay(400);
}
/*le radar est redevenu droit et le bateau suit le bord gauche
Il arrive à l'angle de la piscine, il détecte le bord devant , le bateau doit donc tourner sur
la droite tant qu'il détecte le bord devant puis la tete tourne à gauche et le bateau va à gauche
*/
if (ObsticalAhead == true) { // si ObstacleDevant est vrai donc si l'angle du bord en face détecté, on tourne à droite
nextStep = TurnRight;
Serial.println("Next step is TurnRight pour 2 sec");
delay (2000); // le bateau tourne dans l'angle à droite de la piscine pendant 2 sec
// on le recolle au bord gauche
nextStep = TurnLeft;
myservo.write(90);//RAZ de la position du servo
delay(3000);
}
else { //Alors ObstacleDevant est vrai, on doit tourner autour, bouée dans la piscine par exemple
nextStep = TurnAround;
myservo.write(90);//RAZ de la position du servo
delay(300);
Serial.println("Next step is on evite");
}
}
void checkDirectionVersBordureDroite () {
// là on regarde la droite
if (ObsticalAhead == true) { // si ObstacleDevant est vrai donc si le coté droit détecté, on s'y dirige
nextStep = TurnRight;
drive();
Serial.println("Next step is TurnRight");
delay (3000); // le bateau va dépasser l'angle saillant de la piscine
// on le force à continuer à tourner encore pendant 3 sec
// pour le recoller au bord
myservo.write(90);//RAZ de la position du servo
delay(3000);
}
/*le radar est redevenu droit et le bateau suit le bord gauche
Il arrive à l'angle de la piscine, il détecte le bord devant , le bateau doit donc tourner sur
la droite tant qu'il détecte le bord devant puis la tete tourne à gauche et le bateau va à gauche
*/
if (ObsticalAhead == true) { // si ObstacleDevant est vrai donc si l'angle du bord en face détecté, on tourne à gauche
nextStep = TurnLeft;
Serial.println("Next step is TurnLeft pour 2 sec");
delay (2000); // le bateau tourne dans l'angle à gauche de la piscine pendant 2 sec
// on le recolle au bord droit
nextStep = TurnRight;
myservo.write(90);//RAZ de la position du servo
delay(400);
}
else { //Alors ObstacleDevant est vrai, on doit tourner autour, bouée dans la piscine par exemple
nextStep = TurnAround;
myservo.write(90);//RAZ de la position du servo
delay(300);
Serial.println("Next step is on evite");
}
else {
nextStep = Forward; //Pas d'obstacle devant , on avance
}
}
void drive() {
switch (nextStep) {
case Forward:
leftMotor.Drive(255);
rightMotor.Drive(255);
Serial.println("Forward");
break;
case TurnLeft:
leftMotor.Drive(-255);
rightMotor.Drive(255);
Serial.println(" TurnLeft");
delay(400);
break;
case TurnRight:
leftMotor.Drive(255);
rightMotor.Drive(-255);
Serial.println(" TurnRight");
delay(400);
break;
case TurnAround:
leftMotor.Drive(255);
rightMotor.Drive(-255);
Serial.println(" TurnAround");
delay(600);
break;
case Brake:
leftMotor.Drive(-255);
rightMotor.Drive(-255);
delay(1500);
leftMotor.Drive(0);
rightMotor.Drive(0);
Serial.println(" stopped");
}
}
[/code]