hehe
du bas de mes 46 balais je peux toiser ton grand age ![]()
Oui pour la machine à état, mais pour moi il y a 4 états à ton système, et non trois : AUTO_ON, AUTO_OFF, MARCHE_FORCEE, ARRET_FORCE
à côté de ta machine à états, tu as 5 composants hardware externes à gérer :
un bouton
un relais de pompe
une led
un RTC
un LCD
ce qui cloche dans ton approche, c'est qu'à partir d'un événement (par exemple bouton enfonce) tu veux enchaîner toutes les actions par une suite d'instructions dans la même fonction.
Il est plus simple de faire des fonctions dédiées à chacun des 5 périphériques.
Une même fonction ne devrait pas contenir des actions sur plusieurs périphériques.
Ton loop() pourrait par exemple ressembler à
void loop()
{
gereRTC();
gererBouton();
gererPompe();
gererLed();
gereLCD();
}
gererRTC : interroge le RTC une fois par seconde et met à jour une variable globale 'heure_courante'
gererBouton : évalue l'état du bouton et place le résultat dans une variable globale.
gererPompe : evalue la machine à état, en fonction de l'état courant, l'état du bouton et la valeur de l'heure courante, et dans la foulée agit si nécessaire sur le relais.
gererLed : pilote l'allumage/extinction de la led en fonction de l'état du système
gererLCD : rafraichit les données affichées si nécessaire