Bonjour,
Je suis débitant en arduino et je bloque sur le programme de mon robot de piscine sur ESP8266
Tout fonctionne bien tant que mon délais temps ne dépasse pas 8000.
La fonction " client.publish("ESP_Robot_Piscine/Avancement%", Avancement);" marche bien
Si je modifie les valeurs dans "temps=(random(3000,6000)); " en passant à temps=(random(30000,60000)); je n'ai pas de message sur mon serveur mqtt.
J'ai vu effectivement que delay peut etre bloquant et que l'on peut utiliser millis à la place mais la je ne trouve pas car en plus je suis dans une boucle for.
Merci par avance de votre aide
Stéphane
void loop() {
client.loop();
BP=digitalRead(BPMA);
digitalWrite(LEDOFF, HIGH);
digitalWrite(LEDON, LOW);
if ((BP)==1) {
Serial.println("**** DEMARRAGE DU CYCLE ****");
client.publish("ESP_Robot_Piscine/Etat", "1");
digitalWrite(LEDOFF, LOW);
digitalWrite(LEDON, HIGH);
digitalWrite(Pompe, LOW); // Attention commande inversée Low à la place de High
Serial.println("Pompe en marche");
delay(6000);
for (int i = 1; i <= N; i++) {
digitalWrite(MAV, LOW);
digitalWrite(MAR, HIGH);
Serial.println("Marche AVANT");
temps=(random(3000,6000)); // A modifier en fonction taille piscine et si plus fond que paroies
delay(temps);
// Arret de la pompe 8s pour faire tourner le robot de 90°
if (i==N/3) {
digitalWrite(Pompe, HIGH);
Serial.println("PAUSE 1 POMPE POUR TOURNER");
delay(8000);
digitalWrite(Pompe, LOW);
}
// Arret de la pompe 8s pour faire tourner le robot de 90°
if (i==N/2) {
digitalWrite(Pompe, HIGH);
Serial.println("PAUSE 2 POMPE POUR TOURNER");
delay(8000);
digitalWrite(Pompe, LOW);
}
digitalWrite(MAV, HIGH);
digitalWrite(MAR, HIGH);
delay(500);
digitalWrite(MAV, HIGH);
digitalWrite(MAR, LOW);
Serial.println("Marche ARRIERE");
temps=(random(3000,6000)); // A modifier en fonction taille piscine et si plus fond que paroies
Serial.print(temps/1000);
Serial.println("sec");
delay(temps);
digitalWrite(MAV, HIGH);
digitalWrite(MAR, HIGH);
Serial.println("PAUSE");
delay(500);
Serial.print("i= ");
Serial.println(i);
Serial.print("%= ");
Serial.print(i*100/N);
Serial.println("%");
// Convert the value to a char array
char Avancement[8];
dtostrf(i*100/N, 1, 0, Avancement);
client.publish("ESP_Robot_Piscine/Avancement%", Avancement);
}
Serial.println("**** FIN DU CYCLE ****");
client.publish("ESP_Robot_Piscine/Etat", "0");
client.publish("ESP_Robot_Piscine/Avancement%", "0");
}
digitalWrite(LEDOFF, HIGH);
digitalWrite(LEDON, LOW);
digitalWrite(Pompe, HIGH);
digitalWrite(MAV, HIGH);
digitalWrite(MAR, HIGH);
}