Skyduino:~#
Articles
arduino, programmation, test, tutoriel

[Arduino] U8GlibCreator, le dessin sur GLCD sans prise de tête

Bonjour tout le monde !

Aujourd’hui je vais vous présenter un programme que j’ai découvert sur le forum arduino.cc et qui s’avère fort sympathique !

Son petit nom : « U8GlibCreator », conçu et codé par Mr-pantalon.
Son but est de créer/importer/exporter des images bitmap sous forme de valeurs hexadécimales, pour être ensuite utilisées avec la librairie graphique U8Glib.
Il permet aussi de convertir des polices de caractères TrueType (.ttf) en police compatible U8Glib.

Edit: vous pouvez aussi utiliser GIMP en faisant un export en « XBM ».
Cf: https://skyduino.wordpress.com/2012/08/11/arduino-u8glibcreator-le-dessin-sur-glcd-sans-prise-de-tete/#comment-3859

Installation :

Le programme est disponible dans sa derniére version sur ce topic :
http://arduino.cc/forum/index.php/topic,114802.new.html

Il existe deux versions :
– avec installateur (.exe)
– sans installateur (archive .zip)

Le programme est écrit en C/C++ avec le framework Qt pour l’interface.
Pour le moment seul les versions windows x32 ou x64 bits sont disponibles, mais on peut espérer une version linux et mac dans un futur proche (?).

Personnellement j’ai choisi la version sans installateur 😉

Le programme :

Le programme est composé d’une fenêtre principal avec des menus et une barre d’outils.
A noter : en bas ce trouve les deux choix de couleurs pour le mode dessin « à main levé ».

Via le menu « Fichier » il est possible de créer une nouvelle image bitmap, d’en ouvrir une déja existante, d’importer une image bitmap ou png, ou de convertir une police TrueType.

Pour mon exemple j’ai choisi d’importer une image png, disponible ci dessous :

Une fois l’image ouverte vous pouvez vous amuser à modifier les pixels avec votre souris et les deux boutons en bas dans la barre d’outils.

Quand votre chef d’œuvre est prêt il suffit d’aller dans le menu « Fichier » puis choisir « Voir le code hexa » pour obtenir le dump hexadécimal de votre image.
A noter : les fonctions d’exports en .h ne sont pas disponible, dommage, Wait & see.

Une fois le code hexadécimal généré il suffit de cliquer sur le bouton « Tout sélectionner » puis faire click droit -> copier.

Il suffit ensuite de coller les valeurs hexa dans un fichier header (.h) suivant le modelé ci dessous :

const uint8_t image_bitmap[] U8G_PROGMEM = {
  // coller les valeurs hexa ici
};

Exemple avec ma trollface :

Le code d’exemple :

Ce code dessine à l’écran le contenu d’une image de 64×128 pixels (écran complet) stocké dans un fichier « image_bitmap.h » comme vu juste au dessus.

#include "U8glib.h" // Inclut la librairie U8G
#include "image_bitmap.h"

U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE); // Câblage SPI

/* Fonction permettant de redessiner TOUT l'écran */
void draw(void) {
  u8g.drawBitmapP(0, 0, 16, 64, image_bitmap);
}

/* setup() */
void setup(void) {
  u8g.setColorIndex(1); // Affichage en mode N&B
  
  u8g.firstPage(); // Sélectionne la 1er page mémoire de l'écran
  do {
    draw(); // Redessine tout l'écran
  } while(u8g.nextPage()); // Sélectionne la page mémoire suivante
}

/* loop() */
void loop(void) {

}

Le montage de test :

Le câblage :
GLCD -> Arduino
GND -> GND
VCC -> +5v
VO -> curseur d'un potentiomètre 10K entre GND et VCC
RST -> +5v
PSB -> GND
RS -> D10
R/W -> D11
E -> D13

Quelques vues en détails du montage « pour le fun » :

-> l’écran GLCD (PS: pensez à noter le type de driver et la résolution sur le cote du pcb, ça évite de chercher partout la même info à chaque fois ;))

-> Le potentiomètre entre VCC et GND qui permet de régler le contraste

-> L’arduino mega qui stock l’image et le programme en flash

Le résultat :

Humm … Un bon montage avec de gros morceau de troll dedans 🙂

Problém ?

Bon bidouillage à tous et bon WE !

Advertisements

Discussion

6 réflexions sur “[Arduino] U8GlibCreator, le dessin sur GLCD sans prise de tête

  1. Le logiciel Image2GLCD (http://www.avrportal.com/?page=image2glcd) permet l’export en .h, mais il est nettement moins « user-friendly »…

    Publié par Seby | 21 août 2012, 23 h 32 min
  2. bonjours, quand je connecte PSB au gnd l’arduino séteint et se ralume quand je débranche PSB …

    Publié par martinfactory | 31 mai 2013, 19 h 44 min
  3. Hello la compagnie 🙂
    Pour ma part bizarement Graphene ne veut pas fonctionner avec des images superieur a 38×24 … ( dans mon cas 96×65 ), J’ai testé avec une image exactement de la meme taille que cet article , mais Pas moyen d’avoir mon petit dessin affiché apres avoir copié collé le tableau hexa issue de graphene .
    Et , rien a voir a la base , en effectuant un export dans Gimp ( 2.8 ), surprise je trouve exporter au format XBM . je décide de tester … et la re surprise car le fichier de sortie xxxxx.xbm commence par :

    #define Test-skyduino_width 96
    #define Test-skyduino_height 65
    static unsigned char Test-skyduino_bits[] = {

    J’ai recupéré la totale , en rajoutant le commutateur U8G_PROGMEM pour placer tout cela en flash plutot qu’en RAM , et hooo miracle mon image s’affiche !!

    Je ne sais tjrs pas pourquoi cela n’a pas fonctionné avec la table Hexa rendue par Graphene, et la je peux meme plus tester avec ce dernier car il ne veut plus se lancer , j’ai un crash des que je le lance , et meme apres desinstall , nettoyage du registre et re install …

    Publié par Dj_Garfield | 17 décembre 2013, 3 h 18 min
    • J’avais jamais fait gaffe que le format XBM était juste du C !
      Je rajoute un lien vers ton commentaire dans l’article 😉

      Publié par skywodd | 21 décembre 2013, 18 h 15 min
      • Je ne connais pas la différence qu’il peut y avoir entre les valeurs Hex du fichier de sortie de Graphene , et celle sortie de Gimp , mais a priori après avoir comparé les deux tableaux avec Winmerge les deux tableaux sont totalement different , et j’ai deja eu le soucis en testant 2 ou 3 petits softs de conversion BMP => Hex , aucun ne me renvoi la même chose … pour le coup je ne suis pas assez « calé » pour savoir comment sont interprétés les valeur hexadécimale ( comme par exemple les caractère codé sur 8bit chaque ligne a une valeur suivant les pixels affichés ou non ). En tout cas la lib u8g traite les valeurs hexa d’un fichier .xbm de la bonne manière et cela fonctionne nickel .
        Tiens j’ai jamais essayé le même tableau en remplaçant u8g.drawXBMP ou u8g.drawXBM par u8g.drawBitmapP .. je vais tester et je reviendrais pour donner le résultat :).
        Dans tous les cas , merci pour ton partage , et tes précieuses infos , sincèrement j’ai progressé RÉELLEMENT car tu es un très bon pédagogue 🙂

        Publié par Dj_Garfield | 23 décembre 2013, 17 h 25 min

Rétroliens/Pings

  1. Pingback: Arduino / Raspberry | Pearltrees - 31 janvier 2015

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.