Pour mon baromètre / altimètre, j'avais utilisé un programme fait par je ne sais plus qui (la honte) pour afficher les informations sur un écran LCD 16x2.

Mais j'aime bien faire les choses moi-même, alors j'ai récemment repris la doc de mon afficheur et je m'y suis mis. Finalement, pas bien compliqué!

Le module en question est le ELCD 162, qui dispose d'une communication série à 19200 baud/s.

J'ai écrit une classe qui permet d'initialiser l'engin, de positionner le curseur, d'écrire du texte, de faire un reset, d'afficher ou non le curseur.

C'est assez facile à utiliser. Il faut :

  • Initialiser un port série (j'utilise le SoftwareSerial, comme ça je peux toujours afficher des traces dans l'IDE Arduino avec le port série hardware)
  • Créer un objet LCD, en lui passant notre objet SoftwareSerial
  • Envoyer la purée sur l'afficheur, wouhou!

Voici un exemple de code :

[cpp]

include <lcd.h>

include <SoftwareSerial.h>

SoftwareSerial srl; LCD lcd; void setup() { srl = new SoftwareSerial(3,2);//rx, tx (on connecte l'afficheur au pin 2) srl->begin(19200);

lcd = new LCD(srl); lcd->print("Ouais, gros!"); }

void loop() {

}

[/cpp]

Allez, c'est cadeau !

Voici le fichier la déclaration de la classe :

[cpp]

ifndef LCD_h

define LCD_h

include "Stream.h"

include "Arduino.h"

class LCD { private: Stream *_serial;

public:

LCD(Stream *s); void reset(); void moveTo(int x, int y); void print(String str); void hideCursor(); void showCursor(); };

endif

 

[/cpp]

Et l'implémentation :

[cpp]

include "lcd.h"

LCD::LCD(Stream *s) { _serial = s;

_serial->write(0xA0); delay(150);

reset(); }

/**

  • Réinitialise l'écran */ void LCD::reset() { _serial->write(0xA3); _serial->write(0x01); delay(150); }

/**

  • Déplace le curseur à la colonne x et la ligne y */ void LCD::moveTo(int x, int y) { _serial->write(0xA1); _serial->write(x); _serial->write(y); delay(150); }

/**

  • Affiche du texte à partir du curseur */ void LCD::print(String str) { _serial->write(0xA2); delay(100); for(int i=0;i<str.length();i++) _serial->write((char)(str.charAt(i)));

int zero = 0; _serial->write(zero); delay(100); }

/**

  • Masque le curseur */ void LCD::hideCursor() { _serial->write(0xA3); _serial->write(0x0C); }

/**

  • Affiche le curseur */ void LCD::showCursor() { _serial->write(0xA3); _serial->write(0x0E); }

[/cpp]

Faites-vous plaisir :)

*Rhaaaa mais qu'il m'énerve, ce SyntaxHighlighter avec sa perte d'indentation! Tant pis, je laisse comme ça...

Article précédent Article suivant