C’est laquelle ?
On la trouve où @J-M-L ?
Merci
Oui je l'ai vu dans les bibliothèque .
Quand ont est novice, je m'aperçois qu'il faut pas avoir trop d'idées car sur un projet ça complique vite l'apprentissage ![]()
Je tapais sur mon iPhone - je voulais dire La bibliothèque pas Ma bibliothèque….
Ça aurait très bien pu se faire ![]()
Bonne soirée
Oui mais il y a déjà ce qu’il faut avec EPROM ou Préférences donc pas la peine de réinventer la roue ![]()
Bon après réflexion je part sur 2 machines à état.
J'ai commencé ma mise en place mais je bloque sur la première fonction pour changer de mode.
Pour la modification de valeur des paramètres j'ai compris comment je dois faire.
Mais je bloque sur le départ du menu pour changer les modes et revenir au 1er mode.
En cherchant un peu partout , mon : enum {REGLAGE_TEMPO, REGLAGE_SEUIL, REGLAGE_SEUIL_JOUR, REGLAGE_SEUIL_NUIT} etatParametre;
vaut 0,1,2,3 si j'ai bien compris, donc je suis parti dans l'idée d'incrémenter +1 sur etatParametre a chaque appui du bouton menu, mais je ne comprend pas comment faire pour revenir sur REGLAGE_TEMPO après seuil_nuit.
L'extrait du début du code:
// condition qui active machine à état PARAMETRE et bloc la machine à état: etatTracker// 16/11/2023
if (parametreState == 1) {
arretTracker = true; //fonction pour bloquer machine à état = état tracker
paraReglage(); //affichage PARAMETRE sur LCD
if (BtMenu == LOW && etatMenu == HIGH) {
if (etatParametre <=3) {
etatParametre + 1; //REGLAGE_TEMPO → REGLAGE_SEUIL → REGLAGE_SEUIL_JOUR → REGLAGE_SEUIL_NUIT → retour → reglage tempo
}
}
}
Pour if (etatParametre <=3 , j'ai mis comme ça car j'ai fais un petit code juste pour voir comment fonctionne le bouton + et - pour modifier les paras, et je me suis aperçu que tant que je faisais un appui sur le bouton la valeur augmenter toujours, en utilisant <=3 , l'incrémentation s'arrête a 4 donc ce qui correspond aux nombres de mode de la machine à état.
Vous devriez utiliser une bibliothèque pour les boutons
Oui c'est une peut être une solution, mais je vais pas utiliser de librairie bouton juste pour le menu.
Il faut l’utiliser partout dans le code oui ![]()
Comme tu test que tu peux faire le +1 pour passer à l'état suivant.
Il suffit que dans le cas contraire, tu positionnes "etatParametre" à REGLAGE_TEMPO
if (etatParametre <=3) {
etatParametre + 1; //REGLAGE_TEMPO → REGLAGE_SEUIL → REGLAGE_SEUIL_JOUR → REGLAGE_SEUIL_NUIT → retour → reglage tempo
} else {
etatParametre = REGLAGE_TEMPO;
}
ce n'est pas propre de faire des maths avec un enum si on restocke le résultat dans une variable du type énuméré
la norme dit que passer de l'énum vers un entier c'est toujours possible mais que l'inverse peut conduire à "undefined behavior".
si vous voulez faire des maths, autant prendre un entier qui sert d'indice dans un tableau alors
--
PS: sinon il faudrait quand même modifier la variable....
if (etatParametre <=3) {
etatParametre= etatParametre + 1; //REGLAGE_TEMPO → REGLAGE_SEUIL → REGLAGE_SEUIL_JOUR → REGLAGE_SEUIL_NUIT → retour → reglage tempo
} else {
etatParametre = REGLAGE_TEMPO;
}
et pour éviter de câbler en dur le 3, souvent on rajoute un mot clé de fin du type énuméré
enum {REGLAGE_TEMPO, REGLAGE_SEUIL, REGLAGE_SEUIL_JOUR, EGLAGE_SEUIL_NUIT, FIN_PARAM} etatParametre;
comme cela on peut tester comparer avec FIN_PARAM pour voir si on est à la fin
mais comme je l'ai dit, si on part sur une enum, on évite les maths et on n'utilise que les mots clés
Pour enfoncer le clou, il faut surtout noter que l'enum dans ce cas est là pour gérer les états, donc le changement d'état devrait se faire depuis l'état courant.
Il n'y a alors plus de problème de calcule de valeur d'un enum.
Merci pour vos remarque et info.
J'ai regardé la librairie de OneButton pour voir mais au final j'en ai pas vraiment besoin donc pas d'installation de la librairie.
Sinon j'y es passé l'après midi (enfin vu l'heure c'est plus que l'après midi
) mais je suis arriver a mette en place la 2e machine à état PARAMETRE et passer d'une machine a l'autre.
Mon affichage fonctionne correctement d'une machine a l'autre et le changement de valeur aussi.
Me restera a voir pour la mise en EEPROM mais c'est pas urgent vu que j'utilise l'OTA.
Vais pouvoir commencer la partie électronique et la ça va aller plus vite que le code .
Bravo !
Une bibliothèque bouton simplifie généralement grandement la lisibilité du code (détection des fronts pour vous, gestion du rebond si ce n’est pas fait en hardware, gestion du multi-click ou click long,…) et plus vous avez de boutons plus ça simplifie.
Mais bien sûr ce n’est pas une obligation
Oui, les boutons seront traités en hardware.
Là je vais bosser sur l'amplification de l'I2C car j'ai mis des BH1750 comme capteurs pour la gestion du tracker et je vais avoir un ptit 5 ml de câble entre le capteur et le coffret de gestion.
Bon après quelques heures à établir une communication I2C sur 10ml , le projet commence à être au top, reste quelques truc à traité niveau temps de réactivité mais pour un novice je suis content ![]()
Après mise en place de tous les petits bouts de codes bout à bout sur l'ESP je mets une tite photo du proto:
un peu de parmesan sur le tout et vous avez un joli plat de spaghettis ![]()
(l'I2C n'a pas été conçu pour 10m)
Oui je sais pour l'I2C, mais il même possible d'aller a 100m ![]()
Pour les spaghettis ça va aller sur un soli PCB.
si vous cherchez les ennuis - même avec le bon câble - oui.... (sans doute pas à 400KHz)

