J'ai testé pour vous: librairie graphique pour le VMA412

Téléchargements de ma bibliothèque graphique

QuelPilote.zip: délivre sur le moniteur série le code du driver. Si il vous retourne 7781 ou 7783 (sur le moniteur série), ma bibliothèque fonctionnera. Dans le cas contraire, je parierai presque que non, il me faudrait alors votre afficheur pour pouvoir écrire et tester un driver optimisé!

Demo_VMA412_UNO.zip: démonstration de certaines possibilités de ma bibliothèque. Les répertoires contenant les images sont à mettre dans la racine de la carte SD qui comportera donc 4 répertoires. Cette démo fonctionne avec le VMA412 équipé d'un ST7783 et une carte UNO (les broches ne sont pas du tout les mêmes pour un MEGA)

Demo_VMA412_MEGA.zip: Ne vous impatientez pas, envoyez-moi un mail pour être prévenu de sa sortie.

 

Vidéos de démonstration


Mode paysage

Mode portrait

 

La bibliothèque graphique officielle

Dans les téléchargements, il y a des exemples et des librairies. Voici les reproches que j'ai à propos de ces fichiers:
- il n'y a quasiment pas de commentaires. Certaines partie du code sont ainsi très difficile à lire et donc à modifier. Je ne comprends pas comment est définie une fonte, et je ne sais pas rajouter les accents.
- je n'ai pas réussi à faire fonctionner certains exemples. En particulier l'affichage de fichiers BMP.
- il n'est pas prévu de pouvoir utiliser les lettres accentuées. Et ça en tant que français c'est inacceptable!
- la fonte employée est une fonte matricielle et cela supporte très mal l'agrandissement.
- le code n'est pas optimisé, ni en taille, ni en vitesse. Certaines fonctions sont lentes, notamment l'effacement d'écran
- il est possible d'utiliser plusieurs types de drivers, mais je n'en ai qu'un seul. Autant supprimer la lecture du circuit et l'initialisation des boîtiers que je n'ai pas. C'est toujours des octets en moins.
- il est possible de dessiner dans les 4 directions. Mais le choix des directions d'affichage peut se faire en cours de programme. Cela va prendre des octets et du temps pour écrire au bon endroit. En ne gérant qu'une seule direction, cela sera plus optimisé. A priori, mes projets n'écriront jamais à l'envers. Il me suffit alors d'avoir un mode portrait ou un mode paysage, mais pas les deux dans le même projet.

 

Ma bibliothèque graphique personnelle

J'ai cherché un peu plus à optimiser les fonctions graphiques. Parfois on peut économiser la taille ET la vitesse. Parfois optimiser l'un dégrade l'autre. Il y a des compromis à faire!

Voici quelques caractéristiques de ma bibliothèque:
- il n'y a qu'un seul mode, paysage OU portrait. C'est surtout pour les textes et les images, car pour les points, cercles, droites... cela ne change que les coordonnés. La première ligne de la librairie permet de choisir. Cette méthode est un peu plus compliquée, mais permet de minimaliser la taille du code: un seul mode possible ou ces deux modes au choix, donnent un code identique. La démo permet les deux modes sans modifications du code. Il suffit de changer les commentaires des deux premières lignes du fichier "vma412_ST7781_uno.h".
- la fonte de caractère que j'ai dessinée permet d'utiliser les accents. Cette fonte est vectorielle, et permet donc la variation de taille, l'italique (mais pas terrible), le gras, et les empattements (petits traits horizontaux en haut et en bas des lignes verticales des caractères). Autre très gros avantage, la fonte n'est définie que sur 721 octets (soit environ 6 octets par caractère!).
- la librairie est optimisée autant que faire se peut. Par exemple l'effacement de l'écran est environ 4 fois plus rapide qu'avec la librairie officielle.
- il est possible d'afficher des images au format .BMP mais aussi de les écrire sur la carte. On peut aussi lire ou écrire des images au format .BPX ; ce format est adapté à cet afficheur et s'affiche 30% plus vite que les .BMP
- au lieu de se faire suer avec une classe "Point" comprenant une abscisse et une ordonnée, j'ai préféré garder les valeurs x et y. Ainsi si on veut par exemple déplacer un curseur, on n'est pas obligé de définir un point et de le remplir.

 

Les fichiers de cette librairie

Dans l'exemple, vous avez 3 ensembles de fichiers (plus des répertoires contenant des images):
- Demo_VMA412_UNO.ino qui est le programme de démonstration. C'est de lui dont vous allez vous inspirer pour votre application. Vous n'allez pas le garder, mais vous allez écrire votre propre programme.
- Pecheux_XXXX.XXX c'est la librairie graphique qui comprend toutes les fonctions de base. En principe, vous n'allez pas trop y toucher. Toutefois comme elle fournie avec des commentaires et que je vais peut-être faire une liste de diffusion, si vous voulez aller plus loin, si vous voulez des adaptations, il est possible d'y trifouiller quelque peu. Elle comprend:

