Machine à état, ou pas ?

Es-tu certain que c'est ce que fait ton code?
Essaie de suivre à la main le déroulement de ton code.

@fdufnews Ok
Note : C'est ce que je veux que le code fasse, pas forcement ce qu'il fait...

ha ouai, non j'ai quand même une déontologie et je n'aime pas delay.
Déjà que sur un de mes codes je ne laisserais pas ce while, alors utiliser delay :rofl:
Après comme je mets un condensateur sur mes boutons, je n'ai pas ce soucis :slight_smile:

ba je t'ai montré une façon de faire :slight_smile:
Après ça dépend de ce que tu veux faire, mais delay c'est un while.

Donc ton code est complétement faux :frowning:
puisqu'il ne teint pas compte de la condition de changement d'état :slight_smile:

Salut @terwal

Je ne comprend pas... Qu’appelez vous la "condition" ?

Je vais suivre les conseils de @fdufnews et faire mon algorithme sur papier, pour comprendre ce que fait mon code.

Cordialement
Pandaroux007

Ce que j'appel la condition, c'est ce que tu as défini pour changer d'état.
A priori tu as choisi un appuis sur ton bouton, donc du devrais changer d'état uniquement lorsque tu remplis cette condition.

Oui très bonne idée.

Je rentre de mon séjour dans la baie de somme où j'ai fait des milliers de photos. Mais je vous avoue que j'ai le moral dans les chaussettes car j'ai fait tomber mon EOS 5D MARK IV dans la mer, j'ai eu beau le rattraper rapidement, il ne s'allume plus. :cry:

Pour le pauvre @pandaroux007 je viens de faire ce wokwi, je pense qu'on l'a laissé chercher assez longtemps. Donc voilà Rémi :

Pas de librairie ni de condensateur, donc c'est du bricolage, il ne faut pas appuyer trop longtemps sur le bouton !
Après 6 heures de route, j'ai la gueule dans le c... (excusez-moi l'expression, c'est du jargon militaire) donc pardon par avance pour les fautes d'orthographe ou autre.

Voilà Rémi à toi de nous expliquer ce code.

Bonne soirée.

L’anti rebond et plus généralement la gestion du bouton est un sujet à part entière indépendant de ta question de départ sur qu'est ce qu'une machine d'état.

La machine a état tu l'as bien codé dans ton dernier code.
Tu as un nombre limité d'état dans lequel le système peut être et suivant l'état courant tu as des actions bien précises qui sont mis en œuvre ; chaque état du système est connu et maitrisé. (Il ne manque que le case default qui est très important pour maitriser l'état du système même en cas de bug)

Ce qui te manque ce sont les transitions qui sont des évènements avec des règles qui vont conditionner le changement d'état.

Toi tu veux que ça change d'état à l'appui sur un bouton, ok ; l'évènement "appui détecté" devra appeler une transition où tu définira le changement de l’état courant de la machine d'état qui est déjà définie.
La détection de l'appui sur le bouton (avec bien sur un anti rebond) se fera :
-soit en utilisant la librairie qui va bien et qui déclenchera un callBack (une fonction que tu souhaites exécuter quand la librairie détectera le clic sur le bouton). Tu donnes le nom de la fonction callBack à la librairie et c'est la lib qui se débrouille pour l’exécuter.
-soit en gérant toi même l'anti rebond, par exemple avec une autre machine d'état propre à la gestion du bouton qui aurait par exemple les états BT_LIBRE, BT_ANTIREBOND et BT_APPUYE.
-soit en mettant un condensateur pour faire anti rebond hardware

ha merde, tu as attendu que ton appareille soit bien sec ?
Tu as quoi comme objectif pour aller avec ?

sinon j'ai modifié mon wokwi(édité) pour désactiver/commenter l'animation des LEDs superflue :slight_smile:
Bien évidement même si on gère l'anti-rebond différemment, mon code est forcément très similaire à celui de @philippe86220

Démontage, rinçage à l'eau distillée, séchage, par contre il ne faut pas attendre, car le sel ronge tout, même l'aluminium.

Oui bien sûr mais malheureusement il ne s'allume plus. J'ai plus qu'à en acheter un autre mais vu le prix, je m'en veux énormément.
Des objectifs j'en ai plusieurs

Merci @hbachetti
Je vais essayer de le démonter.
De toutes façons perdu pour perdu...
Mais j'avoue que ce type d'intervention ne m'a pas effleuré l'esprit car je doute beaucoup de mes compétences dans ce domaine :wink:

Merci je vais essayer

Oui, tout à fait.
Enlève la batterie, la carte SD, démonte au maximum tout ce que tu peux pour permettre le rinçage et aussi le séchage.

C'est surtout une question d'outillage. Avoir les bons tournevis ...

Le point de départ est l'excellent tuto de @J-M-L.
Mais comme Rémi ne comprends pas trop le principe de fonctionnement d'une machine à état et qu'il pense à juste titre que c'est plus simple à assimiler sans une librairie de gestion des boutons. Il n'y en a pas dans mon wokwi.

Ps : dans le tuto de @J-M-L, le point de départ c'est toutes leds éteintes ...

Merci @hbachetti

Ouai je me doute, je parlais si tu utilisais un téléobjectif pour les photos ornithologique, ou des phoques.

Oui, tu remarquera que j'en n'utilise pas non plus, puisque je suis partis du programme de @pandaroux007
Mais ce n'était pas un reproche!

Oui, mais comme je ne suis pas partis du tuto de @J-M-L mais du programme de @pandaroux007 , j'essaye de respecter ce qu'il a fait.

Pour le coup, je pense qu'il a tord, rajouter l'anti-rebond est au contraire plus compliqué pour comprendre les machines à état, surtout si on fait comme le recommande @petitours, un deuxième machine à état.

D'ailleurs, même si notre machine à état est plutôt équivalente pour ne pas dire équivalente, je vais là supprimer de mes commentaires, pour ne pas le perturber.

Pour les phoques, oiseaux, paysages...
Bonne soirée

ok, laisse tombé, c'est pas grave :slight_smile:

Je ne lui recommande pas de faire une machine d’état pour gérer l'anti rebond, je l'ai évoqué pour qu'il comprenne bien que la gestion du bouton a strictement rien à voir avec la notion de machine d’état qu'il utilise pour gérer l’état des leds.

petit détail sur l'anti rebond proposé dans le Wokwi

delay(500);
while (digitalRead(pinBtn) == BOUTON_APPUYE){;}    //si le BP à été appuyé 

ne protège pas d'un rebond au moment où on lâche le bouton.

Sur le même principe ceci le ferait sans changer le comportement

delay(200);
while (digitalRead(pinBtn) == BOUTON_APPUYE){;}    //si le BP à été appuyé
delay(200); 

Bonsoir @petitours

C’est bien possible mais mon objectif est surtout de faire comprendre à @pandaroux007 le principe d’une machine à état et ceci le plus simplement possible. Donc ici la gestion du bouton relève du bricolage mais je note votre remarque qui me semble justifiée :wink:

Merci