Tu as vu l'erreur ici ?
long TempsEcoule = millis() - startMillis;
long TempsEcouleAvantPause = millis() - startMillis; // <-- c'est startMillisPause ici !
Pour les delay : ton code, tel qu'il est écrit (et que je le comprends), fais le test ObsticalAhead == true. Si oui, il attends 3 secondes, donc il continue sur sa lancée (je ne sais pas laquelle) pendant ces 3 secondes. Ensuite, il oriente le servo.
Si tu veux qu'il tourne pendant 3 secondes, il faut orienter le servo d'abord :
// là on regarde la droite
if (ObsticalAhead == true) { // si ObstacleDevant est vrai donc si le coté gauche détecté, on s'y dirige
nextStep = TurnRight;
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);
}