code à partir d'une voiture
Voici la boucle loop
void loop() {
// on regarde la distance, puis on choisit la direction et on roule
checkDistance();
checkDirection();
drive();
}
Dans mon code du 1° bateau j'ai
void loop() { //deux temporisations distinctes, donc deux chronos différents :
long tempsEcoule = millis() - startMillis;
long tempsEcouleAvantPause = millis() - startMillis;
if (tempsEcoule < 600000) MouvementPleineEaux(); // 10 mn * 60 * 1 000
else if (tempsEcoule < 1200000) bordureGauche(); // 20 mn * 60 * 1 000
else if (tempsEcoule < 1800000) MouvementPleineEaux();// 30 mn * 60 * 1 000
else if (tempsEcoule < 2400000) bordureDroite(); // 40 mn * 60 * 1 000
else if (tempsEcouleAvantPause > 3600000) pause(); // 60 mn * 60 * 1 000après 60 mn de fonctionnement mise en pause
else startMillis = millis();
delay (100);
}
Je modifie le code de cette façon pour avoir 10 mn de déplacement aléatoire tel que dans le code de la voiture. puis 10 mn en se collant sur les bords puis après 20 mn de fonctionnement on met en pause pendant 15 mn
void loop() { //deux temporisations distinctes, donc deux chronos différents :
long tempsEcoule = millis() - startMillis;
long tempsEcouleAvantPause = millis() - startMillis;
checkDistance()
if (tempsEcoule < 600000) checkDirection(); // 10 mn * 60 * 1 000
drive();
else if (tempsEcoule < 1200000) checkDirectionVersBordure(); // 20 mn * 60 * 1 000
drive();
else if (tempsEcouleAvantPause > 1800000) pause(); // 30 mn * 60 * 1 000 après 30 mn de fonctionnement mise en pause
else startMillis = millis();
delay (100);
}
La fonction d'origine et la fonction ajoutée : par rapport à l'originale, si je détecte un obstacle , je me dirige vers lui
void checkDirection(){
Serial.println("checking direction");
if(ObsticalAhead ==true){
nextStep = Brake;
drive();
myservo.write(180); // servo va à 180° pour la gauche
delay(400); // attente 15ms pour que le servo aille à la position
checkDistance();
// là on regarde la gauche
if(ObsticalAhead ==false){// si ObstacleDevant est faux donc si le coté gauche est libre, on y va en tournant à gauche
nextStep = TurnLeft;
Serial.println("Next step is TurnLeft");
myservo.write(90);//RAZ de la position du servo
delay(400);
}
else{// à gauche, c'est bloqué. On doit regarder à droite
myservo.write(0); // servo va à 0° pour la droite
delay(800); // attente 15ms pour que le servo aille à la position
checkDistance();
// là on regarde la droite
if(ObsticalAhead ==false){// si ObstacleDevant est faux donc si le coté droit est libre, on y va en tournant à droite
nextStep = TurnRight;
Serial.println("Next step is TurnRight");
myservo.write(90);//RAZ de la position du servo
delay(400);
}
else{//Alors ObstacleDevant est vrai, on doit tourner autour
nextStep = TurnAround;
myservo.write(90);//RAZ de la position du servo
delay(300);
Serial.println("Next step is TurnAround");
}
}
}
else{nextStep = Forward;}//Pas d'obstacle devant , on avance
}
void checkDirectionVersBordure (){
Serial.println("checking direction");
if(ObsticalAhead ==true){
nextStep = Brake;
drive();
myservo.write(180); // servo va à 180° pour la gauche
delay(400); // attente 15ms pour que le servo aille à la position
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");
myservo.write(90);//RAZ de la position du servo
delay(400);
}
else{// à gauche, c'est bloqué. On doit regarder à droite
myservo.write(0); // servo va à 0° pour la droite
delay(800); // attente 15ms pour que le servo aille à la position
checkDistance();
// 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;
Serial.println("Next step is TurnRight");
myservo.write(90);//RAZ de la position du servo
delay(400);
}
else{//Alors ObstacleDevant est vrai, on doit tourner autour Aucun bord détecté, obstacle au milieu de la piscine
nextStep = TurnAround;
myservo.write(90);//RAZ de la position du servo
delay(300);
Serial.println("Next step is TurnAround");
}
}
}
else{nextStep = Forward;}//Pas d'obstacle devant , on avance
}
Le code est validé ?