Skyduino:~#
Articles
arduino, programmation

[Arduino] Drivers Arduino pour ELCD (lextronic)

Salut à tous !

Toujours dans ma série de morceau de code voici venu un petit sketch arduino fait à la demande d’un membre du forum arduino.
Ce code permet de faire fonctionner un afficheur LCD série 4×20 de lextronic.

Produit en question : http://www.lextronic.fr/P765-afficheur-4-x-20-caracteres-retro-eclaire-bleu.html
Datasheet : http://www.lextronic.fr/~lextronic_doc/ELCD.pdf

Et bien sur le code du très connu « Hello world » :

void setup() {
  Serial.begin(19200);
  ELCD_initialize();
  delay(200);
  ELCD_Clear_LCD();
  ELCD_Cursor_Position(0, 0);
  ELCD_put_str("Hello World !");
}

void loop() {
}

/* Initialize l'afficheur lcd */
void ELCD_initialize(){
  Serial.print(0xA0, BYTE);
}

/* Cache le curseur */
void ELCD_Cursor_OFF(){
  Serial.print(0xA3, BYTE);
  Serial.print(0x0C, BYTE); 
}

/* Affiche le curseur */
void ELCD_Cursor_ON(){
  Serial.print(0xA3, BYTE);
  Serial.print(0x0E, BYTE);  
}

/* Efface l'écran et place le curseur à (0, 0) */
void ELCD_Clear_LCD(){
  Serial.print(0xA3, BYTE);
  Serial.print(0x01, BYTE);
}

/* Place le curseur à la position (x, y) */
void ELCD_Cursor_Position(int x, int y){
  Serial.print(0xA1, BYTE);
  Serial.print(x, BYTE);
  Serial.print(y, BYTE);  
}

/* Affiche une chaine de caractéres (char[] terminé par \0) sur l'afficheur */
void ELCD_put_str(char *str){
  Serial.print(0xA2, BYTE);
  while(*str)
    Serial.print(*str++);
  Serial.print(0, BYTE);  
}

/* Affiche un caratéres ASCII sur l'afficheur (caractéres spéciaux aux LCD non pris en charge) */
void ELCD_put_chr(char ch){
  Serial.print(0xA2, BYTE);
  Serial.print(ch);
  Serial.print(0, BYTE);  
}

/* Définit un caractére personalisé à l'index défini (de 8 à 15) suivant le tableau newChar[],
   de structure identique à celui utilisé par la fonction createChar de la lib LiquidCrystal.
   Si showAfter = 1 le caractére sera afficher aprés la création, sinon il ne sera afficher qu'aprés un ELCD_put_chr(index) */
void ELCD_create_char(byte index, byte newChar[], byte showAfter) {
  if(showAfter)
    Serial.print(0xA4, BYTE);
  else
    Serial.print(0xA5, BYTE);
  Serial.print(index, BYTE);
  Serial.print(newChar[0] & 0x1F, BYTE);
  Serial.print(newChar[1] & 0x1F, BYTE);
  Serial.print(newChar[2] & 0x1F, BYTE);
  Serial.print(newChar[3] & 0x1F, BYTE);
  Serial.print(newChar[4] & 0x1F, BYTE);
  Serial.print(newChar[5] & 0x1F, BYTE);
  Serial.print(newChar[6] & 0x1F, BYTE);
  Serial.print(newChar[7] & 0x1F, BYTE);
}
Advertisements

Discussion

