Afficheur LCD I2C n'affiche que des chiffres.

Bonjour à tous,
Moi c’est Olivier et je débute dans arduino :-*

J’ai pas mal galéré pour avoir la bonne bible I2C et quand j’ai enfin réussi a ce que mon programme soit correctement vérifié je le téléverse et au lieu d’avoir le bon texte j’ai des chiffres a la place :o

lcd 20x4 I2C ; arduino Uno

voici mon code qui est surement issu d’un exemple basic , mais chez moi la 1er ligne c’est “29556” au lieu de “voici un test” et 2 eme ligne qui est bien décalé de 5 caractère vers la droite j’ai 28261 .

je sent que c’est un truc con mais je ne trouve pas :frowning:

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR 0x3F // <<—– Mettre votre adresse
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
lcd.begin (20,4); // <<—– My LCD was 16×2
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home

lcd.print('voici un test');
lcd.setCursor (5,3);
lcd.print( '2eme ligne');
}

void loop()
{

}

merci pour votre aide.
Olivier

bonjour,
un I2C utilise 2 pins avec le 5v et gnd, donc pourquoi en utiliser autant?
franchement rare d’avoir une adresse en 0x3f, généralement 0x27

le hello world ressemble à ca

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello, world!");
}

void loop()
{
}

photo ou lien de ton lcd

Autant de pins, c'est pour definir le cablage entre les pins de sortie du pcf8574 et celles d'entree du hd44780.
Cela modifie l'ordre des bits transmis sur le bus i2c.

Vus les symptômes, cela ressemble à une inversion des bits data

lcd.print('voici un test');

ce ne serait pas plutot lcd.print("voici un test"); ???

Bonjour,

Merci pour vos réponses c'est déjà super !

L'adresse c'est bien 0x3f j'ai vérifié avec une apply de scanner .

Pour le Nb de broche j'avoue n'avoir pas tout compris car l'LCD est soudé a un plug qui lui repart effectivement sur A4 et A5 de l'arduino et le +5V et gnd , a quoi correspond donc tout ces déclaration de pin ? entre lcd et le module i2c ? Je suis un peu dans le flou sur ça et pour mon test j'ai juste pris un exemple au pif pour au moins voir quelque chose s'allumer ^^ :smiley:

-> ce ne serait pas plutot lcd.print("voici un test"); ???

Je suis au bureau je testerais a midi , mais pour la syntaxe Ardunio on ne peu pas remplacer les " par des ' ..? ça serait ça qui causerait le pb !! :o

les guilements et les ' sont vraiments différents ... même dans la syntaxe Arduino

petit exemple vite fait

void setup() {
  Serial.begin(9600);
  Serial.println('toto'); // affiche 29807
  Serial.println("toto");// affiche toto
}

void loop() {
}

Bonjour,

Oui c'est effectivement ça le problème.
Le compilateur interprète comme une valeur 16 bits les deux derniers caractères 'st'.
Ce qui donne comme valeur 256*'s'+'t' soit 256*115+116=29556.

Bon ben voila c'est bien ce que je disait hier soir .. un truc con :confused:

Merci vraiment pour votre aide .

raolivi:
Pour le Nb de broche j’avoue n’avoir pas tout compris car l’LCD est soudé a un plug qui lui repart effectivement sur A4 et A5 de l’arduino et le +5V et gnd , a quoi correspond donc tout ces déclaration de pin ? entre lcd et le module i2c ? Je suis un peu dans le flou sur ça et pour mon test j’ai juste pris un exemple au pif pour au moins voir quelque chose s’allumer ^^ :smiley:

En fait ce n’est pas très compliqué.
L’écran LCD lui-même est piloté par on contrôleur HD44780 qui a une bonne douzaine de broches d’entrées. C’est la rangée de connecteurs que l’on voit au bord du PCB sur lequel est soudé l’écran.
Ce sont les Rs, En, D0 à D7, etc.

Mais on n’est pas obligé de toutes les utiliser. En se plaçant en mode 4 bits de données, on peut tout faire avec 7 ou 8 broches reliées.

Pour fonctionner en I2C, on intercale un IO expander 8 bits entre l’arduino et le LCD.
En général c’est un PCF8574
L’arduino lui envoie un octet via le bus I2C.
Cet octet donne la valeur des 8 sorties du PCF8574, elles-mêmes reliées aux entrées du LCD.

Ta bibliothèque permet de paramétrer quelle sortie du PCF (c’est-à-dire quel bit de l’octet de commande) est reliée à quelle entrée du LCD.

Là tu as du bol ton paramétrage “au pif” semble fonctionner.
Sinon il suffit de prendre un ohmmètre, le schéma de brochage du PCF8574 (dans le datasheet) et vérifier les connexions entre ses sorties et les entrées du LCD.