Présentation de PxGraph
Bibliothèque graphique pour shield Uno/Mega
Les drivers
La bibliothèque fonctionne avec des shields pour Uno ou Mega équipé de:
- ILI9341
- ST7781
Pour écrire une bibliothèque, il faut disposer d'un écran correspondant. C'est pourquoi cette bibliothèque ne fonctionne qu'avec ces deux
drivers.
Les cartes
Les shields s'enfichent et sont compatibles à 100% avec les cartes Arduino Uno. Ces shields sont compatibles avec la carte Arduino Mega si on n'utilise pas le lecteur SD (on peut quand même s'en sortir avec). C'est pourquoi cette bibliothèque est écrite pour les cartes Uno et Mega. Elle doit donc aussi tourner avec une Nano, mais les branchements perdent leur intérêt.
Le nom de la librairie
Ma bibliothèque PxGraph se décline en deux versions en fonction du driver. Ces deux versions sont donc PxGraph_ILI9341_Shield et PxGraph_ST7781_Shield. Dans la suite, ces noms seront abrégés en PxGraph.
A propos de la carte SD
Sans la carte SD, les programmes de démonstration ne peuvent pas afficher des images. Mais le reste fonctionne parfaitement. Un certain nombre de programmes utilisent un croquis si l'image n'est pas accessible.
Caractéristiques principales
Voici quelques caractéristiques de la bibliothèque:
- on peut utiliser 4 modes, paysage, portrait, paysage inversé ou portrait inversé. Les modes "inversés" utilisent une rotation de
180° et permettent ainsi de mettre l'écran physique dans un sens ou dans l'autre (pratique en réalisation).
- dans un mode donné, les images sont affichées sans rotation.
- dans un mode donné, les textes peuvent être écrits dans les 4 directions (sur un même affichage).
- il est possible de limiter les affichages à une portion d'écran.
- les images peuvent être lues ou écrites au format .BMP vraies couleurs (24 bits) non compressées. Un format .BPX est aussi
géré qui permet des images plus rapides. Ce format est spécifique à cette bibliothèque.
- les graphiques n'utilisent pas les objets (économie de place), car il est impossible d'avoir deux shields. Ceci permet sur une Uno
d'avoir encore de la place pour la programmation.
- il n'y a qu'une fonte de caractères vectorielle. Elle supporte donc bien les changements de taille, les gras, un pseudo italique.
- la fonte accepte les lettres reconnues par l'IDE, en particulier les minuscules accentuées.
Les couleurs
J'ai fait le choix d'utiliser le mode 16 bits (compromis entre, la taille et la vitesse du code, et la qualité). La relation entre couleur et valeur numérique n'est pas triviale, et c'est pour cela que je conseille d'utiliser les constantes définies ainsi que la fonction RGBcolor().
Le système de coordonnés
L'origine de l'écran se trouve en haut à gauche. Les axes sont croissant vers la droite ou vers le bas.
Le mode texte
Pour les textes, il y a un curseur (voir image ci-dessus). C'est le point le plus en haut à gauche du prochain caractère qui sera écrit. getTextX() et getTextY() permettent d'obtenir la valeur du curseur; setTextCursor permet de le fixer.
Pour les fonctions graphiques pures (point, cercle, boîte...) la couleur peut être passée dans les paramètres et si elle est omise
le tracé se fera avec la dernière couleur utilisée. Pour les fonctions
texte, on ne passe pas la couleur dans chaque fonction. Il faudrait sinon passer aussi les paramètres italique, gras, serif... C'est
pour cela qu'il y a 6 fonctions pour définir les caractéristiques d'affichage des textes :
- textColor() pour choisir la couleur
- textSize() pour choisir la taille
- textBold() pour le gras
- textItalic() pour passer ou revenir du mode italique
- textSerif() pour commuter le mode empattement (petits traits en plus sur certains caractères
- textOrient() pour choisir le sens de l'écriture
Pour les textes, on peut écrire dans les 4 directions. Le système de coordonnés sera alors différent du système graphique si l'on n'écrit pas vers la droite.
Le format .BPX
Si l'on veut afficher une image issu d'un ordinateur, il faut utiliser les imabes .BPM vraies coueurs non compressées (n'avoir qu'un seul type diminue fortement la taille du code). Par contre pour le fonctionnement normal, il vaut mieux utiliser le format BPX qui est plus rapide (la couleur est enregistrée sur deux octes au lieu de trois et elle est en format 565 comme l'afficheur. Il n'y a pas de calcul à faire pour transforment le RGB en 565. Pour transformer un BMP en BPX, vous pouvez par exemple dessiner sur l'afficheur le BMP et le sauvegarder sous forme de BPX:
bmpDraw("Fichier.bmp"); // Dessine le bitpmap dans le coin
bpxSave("Fichier.bpx",0,0,taille_X-1,tille_Y-1); // Sauve le BPX