Utilisation de boutons avec 2 fonctions selon machine à état

Bonsoir,

J'ai un programme sur esp32 avec 6 boutons et LCD 20x4, j'utilise une machine à état MODE:
la machine à état:

enum {ARRET, VEILLE, MANUEL, JOUR, NUIT}

Sur le mode MANUEL j'ai 4 boutons qui sont dédier pour faire de tests moteurs.

Maintenant je voudrai rajouter une machine à état PARAMETRE pour modifier des paramètres de fonctionnement et la machine à état que je veux créer:

enum {TEMPO, SEUIL, SEUIL-JOUR, SEUIL-NUIT}

Et donc je voudrai savoir si c'est possible d'utiliser les 4 boutons avec des fonctions différentes dans cette machine à état .

Merci

Oui, c'est toi qui décide de ce que font les boutons en fonction de l'état dans lequel tu te trouve.
Je ne vois pas sur quel point technique tu bloque.
Peut tu donner plus d'information sur ce que tu comprends pas ou ce qui bloque dans ton programme.

Je ne bloque pas mais je voulais être sure que c'était possible.

Car il faut que je rajoute pas mal de lignes dans le code juste pour cette machine à état et vu que je suis novice je me lance pas avant d'avoir un avis car je vais finir par me perdre dans mon code.

Merci pour la réponse, maintenant je vais pouvoir préparer la mise en place de cette machine PARAMETRE

Comme ça c'est compliqué de donné un avis éclairé, mais j'ai l'impression que tes deux machines sont liées, peut être peut tu en avoir qu'une.

La première machine est utilisé pour le fonctionnement et la deuxième sera utilisé pour modifier certains paramètres depuis le LCD.

Juste en lisant les noms que tu donnes à tes états:
{ARRET, VEILLE, MANUEL, JOUR, NUIT} ça ressemble effectivement à des états, c-à-d des fonctionnements différents selon l'état en cours,
{TEMPO, SEUIL, SEUIL-JOUR, SEUIL-NUIT} ça par contre ça ne ressemble pas à des états, on dirait plus le nom de paramètres.
Alors peut-être TEMPO est bien un état dans lequel tu règles une temporisation, pareil pour SEUIL tu règles un seuil - tout ça avec les mêmes boutons, donc changer d'état c'est changer le rôles des boutons (ils agissent sur des paramètres différents).
Mais attention, d'après les noms, que ce ne soient pas juste des noms de paramètres.
Ce que je veux dire, ce que quand on veut créer une machine à états, il faut que les états soient vraiment des états :roll_eyes: c-à-d une liste de situations dans lesquelles le système va se comporter de façon différente. Pour la seconde liste d'états, j'aurais choisi les noms REGLAGE_TEMPO, REGLAGE_SEUIL, etc c'est plus long mais plus explicite.

En résumé :grinning: sois sûr de bien discerner ce qui est état de ce qui est transition, événement, valeur, fonction ou autres. Un état, ça persiste. Jusqu'à ce qu'un événement cause un changement d'état.

Oui c'est vrai qu'utiliser réglage_x sera plus lisible.

Pour passer le programme en paramètre donc machine à état PARAMÈTRE, ça sera sur le déclenchement d'un interrupteur ON/OFF et je pensais utiliser une variable qui passe a 1 lorsque l'interrupteur est ON pour bloquer la machine à état MODE.

C’est toujours plus simple de n’avoir qu’une seule machine à etat sur un système donné

Ok, donc il faut que j'intègre mes fonctions supplémentaires dans la machine à état existante?

En général si une machine à état s'arrête pour laisser une autre se mettre en route.
C'est bien que tu as une seul machine à état.
Si par contre pendant que tu es entrain de modifier tes paramètres, tu peux changer d'état de la première, alors effectivement il te faut deux machines à état et bien passer dans les deux machines.

Alors si la machine à état PARAMÈTRE est active, il faut que la machine à état MODE soit off .
La machine PARAMÈTRE c'est pour permettre d'ajuster les réglages pour optimiser le fonctionnement.

C'est une question ou une affirmation ?

C'est une affirmation

Bonjour

pourquoi ne peut il pas y avoir un état réglages dans cette liste ?

Pour moi la modif des paramètres est un état de la machine globale sauf si la machine globale doit faire des trucs asynchrones ou peut changer d’état pendant qu’on joue avec les paramètres

Ok, je vais rajouter les fonctions de paramètres dans la machine à état existantes.
Ça sera plus simple à déployer pour mon niveau

D'accord avec JML, on peut concevoir que les changement de paramètres se fassent pendant que la machine fonctionne, sans perturber son état ARRET/VEILLE.MANUEL etc

Bon je suis entrain de voir pour mette les nouveau paramètre, mais en réfléchissant je me dis que si je modifie un para avec les boutons de type : int seuil = 50; qui est donc déclarer dans le global , si il y a une coupure de courant ou reboot de l'esp32 la variable va reprendre sa valeur qui est dans le global ?

Si vous voulez que les préférences soient sauvegardées, il faut alors les mettre en mémoire non volatile. Ma La bibliothèque préférence fait ça très bien sur ESP 32

Oui c'est ce que j'ai trouvé en cherchant, je vais voir si c'est difficile a mettre en place et si j'ai pas trop de modif a faire dans mon code actuel qui est fonctionnel.