/TGP_MenuOLED

La librairie TGP_MenuOLED pour Arduino, permet de créer des menus sur la plateforme ProtoTPhys.

Primary LanguageC++MIT LicenseMIT

Librairie TGP MenuOLED

Permet de créer un menu déroulant sur un affichage OLED de type SSD1306.

Cette librairie est construite sur la librairie TGP ProtoTGP

Détails

Légende

Légende

  1. Ligne réservée pour le Titre du menu avec le souligné en dessous. On modifie le titre à l’aide de la méthode « imprimeLigneTitreOLED »
  2. Le caractère « > » indique l’item du menu présentement sélectionné ; pour éditer sa valeur courante, il faut appuyer sur le bouton SELECTION.
  3. Item de type NUMERIQUE : la valeur courante est un entier. On ajoute un tel item au menu par la méthode « ajouterItemNumerique ».
  4. Ligne réservée pour le Status du menu avec le souligné en dessus. On modifie le status à l’aide de la méthode « imprimeLigneStatusOLED »
  5. Item de type ON-OFF : la valeur courante, « 0 » ou « 1 » est affichée par OFF ou ON. On ajoute un tel item au menu par la méthode « ajouterItemOnOff ».
  6. Item de type TEXTE : la valeur courante sert d’index pour un tableau de chaînes de caractères à afficher. On ajoute un tel item au menu par la méthode « ajouterItemTexte ».
  7. Le caractère « < » indique que l’item est en mode d’édition. Dans ce mode, on modifie la valeur courante par les boutons HAUT et BAS. On entre et on sort du mode d’édition par le bouton SELECTION.
  8. En mode d’édition de la valeur courante d’un item de type NUMERIQUE, le caractère de soulignement indique le digit incrémenté et décrémenté par les boutons HAUT et BAS. On peut déplacer ce caractère de soulignement par les boutons GAUCHE et DROITE.
  9. Carré clignotant servant de « HeartBeat »
  10. Bouton GAUCHE : sert à déplacer vers la gauche le caractère de soulignement lors de l’édition de la valeur courante d’un item de type NUMERIQUE.
  11. Bouton BAS : sert à se déplacer vers le bas dans le menu déroulant. En mode d’édition, il sert plutôt à diminuer la valeur courante.
  12. Bouton HAUT : sert à se déplacer vers le haut dans le menu déroulant. En mode d’édition, il sert plutôt à augmenter la valeur courante.
  13. Bouton DROITE : sert à déplacer vers la droite le caractère de soulignement lors de l’édition de la valeur courante d’un item de type NUMERIQUE.
  14. Bouton SELECTION sert à entrer et sortir du mode d’édition de la valeur courante de l’item. À la sortie du mode d’édition, la fonction « callback » associée à l’item est automatiquement appelée.

Explications

La création du menu est simplifiée par l’utilisation des méthodes particulières d’ajout d’item de type NUMERIQUE, ON-OFF ou TEXTE. Un item comprend une étiquette, une valeur courante, des limites, un type d’affichage particulier et une référence à une fonction callback. Cette dernière est appelée automatiquement lors de la sortie du mode d’édition de l’item.

À chaque ajout d’item, la méthode retourne un numéro unique (consécutif et débutant à zéro) identifiant l’item nouvellement créé. Ce numéro permet l’accès direct à la valeur courante par le biais des méthodes « setItemValeur » et « getItemValeur ». On peut obtenir le nombre d’items créé par la méthode « getNbItems ».

Deux méthodes particulières, « imprimeLigneTitreOLED » et « imprimeLigneStatusOLED », servent respectivement à l’impression d’un Titre souligné au haut de l’écran ainsi que l’impression d’une ligne Status au bas. Cette dernière est surmontée d’une ligne horizontale. Le coin inférieur droit de l’écran est réservé au clignotement d’un petit carré en guise de « Heartbeat ».

Le menu est actualisé par la méthode « refresh ». Celle-ci devrait être appelée régulièrement ; on la place normalement dans le « void loop() » d’un programme Arduino. La navigation à travers le menu ainsi que l’édition des valeurs courantes se font par l’entremise des 5 boutons. Les méthodes de la librairie « ClavierGenerique » sont aussi disponibles.

Finalement, les méthodes « setMenuOff » et « setMenuOn » permettent de désactiver et réactiver le menu. À la désactivation du menu, l’affichage OLED est effacé et la navigation par les boutons est désactivée ; seul le Heartbeat reste actif. Le programme principal peut alors prendre possession de l’affichage OLED pour son propre usage. L’état des boutons demeure toujours accessible via la méthode appropriée. Au retour de l’affichage par la méthode « setMenuOn », le menu est reconstitué tel qu’il était avant la désactivation. La méthode « getMenuOnOff » informe de l’état ON ou OFF du menu.

