Bateau autonome Coller aux parois d'une piscine 1/2

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]