- Pecheux_Graph.XXX qui est la librairie graphique et ses principales fonctions. Elle dépend peu du matériel, cela devrait fonctionner avec toutes les résolutions, et sans doute avec les afficheurs pour lequel le dialogue est série. Toutefois elle utilise des modes d'écriture spécifiques aux pilotes du VMA412, que l'on retrouve dans bon nombre d'autres pilotes; elle utilise la notion de zone de travail, de point de départ des tracés de points.
- Pecheux_font.h qui contient la définition de la fonte de caractère. C'est aussi modifiable si vous avez besoin de caractères saugrenus.
- vma412_ST7781_uno.XXX contient l'interface bas niveau entre l'afficheur et la librairie graphique. C'est elle qui définit un certain nombre de constantes et de routines de base. Elle dépend donc du pilote, et de la carte Arduino. Avec un autre afficheur, il faudrait réécrire ces fichiers.

Dans un premier temps, mettez les fichiers Pecheux_XXXX.XXX et vma412_ST7781_uno.XXX avec votre application.

 

Constantes et fonctions disponibles

Note: pour passer en mode paysage, éditez vma412_ST7781_uno.h et faire que les deux premières lignes ressemblent à :

//#define PORTRAIT
#define PAYSAGE
pour passer en mode portrait éditez vma412_ST7781_uno.h et faire que les deux premières lignes ressemblent à :
#define PORTRAIT
//#define PAYSAGE

Constantes
MAX_X: Abscisse maximum des points. C'est 319 en mode paysage, 239 en mode portrait
MAX_Y: Ordonnée maximum des points. C'est 239 en mode paysage, 319 en mode portrait
LARGEUR: Largeur de l'écran. C'est 320 en mode paysage, 240 en mode portrait
HAUTEUR: Hauteur de l'écran. C'est 240 en mode paysage, 320 en mode portrait

MAX_RED: Valeur maximum de la composante rouge. C'est 31 car on est en mode 16 bits (32 valeurs)
MAX_GREEN: Valeur maximum de la composante verte. C'est 63 pour cet afficheur, en mode 16 ou 18 bits
MAX_BLUE: Valeur maximum de la composante rouge. C'est 31 car on est en mode 16 bits (32 valeurs)
MAX_GREY: Valeur maximum des gris. C'est 31 car on est en mode 16 bits (32 valeurs)

BLACK: Constante définissant le noir (les couleurs sont définies sur 16 bits)
BLUE: Bleu
GREEN: Vert
CYAN: Cyan
RED: Rouge
MAGENTA: Magenta
YELLOW: Jaune clair
WHITE: Blanc; c'est aussi la valeur maximale des couleurs. Pour avoir une couleur au hasard: random(WHITE);
DARK_BLUE: Bleu nuit
DARK_GREEN: Vert foncé
DARK_CYAN: Cyan foncé
DARK_RED: Rouge sombre
MAROON: Marron
DARK_MAGENTA:Magenta foncé
PURPLE: Violet
DARK_YELLOW: Jaune foncé
OLIVE: Olive
GRAY: Gris
SILVER: Argent

Fonctions
Couleur: Transforme un triplet RGB ou une valeur de gris en un code couleur
Init_Pecheux_Graph: Initialisation de l'écran et de son pilote
ClearScreen: Efface l'écran ou le remplit d'une couleur
Point: Dessine un point
Get_Point: Retourne la couleur d'un point

Box: Trace une boîte pleine
Horizontal_line: Trace une ligne horizontale
Vertical_line: Trace une ligne verticale
Line: Trace une ligne
Rectangle: Trace les bords d'un rectangle
Arc: Trace des arcs par huitième de cercle
Circle: Trace un cercle

Text_color: Choisit la couleur du texte
Text_cursor: Impose l'abscisse ou le point-curseur (point le plus en haut à gauche du prochain caractère)
Get_text_x: Lit l'abscisse du point-curseur
Get_text_y: Lit l'ordonnée du point-curseur
Text_size: Taille des caractères: la hauteur est environ de 7*taille pixels
Text_bold: Gras ou pas
Text_serif: Avec ou sans empattement
Text_italic: Italique ou normal
Text: Écrit du texte

BMP_Draw: Dessine un bitmap de format windows .BMP qui est stocké sur la carte SD
BMP_Save: Lit une zone de l'écran et sauvegarde sur la carte SD un bitmap de format windows .BMP
BPX_Draw: Dessine un bitmap de format natif .BPX qui est stocké sur la carte SD
BPX_Save: Lit une zone de l'écran et sauvegarde sur la carte SD un bitmap de format natif .BPX

IsTouch: Retourne true si on a appuyé sur l'écran, et mémorise les coordonnés du point
GetTouch_x: Donne l'abscisse du point de touche mémorisé par IsTouch
GetTouch_y: Donne l'ordonné du point de touche mémorisé par IsTouch


dansetrad.fr Contactez-moi