Problème de Programme d'Animation sur Ecran LCD

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


//Le haut de la planche

byte planche[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b11111,
  0b00000
};

//le Bas de la planche

byte planche2[8] = {
  0b00000,
  0b11111,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

//Les trois parties du "cul" du skate

byte cul[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b11100,
  0b00010,
  0b00001,
  0b00000,
  0b10000
};

byte cull[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b00001,
  0b00010,
  0b00010,
  0b00001,
  0b00000
};

byte culll[8] = {
  0b01000,
  0b00111,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

//Les trois parties du "nose" du skate

byte nez[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b00111,
  0b01000,
  0b10000,
  0b00000,
  0b00001
};

byte nezz[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b10000,
  0b01000,
  0b01000,
  0b10000,
  0b00000
};

byte nezzz[8] = {
  0b00010,
  0b11100,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

//La roue en position 1

byte rouee[8] = {
  0b00100,
  0b01010,
  0b10101,
  0b01010,
  0b00100,
  0b00000,
  0b00000,
  0b00000
};

//La roue en position 2

byte roue[8] = {
  0b11111,
  0b10001,
  0b10101,
  0b10001,
  0b11111,
  0b00000,
  0b00000,
  0b00000
};

void setup() {
  // initialize LCD and set up the number of columns and rows:
  lcd.begin(16, 2);

  // create a new character
  lcd.createChar(1, planche);
  // create a new character
  lcd.createChar(2, planche2);
  // create a new character
  lcd.createChar(3, cul);
  // create a new character
  lcd.createChar(4, cull);
  // create a new character
  lcd.createChar(5, culll);
  // create a new character
  lcd.createChar(6, nez);
  // create a new character
  lcd.createChar(7, nezz);
  // create a new character
  lcd.createChar(8, nezzz);
  // create a new character
  lcd.createChar(9, roue);
  // create a new character
  lcd.createChar(10, rouee);

Bonjour, j'ai récemment acquis le Super Starter Kit Uno R3 Project, et j'ai voulu m'amuser un peu avec l'écran LCD (Je préçise je suis un total débutant dans l'arduino)

Je voudrais programmer une animation de skate avec les roues qui tournent pour faire genre il roule :smiley:
Mais j'ai un problème: comme vous le voyez sur mon code, je crée différents caractères que j'associe à des numéros pour pouvoir créer le Skate. Mais voila mon problème: quand je créer uniquement la planche (lcd.create) jusq'au nombre 8 inclus donc sans les roues et que je les place dans mon code de manière à les afficher sur le LCD (je ne vous l'ai pas mis dans le code car c'est uniquement au niveau des lcd.create qu'est le problème) cela marche super bien, mais dès que je crée le lcd.create des roues, donc associées aux nombres 9 et 10, sans même les placer plus loin dans mon Loop, cela change toutes les case de la planche (au numéro 1) par ces roues pourtant les deux sont associés à des nombres différent oO. De plus quand j'essaye de changer le numéro de la roue, l'associer par exemple au 11, au 12,.. (j'ai fais tout les nombres jusque 30) cela change immédiatement une des différentes case de mon LCD par la roue alors que je ne l'ai absolument pas mis dans mon Loop. Voilà mon problème :confused: il doit y avoir certainement des connexion cachées de nombres que je ne connait pas mais à ce momen suis-je condamné à devoir utiliser uniquement 8 caractères personnalisé? Etant donné que à partir du nombre 9 plus rien ne marche...

Bonjour,

Ben oui, il n'y a que 8 caractères personnalisés, donc si tu essaies d'en créer un 9ème (ou plutôt d'en modifier un) ça modifie l'affichage si celui ci est affiché.

Ah ! Il n'existe donc aucun moyen de programmer ma petite animation sur mon écran LCD ?

C'est pas impossible mais il faut apprendre à faire avec ce que tu as.
C'est à dire:

  • les caractères existant dans l'afficheur
  • et seulement 8 caractères programmables
    C'est peu mais le challenge est peut-être là justement :slight_smile:

Petite précision : c'est 8 caractères personnalisés affichables simultanément, à un instant t.

Rien ne t'empèche de les redéfinir aussi souvent que tu le souhaites.

Imaginons par exemple que tu veuilles représenter une roue qui tourne, en affichant au même endroit une succession de caractères personnalisés pour donner l'impression d'une rotation.

Dans ce cas, au niveau du LCD, tu utilises un seul caractère personnalisé, affiché une seule fois par LCD.print() et tu redéfinis son apparence à intervalles réguliers.

En regardant ton code, il me semble que tu n'as besoin que de 4 caractères personnalisés.
un pour la planche
un pour l'arrière
un pour le nez
un pour les roues

Et chacun de ces caractères peut être reprogrammé à la volée parmi plusieurs possibilités que tu as commencé à définir dans ton programme.

Un petit programme de test pour illustrer :

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


//Le haut de la planche

byte planche[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b11111,
  0b00000
};

//le Bas de la planche

byte planche2[8] = {
  0b00000,
  0b11111,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

char car_planche = 1;

void setup() {
  // initialize LCD and set up the number of columns and rows:
  lcd.begin(16, 2);

  lcd.setCursor(0, 0);
  for (byte i=0; i<10; i++) lcd.print(car_planche);
}

void loop() {
  lcd.createChar(1, planche);
  delay(1000);
  lcd.createChar(1, planche2);
  delay(1000);  
}

Et hop ! normalement les 10 caractères 1 affichés changent d'apparence chaque seconde.