Je pense que tu peux enlever la ligne 'inches = ...'. Pour les cm ça a l'air bon.
La fonction pause n'utilise que des variables locales : pense à déclarer tes variables startMillis et startMillisPause dans l'entête.
En lecture rapide, je n'ai pas vu de différence entre les fonctions checkDirection et checkDirectionVersBordure, mais ça viendra peut-être plus tard.
Pour un bateau, je ne sais pas si éteindre les moteurs suffira à l'arrêter :
case Brake:
leftMotor.Drive(0);
rightMotor.Drive(0);
Serial.println(" stopped");
Il faudrait peut-être faire un reverse pendant une ou deux secondes avant d'arrêter les moteurs ?
case Brake:
leftMotor.Drive(-255);
rightMotor.Drive(-255);
delay(1500);
leftMotor.Drive(0);
rightMotor.Drive(0);
Serial.println(" stopped");
Tu n'as pas mis de break à la dernière condition du switch : ce n'est peut-être pas grave vu que c'est la dernière, mais ça ne fait pas de mal d'en mettre un au cas où tu en ajoutes une autre par la suite...
Dans le setup, cette ligne ne sert à rien :
Directions nextStep = Forward;
Les variables t1, t2 et pulse_width pourraient être locales à la fonction checkDistance plutôt que globales. Enfin certaines variables ne sont pas déclarées : tempsEcoule, tempsEcouleAvantPause ni calculées ou mises à jour : ça va coincer.
Dans ta loop, je te conseille de mettre des accolades même s'il n'y a qu'une instruction dans le test, ça aide à voir ce qui est fait. Voici à quoi ta loop est équivalente :
void loop() {
// on regarde la distance, puis on choisit la direction et on roule
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 de 10 mn
}
else startMillis = millis();
delay (100);
}
Les appels à drive sont mal placés : je pense que ça ne compilera pas.
Je suppose que tu veux faire ça :
void loop() {
// on regarde la distance, puis on choisit la direction et on roule
checkDistance()
--> Mettre ici à jour les variables tempsEcoule et tempsEcouleAvantPause !!
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 de 10 mn
}
else startMillis = millis();
delay (100);
}