Bonjour,
Voici une vidéo de l'IHM que j'ai développée pour La Box. C'est un point d'avancement à date, 2500 lignes au compteur à ce stade.
Ne pas s'inquiéter du clignotement, c'est juste une histoire de fréquence de l'IHM vs la fréquence de la caméra. En vrai, tout est net et sans clignotement.
Les grands principes :* Le code est un ensemble de classes autonomes. La classe principale est dérivée de la classe Adafruit_SSD1306 d'adafruit.
* Le menu a été conçu pour se transformer facilement en librairie. L'utilisation reste assez simple et on peut dériver les classes pour faire notre propre écran. Par exemple, je prévoir un écran pour la saisie de valeurs comme un adresse IP ou un entier.
* Le multilangue est géré, aujourd'hui par des macros, demain on pourra le gérer facilement dynamiquement mais à voir l'intérêt car cela consommera pas mal de mémoire.
* L'idée est de créer dans l'application un objet unique, un singleton, que chaque module pourra appeler par 2 primitives simples.
o void hmi::addNotification(int addr, uint8_t order, uint8_t value, bool functionState) -> @adresse du train, le type d'ordre, la valeur, la fonction appelée
o void hmi::addNotification(char* msg) -> Notification de type message libre (20 caractères) en vue d'être stockés dans une pile d'événements. L'idée est que chaque module de l'appli peuvent "logger" des événements importants par ex : connexion d'une trottle, court-circuit, etc.
* l'IHM conserve une mémoire des 10 derniers trains pilotés (un objet train par train). Le stockage est fait dans une pile, à chaque notification, le dernier train piloté est mis en haut de la pile.
* Evidémment, 0 delay dans le code
* Utilisation de la classe OneButton pour gérer les 3 boutons up/down/select.
* Il y a plusieurs tableaux de bord :
o Tableau de bord de base pour les états OFF et court-circuit. On peut voir aussi les 5 derniers événements.
o Tableau de bord 1 train : on présente sur l'écran l'état du dernier train avec l'affichage des tension/courant, un barres graphs pour la vitesse, la valeur de la vitesse [0:128], l'indicateur des phares (F0), la dernière fonction pilotée, l'adresse du train, le sens de circulation.
o Tableau de bord 2 trains : non codé encore mais je n'en vois pas l'intérêt donc il est probable que je le supprime
o Tableau de bord 3 trains : quasiment identique à 1 train mais en plus petit. Je n'affiche pas les tension/courant et les fonctions. Les 3 trains sont les 3 derniers trains pilotés donc l'ordre change dynamiquement.
o Une vue de consultation des événements
* Une gestion des log de debug un peu évoluée (enfin un peu mieux que des prints mais pas fou non plus)
Reste à faire :* Un classe globale de gestion des paramètres en EEPROM
* Le codage des fonctions de type action du menu au cas par cas.
* Menu de saisie des valeurs (@IP, entier)
* L'optimisation de certaines images à convertir en fonction pour économiser de la flash (j'ai commencé avec certains symboles comme le phare (F0) et le barre graph)
* Finir la vue de consultation des événements
* Un stockage dans le Git de Locoduino ?
* et surtout, une première intégration avec vos codes les amis pour augmenter le déverminage...
Merci pour vos remarques que j'attends nombreuses et pertinentes...