Hi all -.^
[With Arduino2009 + SparkFun SerLCD 16x2]
Since I'm trying to define more than 8 CGRAM characters without success (HD44780 speak about more ?) I saw what is possible to redefine "on fly" custom characters because CGRAM is refresh continuously.
It could be another way to make small animate icons etc. ^.^
But I get something unexpected: When I try to write after half the bottom line of the LCD it compromises other parts of the screen O.o
(start blinking, etc.)
I'm a bit noob with those gears, so here is a simple code:
#include <SoftwareSerial.h>
#define txPin 2
SoftwareSerial LCD = SoftwareSerial(0, txPin);
void setup()
{
pinMode(txPin, OUTPUT);
LCD.begin(9600);
// définition des graphiques par défaut
setGFX(0,152,152,128,131,132,132,131,128); // °C
setGFX(1,128,128,130,135,130,128,128,128); // +
setGFX(2,128,128,128,135,128,128,128,128); // -
setGFX(3,138,159,145,142,132,132,152,128); // prise
setGFX(4,142,145,145,145,145,145,159,128); // batterie (vide à l'origine)
setGFX(5,128,128,128,128,128,128,128,128); //
setGFX(6,128,128,128,128,128,128,128,128); //
setGFX(7,128,128,128,128,128,128,128,128); //
// initilisation de l'affichage
setBackLight();
clearLCD();
}
void loop()
{
selectLineOne();
LCD.print(3, BYTE);
LCD.print(" 14.21V");
LCD.print(" ");
LCD.print(1, BYTE);
LCD.print("19.4");
LCD.print(0, BYTE);
selectLineTwo();
LCD.print(4, BYTE);
LCD.print(" 3.12A");
//LCD.print(" ");
//LCD.print("test");
setGFX(4,142,145,145,145,145,145,159,128); // batterie vide
delay(500);
setGFX(4,142,145,145,145,145,159,159,128); // batterie 1/5
delay(500);
setGFX(4,142,145,145,145,159,159,159,128); // batterie 2/5
delay(500);
setGFX(4,142,145,145,159,159,159,159,128); // batterie 3/5
delay(500);
setGFX(4,142,145,159,159,159,159,159,128); // batterie 4/5
delay(500);
setGFX(4,142,159,159,159,159,159,159,128); // batterie pleine
delay(750);
}
void setGFX(byte pos, byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8){
LCD.print(0xFE, BYTE); // appel de fonction sur le HD44780
LCD.print(64 + pos * 8, BYTE); // accès à la CGRAM
LCD.print(b1, BYTE);
LCD.print(b2, BYTE);
LCD.print(b3, BYTE);
LCD.print(b4, BYTE);
LCD.print(b5, BYTE);
LCD.print(b6, BYTE);
LCD.print(b7, BYTE);
LCD.print(b8, BYTE);
}
void selectLineOne(){ // place le curseur au début de la ligne 1
LCD.print(0xFE, BYTE);
LCD.print(128, BYTE);
delay(2);
}
void selectLineTwo(){ // place le curseur au début de la ligne 2
LCD.print(0xFE, BYTE);
LCD.print(192, BYTE);
delay(2);
}
void setBackLight(){
LCD.print(0x7C, BYTE);
LCD.print(130, BYTE);
delay(100);
}
void clearLCD(){
LCD.print(0xFE, BYTE);
LCD.print(0x01, BYTE);
delay(10);
}
void resetLCD(){
LCD.print(0xFE, BYTE);
LCD.print(0x72, BYTE);
}
If you uncomment lines 36 & 37 you can see what's append.
I hope my code and my English is not too bad,
thanks for any help .