[solve]quel librairie pour lcd l2c

Bonjour,

je suis débutant et j'ai acheté un lcd 20x4 lignes avec une interface i2c sur ebay. (la version longue du nom c'est Serial IIC/I2C/TWI 2004 204 20X4 Character LCD Module Display For Arduino Blue)

J'essaye désespérément de le faire afficher hello word et rien a faire.
Sachant que le cablage est relativement simple avec une interface i2c et que je l'ai vérifié 3 fois je pense qu'il s'agit d'un problème de librairie
J'ai trouve une multitude de librairie avec des plus nom barbare les uns que les autre, je ne sais pas laquelle utiliser

quel librairie faut-il utiliser sur mon arduino ethernet ?

PS; je sais pas si ca peut jouer mais je suis sur linux ubuntu
PPS: j'ai bien vérifier le potentiomètre de contraste

LiquidcrystalI2C devrait faire l'affaire
Pour le contraste, quand tu baisses la tension de commande (curseur du potar vers le GND, est-ce que l'ecran a tendance a se noircir ?

bonjour
meme avis que barbudor
regarde là, il semble que ce soit ton afficheur avec un peu de doc et code

quand je bouge le potar, il a bien tendance a se noircir (en blanc car les lettres sont blanches dans ce lcd), mais ce qui bizare c’est que 1ere et la 3eme ligne se fonci plus que la 2eme et la 4eme.

pour le lien quand je compile ce sketch

#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(); 
    lcd.backlight();
    lcd.setCursor(0, 0);
    lcd.print("b2cqshop");
    lcd.setCursor(0, 1);
    lcd.print("Voltage: ");
    lcd.setCursor(13, 1);
    lcd.print("V");
}
void loop()
{
    int val;
    float temp;
     val=analogRead(0);
    temp=val/4.092;
    val=(int)temp;//
    lcd.setCursor(9, 1);
    lcd.print(0x30+val/100,BYTE); 
    lcd.print(0x30+(val%100)/10,BYTE); 
    lcd.print('.');
    lcd.print(0x30+val%10,BYTE);
    delay(100);
}

j’ai ce message d’erreur a la compilation

In file included from test_lcd.cpp:2:0:
/usr/share/arduino/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h:81:16: error: conflicting return type specified for ‘virtual void LiquidCrystal_I2C::write(uint8_t)’
/usr/share/arduino/hardware/arduino/cores/arduino/Print.h:48:20: error:   overriding ‘virtual size_t Print::write(uint8_t)’
test_lcd.cpp: In function ‘void loop()’:
test_lcd.cpp:28:28: error: ‘BYTE’ was not declared in this scope

fandz:
j'ai ce message d'erreur a la compilation

In file included from test_lcd.cpp:2:0:

/usr/share/arduino/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h:81:16: error: conflicting return type specified for ‘virtual void LiquidCrystal_I2C::write(uint8_t)’
/usr/share/arduino/hardware/arduino/cores/arduino/Print.h:48:20: error:   overriding ‘virtual size_t Print::write(uint8_t)’
test_lcd.cpp: In function ‘void loop()’:
test_lcd.cpp:28:28: error: ‘BYTE’ was not declared in this scope

probleme de version d'IDE/lib ?

Artouste:
probleme de version d'IDE/lib ?

Problème classique, à mon avis la lib est codé pour 0023 et l'ide est en version 1.0.x :wink:
Il suffit de remplacer lcd.print(xx, BYTE) par lcd.write(xx) est tout devrais revenir à la normal :wink:

je confirme, l'ide est en 1.0.1

par contre, ca ne resout pas le probleme de changer en write

quel est le nouveau message d'erreur ?

ca donne ca

/usr/share/arduino/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h:81:16: error: conflicting return type specified for ‘virtual void LiquidCrystal_I2C::write(uint8_t)’
/usr/share/arduino/hardware/arduino/cores/arduino/Print.h:48:20: error:   overriding ‘virtual size_t Print::write(uint8_t)’

le loop donne ca avec les modifs

void loop()
{
    int val;
    float temp;
     val=analogRead(0);
    temp=val/4.092;
    val=(int)temp;//
    lcd.setCursor(9, 1);
    lcd.write(0x30+val/100); 
    lcd.write(0x30+(val%100)/10); 
    lcd.print('.');
    lcd.write(0x30+val%10);
    delay(100);
}

par contre, ne faut-il pas une librairie adapté a ma version d'ide

j'ai pris celle donnée dans le lien de Artouste

personne n'a d'idée

est-ce possible que ce soit le LCD qui soit défectueusement?

Une erreur de compilation ne peut pas être liée au LCD.

La version que tu as récupéré doit être la V1 qui n'est pas pour le dernier IDE
En suivant le lien proprement depuis l'Arduino Playground tu tombe sur la page de l'auteur avec la dernière version qui passe sans problèmes.

pour ceux que ca interesse et qui aurait le même problème que moi

j’ai utilisé la librairie de F Malpartifa qui est visiblement celle qui fonctionne avec le nouvel IDE pour la puce PCF8574T

par contre au préalable j’ai du utiliser un scanner d’adresse I2C que j’ai obtenu ici
dans mon cas, l’adresse est 0x3F

avec ce sketch et la bonne adresse ca a tout de suite fonctionné

/*
** Example Arduino sketch for SainSmart I2C LCD2004 adapter for HD44780 LCD screens
** Readily found on eBay or http://www.sainsmart.com/ 
** The LCD2004 module appears to be identical to one marketed by YwRobot
**
** Address pins 0,1 & 2 are all permenantly tied high so the address is fixed at 0x27
**
** Written for and tested with Arduino 1.0
** This example uses F Malpartida's NewLiquidCrystal library. Obtain from:
** https://bitbucket.org/fmalpartida/new-liquidcrystal 
**
** Edward Comer
** LICENSE: GNU General Public License, version 3 (GPL-3.0)
*/
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x3F // Define I2C Address where the PCF8574A is
#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

int n = 1;

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);
  
// Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home ();                   // go home

  lcd.print("SainSmart I2C test");  
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print("F Malpartida library");
  lcd.setCursor ( 0, 2 );        // go to the next line
  lcd.print("Test By Edward Comer");
  lcd.setCursor ( 0, 3 );        // go to the next line
  lcd.print("Iteration No: ");
}

void loop()
{
  // Backlight on/off every 3 seconds
  lcd.setCursor (14,3);        // go col 14 of line 3
  lcd.print(n++,DEC);
  lcd.setBacklight(LOW);      // Backlight off
  delay(3000);
  lcd.setBacklight(HIGH);     // Backlight on
  delay(3000);
}