LCD caractère perso s'affiche mal

Hello, voir tous ces topics sur l’ecran LCD m’a donné envie de jouer avec.

J’aimerai faire une barre tournante. Mais bizarrement, les barres obliques ne fonctionnent pas.

Au départ je voulais faire ça avec les caractères *|/-* mais vu que j’ai la rom chinoise je n’ai ni l’antislash ni la barre verticale…

J’ai donc créé 4 caractères personnalisés. les barres obliques font n’importe quoi. il manque des points où ils sont décalés. Ce n’est évidement pas un problème d’écran et ces points fonctionnent parfaitement si je tente de les allumer seuls.

Voici le code sur l’exemple du site arduino que j’ai adapté

#include <serLCD.h>
#include <SoftwareSerial.h>

//ecran LCD 2x16 sparkfun
#define lcdPin  5
serLCD lcd1(lcdPin);

int t = 0;

byte chars[][8] = {
    {
        B00100,B00100,B00100,B00100,B00100 }
    ,
    {
        B00001,B00010,B00100,B01000,B10000 }
    ,
    {
        B00000,B00000,B11111,B00000,B00000 }
    ,
    {
        B10000,B01000,B00100,B00010,B00001 }

};


void setup() // Fonction setup()
{
    Serial.begin(115200);

    for(int i=0; i < 4; i++)
        lcd1.createChar(i + 1, chars[i]);

    lcd1.clear();
    retroEclerage(1);
}

void loop() // Fonction loop()
{

    lcd1.setCursor(2, 16) ;
    lcd1.printCustomChar((t % 4) + 1);
    t++;
    delay(2000);
}


void retroEclerage(int etat)
{
    if (etat)
        lcd1.setBrightness(30);

    else
        lcd1.setBrightness(1);
}

Voici le résultat des 4 caractères:

00100 00001 00000 00000
00100 00010 00000 00000
00100 00000 11111 00100
00100 00000 00000 00010
00100 10000 00000 00001
00000 00000 00000 00000
00000 00000 00000 00000
00000 00000 00000 00000

Bonjour vohu,
Moi j'aurai mis pour des matrices 5x7 :

| =
B00100
B00100
B00100
B00100
B00100
B00000
B00000
/ =
B00001
B00010
B00100
B01000
B10000
B00000
B00000
- =
B00000
B00000
B11111
B00000
B00000
B00000
B00000
\ =
B10000
B01000
B00100
B00010
B00001
B00000
B00000

@+

Ca donne exactement le même résultat

Re,
Il faut peut être respecter les temps d'écriture, as-tu essayé avec un delay dans ta boucle ?
@+

Je viens d’ajouter un delay(100), toujours parreil,

Mais bon, je pense que ce serait le boulot de la librairie d’ajouter ces délais

Pour être sûr j’ai ajouté un delay dans la librarie :

// Creates custom characters 8 char limit
// Input values start with 1
void serLCD::createChar(int location, uint8_t charmap[]){
    location -= 1;
    location &= 0x07;
  for (int i=0; i<8; i++){
    command(LCD_SETCGRAMADDR | (location << 3) | i);
    write(charmap[i]);
    delay(10);
  }
}

Même résultat

Re,
Si tu affiches qu'un seul des tes caractères perso, que ce passe-t-il ?

Toujours le même problème :frowning:

EDIT, J'ai aussi fait un test en enlevant mon tableau de byte et testé avec 1 seul.

byte obl1[8] = {B00001, B00010, B00100, B01000, B10000, B00000, B00000 };
...
lcd1.createChar(1, obl1);
...
lcd1.printCustomChar(1);

Ca donne autre chose, avec 1 mal placé et 1 non affiché