troisiemetype:
Le LCD, c'est une chouette solution!
Je dois en recevoir deux pour un projet que j'ai démarré, je pense que l'un des deux sera dévolu à faire du débugage sur des projets où il est délicat d'utiliser la liaison série pour le faire.
Je n'ai pas eu le courage de lire les neufs page du sujet en lien, mais ça semble être bien complet. Et visiblement un projet de longue haleine. C'est quelque chose que tu as commercialisé?
J'utilise un lcd avec un module de conversion I2C, comme ça je perds pas trop de broches.
Oui, c'est un truc que je commercialise, pour la troisième fois pour être précis, voila le succès commercial !
Là ça y est ma dernière carte est posée après 2 nuits blanches à coder, et pour la première fois depuis le début du projet ça fonctionné du premier coup, j'ai pas eu à sortir l'ordi chez le client ! incroyable ! Surtout alors que le soft est une refonte complète, je n'ai gardé de l'ancienne version que les definitions.
coyotte:
Hello,
Pour rester dans la simplicité, on pourrait ajouter deux méthode SetStateName et GetStateName à la classe de base.
- SetStateName stocke, dans un champ privé de la classe, la valeur passée en argument.
- GetStateName renvoie cette valeur stockée.
La première instruction d'une fonction (S1 ou S2 dans l'exemple donné) serait d'appeler SetStateName.
(Ce qui n'est pas pire que de faire un envoi sur la ligne série ;))
L'avantage de la solution est qu'il n'y a pas de contrainte. Une application qui n'a pas besoin de savoir dans quel état on se trouve n'appelle pas les fonctions, tout simplement.
Petites améliorations possibles :
-
Mofidier Next() afin qu'il réinitalise StateName. Ainsi, on ne risque pas de garder le nom d'un état alors que l'on change d'état, si ce dernier oublie d'appeler SetStateName
-
Prévoir deux pointeurs de fonction a appeler lors du Next et lors du SetStateName. Cela permet à une autre partie du programme d'être prévenue d'un changement...
Cela ne coûterait vraiment pas cher à implémenter, à mon humble avis.
Coyotte
Certes, merci pour ces avis j'aurais juste voulu que ce soit automatique, mais en fait ça finira sans doute comme tu dis.
Depuis il y a eu la fin du développement du reste du soft, et du coup ça a donné lieu à des améliorations et des corrections de bugs, en particulier une feinte dans les fonctions next() et run() pour que isFirstTime soit positionné correctement même si next() est appelé depuis la fonction en cours d'exé dans run() (une bonne prise de tête à pas comprendre ce qui ne marchait pas, ce truc... vers 6h du matin c'était moyen...)
et j'ai aussi rajouté la fonction periodic() pour lancer un truc à intervalles réguliers (en l’occurrence ici le rafraîchissement du LCD)
Il faut toutefois que j'améliore cette fonction car là elle ne fonctionne qu'une fois par état (avec une seule période, je veux dire)
Nouvelle version jointe.
Par contre j'ai des problèmes avec les pointeurs et la version d'arduino... mon code ne fonctionne qu'avec les versions 1.6.x, les versions précédentes ne compilent pas : ça fait des erreurs (que je n'ai pas notées) avec les pointeurs de fonctions.
Et parallèlement la librairie LiquidCrystal_I2C elle ne fonctionne que jusqu’à la 1.6.0, pas plus loin... ouf y'a UNE version qui fonctionne !!
YASM.zip (1.96 KB)