Caractères spéciaux

Forum spécifique au shield Deuligne

Caractères spéciaux

Message non lude alphonse82 » Ven 30 Jan 2015 11:42

Bonjour,

Juste pour indiquer que j'ai envoyé sur la branche "Arduino-1.0" du github du DeuLigne : https://github.com/Snootlab/Deuligne , un commit qui permet d'afficher les accents (et quelques autres caractères spéciaux) sur n'importe quel DeuLigne, quelque soit sa ROM:

Le principe est relativement simple: Dans Deuligne.h, il y a une liste de caractères spéciaux avec leur représentation en mode "CGRAM".
Cette représentation est constituée de 7 lignes de 5 pixel de large pour 7 de haut , on peux le faire en ligne par exemple ici : http://www.quinapalus.com/hd44780udg.html , ou là : http://alx.github.io/deuligne-custom-char/ .

Ensuite on part du principe que les caractères que l'on va transmettre à la fonction Deuligne.write() sont en UTF8. C'est le cas des caractères accentués écrits "dans le code" (dans l'IDE), mais aussi des caractères reçus par la ligne série , par le terminal de l'IDE.
(C'est un point critique, qu'il faut valider avant toute utilisation).

La caractéristique des caractères UTF8, c'est qu'ils sont composés d'un caractère "start" (obligatoirement > à 0xC0) et de 1 à 3 caractères 'follow', obligatoirement supérieurs à 0x80.
On utilise cette caractéristique pour identifier si l'on doit afficher le caractère directement ou bien si l'on doit chercher le caractère dans la table décrite ci-dessus (quitte à attendre plus de caractères via write() pour compléter le mapping).

Une fois le caractère trouvé, il faut l'afficher.

Pour ça, on va utiliser le fait qu'il existe 8 "places" en CGRAM: On cherche d'abord si le caractère a déjà été affiché par le passé et qu'il existe déjà dans l'un des 8 "slots" CGRAM. Si c'est le cas, on l'affiche à la position courante.
Sinon il faut le "charger" en CGRAM , puis on l'affiche. Enfin, si il n'y a plus de place sur les 8 slots, on en élimine un & on met le nouveau à la place.

C'est là où la version actuelle pêche un peu: L'algo d'éviction est un peu bête, et a des effets de bords : Il prend par défaut le slot le moins utilisé. Mais la conséquence est que si ce caractère-là est actuellement affiché, ben il va se retrouver "switché" avec celui qu'on va établir. Bref, il y a des choses à reprendre, mais l'idée est là.

Ce comportement est présent par défaut, mais il est désactivable: Il suffit de placer la directive
Code: Tout sélectionner
#define HANDLE_UTF8_CHAR 0

avant la ligne
Code: Tout sélectionner
#include <Deuligne.h>


Commentaires bienvenus !
alphonse82
 
Messages: 5
Inscription: Sam 24 Jan 2015 16:47

Retourner vers Deuligne

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités