PB affichage LCD 16 x 4

Bonjour,

je viens de connecter un LCD 16 X 4 en I2C comme suit :

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,4);


void setup() {

  lcd.init();          
  lcd.backlight();
  lcd.clear(); }

 lcd.setCursor(0,0); lcd.print(temperature); 
 lcd.setCursor(0,1); lcd.print(Consigne);
 lcd.setCursor(1-5,2); lcd.print(humidite);
 lcd.setCursor(1-5,3); lcd.print(ConsigneH);

après plusieurs heures de recherche, j'ai trouvé cette astuce pour que le curseur des lignes 3 et 4 commence au début de la ligne.

pourquoi lorsque j'écris " lcd.setcursor (0,2);" le curseur se positionne en milieu de ligne?? et idem pour la ligne 4... :o

Pourquoi donc cette bizarrerie...?!?
J’aimerai bien comprendre...

Bonjour,

Tu es bien sûr que tu as bien un lcd 16x4 ?
Les lcd 4 lignes les plus courants sont des 20x4.

Bah oui...
16 characteres par ligne et 4 lignes.

Tu peux poster une photo, une référence, une datasheet ? En effet, mettre une coordonnée négative, ça semble bizarre...

J’essai de Poster photos ce soir.

Concernant data sheet, j’ai ça :

1604 LCD
connexion Pin Header
Format d'affichage 16x4 Caractère
Lisible en plein soleil Pas
écran Tactile En Option Aucun
Outline Dimension 87.0 (W) x60.0 (H) x12.5 (T) mm
Aire visuelle 61.70x25.20mm
Zone Active 56.20x20.80mm
caractère Taille 2.95x4.75mm
diagonale Taille Pas
Dot (Pixel) Taille 0.55x0.55mm
Pas de Masque 0.60x0.60mm
IC Paquet COB
IC ou Équivalent AIP31066, HD44780, KS0066, SPLC780, ST7066
Interface 6800 4-bit Parallèle, 6800 8-bit Parallèle
Type d'affichage STN-LCD Bleu
Temps de réponse (Typ) Aucun
rapport de Contraste (Typ) Aucun
couleurs Aucun
regarde Direction 6:00
le champ visuel Angle Pas
aspect Blanc sur Bleu
luminosité (Typ) Aucun
rétro-éclairage Couleur bleu Couleur
rétro-éclairage Actuel (Typ) 45mA
Alimentation (Typ) 5.0 V
Courant d'alimentation pour LCM (Max) 1800uA
Température de fonctionnement-20 ° ~ 70 °
Température de stockage-30 ° ~ 80 °

la marque, le modèle, un lien ?

Je l’ai acheté chez un célèbre ali...
Ce trouve direct en recherchant sur leur site : Arduino lcd 16X4

Distribué par CZB electronic.

Est-ce similaire à celui-ci ?

L'adresse 0x27 est donnée par un scanner ?

Peux-tu tester ceci :

//Compatible with the Arduino IDE 1.6.5
//Library version:1.1
//   A4 - SCL, A5 - SDA, VCC, GND
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,4);  // set the LCD address to 0x27 or 0x20

void setup()
{
  lcd.init();     // initialize the lcd 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Hello, world!");
  lcd.setCursor(0,1);
  lcd.print("AxyeTb!");
  lcd.setCursor(0,2);
  lcd.print("I2C 1604 DEMO");
  lcd.setCursor(0,3);
  lcd.print("UGR Edition");
}


void loop()
{
}

Je viens de mettre ton code, et le problème est bien le même:

  • 2 première ligne ok
  • ligne 3 et 4 qui commence au milieu de la ligne (1er caractère en 5 éme position)

voila la bête avec l'erreur d'affichage !

vue arrière avec module I2c

En fouillant dans la bibliothèque on trouve ça :

void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
 int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
 if (row > _rows) {
 row = _rows-1;    // we count rows starting w/0
 }
 command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}

Avec, dans le .h:

#define LCD_SETDDRAMADDR 0x80

J'imagine qu'en modifiant

0x14, 0x54

en

0x10, 0x50

ça devrait corriger le problème (ôter 4). Mais c'est peut-être un peu plus compliqué que ça : il faudrait rentrer dans le code de la fonction 'command' qui elle même appelle 'send' qui appelle 'write4bits' qui utilise la bibli 'Wire'... autant tester ces valeurs et voir ce que ça donne !

"A force d'essayer, on y arrivera ..."

Je ne sais pas si c'est juste une bidouille ou s'il y a vraiment un problème dans la bibli... mais on sent bien que les valeurs du tableau sont différentes pour les deux dernières lignes !

tu peux essayer avec la librairie LCD disponible ici