Notes

Les méthodes publiques de la classe ProtoTGP sont toutes disponibles via l'objet.

Utilisation

#include <MenuOLED.h>

void ajusteLED1(void);   
void ajusteLED2(void);   
void callBackItemX(void);

int noItemLED1, noItemLED2, noItemX;

char *niveauLED2[] = {"Eteint", "Bas", "Moyen", "Fort"};
int nbChoixLED2 = 4; 

MenuOLED monMenu;

void setup()
{
  monMenu.begin();

  noItemLED1 = monMenu.ajouterItemOnOff("LED 1  = ", &ajusteLED1, 0);
  noItemLED2 = monMenu.ajouterItemTexte("LED 2  = ", &ajusteLED2, 0, nbChoixLED2, &niveauLED2[0]);
  noItemX = monMenu.ajouterItemNumerique("Item X = ", &callBackItemX, 0, 0, 512);

  monMenu.imprimeLigneTitreOLED("Exemple1_Basic");

  monMenu.imprimeLigneStatusOLED("Sans erreur");
}

void loop()
{
  monMenu.refresh();
}

//Définition des fonctions callback
void ajusteLED1()
{
  //Tâche à faire lorsque l'item du menu noItemLED1 change de valeur
}

void ajusteLED2()
{
    //Tâche à faire lorsque  l'item du menu noItemLED2 change de valeur
}

void callBackItemX()
{
    //Tâche à faire lorsque l'item du menu noItemX change de valeur
}

Constructeurs

MenuOLED()

L'initalisation est déjà implémenté par la classe ProtoTGP.

Méthodes disponibles

void begin() 
  • Description Méthode publique pour initialiser la plateforme ProtoTPhys.
  • Syntaxe
 monMenu.begin();
  • Paramètres Aucun
  • Valeur renvoyée Aucune

int ajouterItemNumerique(const char *Etiquette, void(*callbackFct)(), int ValeurInitiale, int ValeurMin, int ValeurMax, bool editable)
  • Description Méthode publique pour ajouter un item de type NUMERIQUE au menu
  • Syntaxe
noItem = monMenu.ajouterItemNumerique("Etiquette", &callbackFct, ValeurInitiale, ValeurMin, ValeurMax, editable);
  • Paramètres
    •  const char *Etiquette 	: pointeur sur une chaîne pour l'étiquette de l'item, 
      
    •  void (*callbackFct)()  	: pointeur sur la fonction callback
      
    •  int ValeurInitiale    	: valeur initiale de l'item
      
    •  int ValeurMin         	: valeur minimale de l'item
      
    •  int ValeurMax         	: valeur maximale de l'item
      
    •  bool editable         	: true(defaut)=item éditable, false=item non éditable
      
  • Valeur renvoyéee
    •  int    : retourne le numéro d'identification de l'item; la numérotation débute à zéro.
        : retourne « -1 » si les - Paramètres sont invalides pour créer ce type d'item.
      

int ajouterItemOnOff(const char *Etiquette, void(*callbackFct)(), int ValeurInitiale, bool editable)
  • Description Méthode publique pour ajouter un item de type ON-OFF au menu.
  • Syntaxe
noItem = monMenu.ajouterItemOnOff("Etiquette", &callbackFct, ValeurInitiale, editable);
  • Paramètres
    •  const char *Etiquette 	: pointeur sur une chaîne pour l'étiquette de l'item, 
      
    •  void (*callbackFct)()  	: pointeur sur la fonction callback
      
    •  int ValeurInitiale    	: valeur initiale de l'item; 0 pour OFF et 1 pour ON
      
    •  bool editable         	: true(defaut)=item éditable, false=item non éditable
      
  • Valeur renvoyéee
    •  int    : retourne le numéro d'identification de l'item; la numérotation débute à 0.
        : retourne « -1 » si les - Paramètres sont invalides pour créer ce type d'item.
      

int ajouterItemTexte(const char *Etiquette, void(*callbackFct)(), int ValeurInitiale, int nbChoix, char **choixTexte, bool editable)
  • Description Méthode publique pour ajouter un item de type TEXTE au menu.
  • Syntaxe
noItem = monMenu.ajouterItemTexte("Etiquette", &callbackFct, ValeurInitiale, nbChoix, & choixTexte, editable);
  • Paramètres
    •  const char *Etiquette 	: pointeur sur une chaîne pour l'étiquette de l'item, 
      
    •  void (*callbackFct)()  	: pointeur sur la fonction callback
      
    •  int ValeurInitiale    	: valeur initiale de l'item
      
    •  int nbChoix           	: nombre de choix différents de texte
      
    •  char **choixTexte     	: pointeur sur tableau de pointeurs de chaîne de caractère
                                              pour les choix de textes à afficher
      
    •  bool editable         	: true(defaut)=item éditable, false=item non éditable
      