19 réflexions sur “[Arduino] Drivers Arduino pour ELCD (lextronic)

  1. Super ce code, il m’a bien fait avancer mais comment faire pour afficher le contenu d’une variable variable INT sur le LCD?
    Voilà deux jours que je me creuse la tête et je n’y arrive pas.

    Je récupère l’heure (variable INT) sur un DS1307 et j’essaie de l’envoyer sur le LCD via le code suivant:
    affichage est une variable de type char.

    heure=RTC.get(DS1307_HR,true); //Lecture de l’heure sur le DS1307
    affichage = heure; // Conversion au format String pour affichage avec la fonction ELCD_put_str()
    ELCD_put_str(affichage); // NE FCT PAS 😦 Pb de conversion de char to char !

    Si un bon samaritain passe par ici, un petit coup de main au débutant que je suis serait bienvenu 😉

    Publié par Pascal | 5 novembre 2011, 18 h 42 min
  2. Bonjour,

    Je débute sur Arduino après un passage par Picbasic d’où mon intérêt pour les modules ELCD et mes débuts difficiles avec le langage de l’Arduino… Votre programme ne fonctionne pas avec l’environnement Arduino que j’ai téléchargé (Arduino 1.0). Le soft n’accepte pas la commande serial.print (X, BYTE) et propose de passer par serial.write; sauf que dans ce cas certains commandes ne sont pas acceptées.
    Pourriez vous m’aider svp? est-ce un pb de configuration de mon environnement ou dois-je adapter votre programme qui est pourtant récent?

    Publié par Jean-Philippe | 8 janvier 2012, 14 h 27 min
    • L’ide arduino 1.0 est certes la version la plus récente mais il s’adresse plutôt aux utilisateurs confirmé ou ayant déjà des connaissance en programmation.

      Je te conseil de télécharger l’ide arduino 0023, la version 1.0 apporte d’important changement dans l’api arduino, changements qu’il est compliqué de maitriser lorsqu’on débute.

      Publié par skywodd | 8 janvier 2012, 17 h 30 min
    • Salut,
      Si tu parlais de cette commande particulière :
      Serial.print(0, BYTE);

      il suffit de la remplacer par;
      Serial.write((byte)0x00);

      Publié par Philippe | 1 mai 2012, 17 h 48 min
      • Effectivement pour ce morceaux de code c’est la seul modification à apporter, mais les modifications apporté dans arduino 1.0 sont beaucoup plus profondes, surtout au niveau de la classe Printables.

        Publié par skywodd | 1 mai 2012, 17 h 51 min
      • c’est peut être pour ça que je n’arrive pas a implémenter les caractères programmables….

        Publié par Philippe | 2 mai 2012, 1 h 11 min
  3. Entendu, c’est ce que je viens de faire et tout est rentré dans l’ordre. Merci beaucoup.

    Publié par Jean-Philipe | 9 janvier 2012, 16 h 15 min
  4. @Philippe: Les caractéres programmable sont totalement indépendant de la classe Printables, normalement que ce soit en 0023 ou 1.0 ça devrait marcher pareil.

    Publié par skywodd | 2 mai 2012, 11 h 34 min
    • Bin, j’ai toujours pas réussi…snif snif
      Si tu as testé en V1.0 ca m’intéresse.

      Publié par Philippe | 2 mai 2012, 19 h 29 min
      • Bon, j’ai finalement réussi.

        Voila le lien qui m’a mis sur la bonne voie:
        https://bitbucket.org/fmalpartida/new-liquidcrystal/issue/8/bug-with-createchar

        Je n’utilise pas cette librairie mais l’afficheur ELCD étant particulièrement lent, j’ai rajouté des délais entre chaque envoi de caractères et maintenant ça fonctionne.

        voila ce que j’ai utilisé pour tester :

        Serial.write(0xA5); // definition d’un caractere special
        delay(100);
        Serial.write(0x09); // numero de ce caractere
        delay(100);
        Serial.write(0x0E); // puis suivent les 8 lignes de 5 bits definissant ce caractere
        delay(100);
        Serial.write(0x19);
        delay(100);
        Serial.write(0x10);
        delay(100);
        Serial.write(0x1E);
        delay(100);
        Serial.write(0x10);
        delay(100);
        Serial.write(0x10);
        delay(100);
        Serial.write(0x19);
        delay(100);
        Serial.write(0x0E);
        delay(100);
        ELCD_Cursor_Position(0, 1);
        delay(100);
        ELCD_put_chr(0x09);

        reste plus qu’a affiner (et peut être supprimer certains délais ?) et intégrer cela dans ta fonction proprement.

        Publié par Philippe | 3 mai 2012, 3 h 40 min
  5. Bonsoir,
    Pour les écrans GLCD (I2C) de chez lextronic, j’ai fait une bibliothèque.
    Me contacter, s’il y a un intérêt
    icare

    Publié par Icare Petibles | 10 octobre 2012, 22 h 34 min
  6. bonjour tt le monde
    je vaux programmer ELCD avec pic 16F877 pouvez-vous m’aider svp?

    Publié par abdenbi | 17 décembre 2012, 0 h 08 min
  7. Svp je veux le programme arduino qui affiche sur un lcd le nombre de battement et l’etat des yeux a l’aide des electrodes ..

    Publié par marwa | 10 mai 2013, 19 h 20 min
  8. Un petit bonjour après tant de temps depuis la publication.
    Je viens d’acquérir un écran du même type (LCD secrie de lextronic 4×20) et je n’arrrive pas / ne voie pas comment le brancher sur la carte arduino ( je possède une méga). J’ai le câble 3 fils; rouge/noir/blanc. Je sais que le rouge et noir sont pour l’alimentation (5V;GND) mais je ne sais pas si le fil blanc doit se trouver à un endroit précis de la carte arduino.

    J’espère que vous pourrez m’aider.

    Publié par Clement B-C | 14 juin 2015, 12 h 27 min
    • Rouge -> 5v
      Noir -> GND
      Blanc -> TX Arduino (D1 pour Serial, D18 pour Serial1, D16 pour Serial2, D14 pour Serial3)

      Publié par Skywodd | 14 juin 2015, 14 h 55 min
      • D’accord merci beaucoup :D.
        Qu’elle est la configuration à écrire sur le programme arduino pour que celui-ci sache que l’écran LCD est là (je sais qu’il faut importer la librairie LiquidCrystal) mais après ??

        Publié par Clement B-C | 14 juin 2015, 17 h 00 min
      • Tu as le code juste au dessus …
        Tu ne dit pas à la carte que l’écran existe.

        Et non, pour cette écran, tu n’as pas besoin de LiquidCrystal. Ce n’est pas un écran classique, c’est un écran série.

        Publié par Skywodd | 14 juin 2015, 17 h 03 min
  9. Hum…okay 😀
    Bah merci beaucoup pour ton aide !!!!

    Publié par Clement B-C | 14 juin 2015, 17 h 17 min

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.