Note: Il est primordial que le paramètre "nbChoix" soit égal (ou inférieur) à la dimension du tableau texte pointé par "char **choixTexte".

  • Valeur renvoyéee
    •  int    : retourne le numéro d'identification de l'item; la numérotation débute à zéro.
        : retourne « -1 » si les - Paramètres sont invalides pour créer ce type d'item.
      

void refresh()
  • Description Méthode publique pour actualiser le menu en prenant en compte l'état des boutons. Cette fonction gère entre autres la navigation à travers le menu ainsi que l'édition des items par les boutons. Cette méthode devrait être appelée régulièrement ; on la place normalement dans le « void loop() » d’un programme Arduino.
  • Syntaxe
monMenu.refresh();
  • Paramètres Aucun
  • Valeur renvoyéee Aucune

void imprimeLigneTitreOLED(char* TitreEtiquette)
  • Description Méthode publique pour imprimer la ligne réservée au TITRE du menu.
- Syntaxe 
monMenu.imprimeLigneTitreOLED("TitreEtiquette");
  • Paramètres
    • char* TitreEtiquette : pointeur sur la chaîne de caractères du titre
  • Valeur renvoyéee Aucune

void imprimeLigneStatusOLED (char* StatusEtiquette)
  • Description Méthode publique pour imprimer la ligne réservée au STATUS du menu.
- Syntaxe 
monMenu.imprimeLigneStatusOLED("StatusEtiquette");
  • Paramètres
    • char* StatusEtiquette : pointeur sur la chaîne de caractères du status
  • Valeur renvoyéee Aucune

int getItemValeur(int noItem)
  • Description Méthode publique pour obtenir la valeur courante d'un item de menu.
  • Syntaxe
Valeur = monMenu.getItemValeur(noItem);
  • Paramètres
    •  int noItem  : numéro de l'item de menu attribué par les méthodes d'ajout d'items
      
  • Valeur renvoyéee
    •  int         : retour de la valeur courante
             : retourne "0" si paramètre invalide
      

void setItemValeur(int noItem, int valeur, bool callfctback)
  • Description Méthode publique pour ajuster la valeur courante d'un item de menu.
  • Syntaxe
monMenu.setItemValeur(noItem, valeur, callfctback);
  • Paramètres
    •  int noItem  		: numéro de l'item de menu attribué par les méthodes d'ajout d'items
      
    •  int valeur    		: valeur courante à imposer à l'item
      
    •  bool callfctback  	: true(defaut)= avec appel de la fonction callback, false=sans appel de la fonction callback
      

Note: La valeur est limitée selon les limites propres à l'item et la fonction callback est appelée

  • Valeur renvoyéee Aucune

void setMenuOn() 
  • Description Méthode publique pour mettre ON le menu. Au retour de l’affichage par cette méthode, le menu est reconstitué tel qu’il était avant sa désactivation.
  • Syntaxe
monMenu.setMenuOn();
  • Paramètres Aucun
  • Valeur renvoyéee Aucune

void setMenuOff()
  • Description Méthode publique pour mettre OFF le menu. À la désactivation du menu, l’affichage OLED est effacé et la navigation par les boutons est désactivée ; seul le Heartbeat reste actif. Le programme principal peut alors prendre possession de l’affichage OLED pour son propre usage. L’état des boutons demeure toujours accessible via la méthode appropriée. Les méthodes des librairies « Adafruit_SSD1306 » et « Adafruit-GFX-Library » pour l’affichage OLED sont aussi disponibles.
  • Syntaxe
monMenu.setMenuOff();
  • Paramètres Aucun
  • Valeur renvoyéee Aucune

bool getMenuOnOff()
  • Description Méthode publique pour obtenir l'état du menu ; soit ON ou OFF.
  • Syntaxe
etat = monMenu.getMenuOnOff();
  • Paramètres Aucun
  • Valeur renvoyéee
    • bool : "false" pour menu OFF et "true" pour menu ON

int getNbItems()
  • Description Méthode publique pour obtenir le nombre d'items dans le menu.
  • Syntaxe
nbItem = monMenu.getNbItems();
  • Paramètres Aucun
  • Valeur renvoyéee
    • int : nombre d’items dans le menu

void actualiserUnItem(int noItem)
  • Description Méthode publique pour forcer manuellement l'actualisation d'un item.
  • Syntaxe
monMenu. actualiserUnItem (noItem);
  • Paramètres
    •  int noItem  : numéro de l'item de menu attribué par les méthodes d'ajout d'items
      
  • Valeur renvoyéee Aucun