[RESOLU] SerLCD et écran 4 lignes (Sparkfun LCD-09568)

Bonjour,

Je viens d’acquérir l'écran LCD 20x4 de Sparkfun (ref LCD-09568). Il fonctionne bien, mais je ne peux pas adresser la ligne 3 et 4 directement

Voici l'exemple de base que j'ai un peu modifié

#include <SoftwareSerial.h>
#include <serLCD.h>
 
// Set pin to the LCD's rxPin
int pin = 2;
char Buf[10]; 

serLCD lcd(pin);
 
void setup()
{
  lcd.clear();
  
  for (int i=1; i<=4; i++)
    {
      lcd.selectLine(i);
      sprintf(Buf, "Ligne %i", i);
      lcd.print(Buf);
    } 
}
 
void loop() {}

M'affiche

Ligne 1
Ligne 2Ligne 3Ligne 4Ligne
4

J'ai bien téléchargé la lib ici
http://www.arduino.cc/playground/Learning/SparkFunSerLCD

Dans le code de SerLCD.cpp il y a

/* Initialize.. not used trying to implement all display sizes
void serLCD::init(int pin, int rows, int cols){
	pinMode(pin, OUTPUT);
	delay(4);
	begin(9600);
	if(cols == LCD_20CHAR){
		_numchars = LCD_20CHAR;
		specialCommand(LCD_SET20CHAR);
	}else{ // default to 16 char display
		_numchars = LCD_16CHAR;
		specialCommand(LCD_SET16CHAR);
	}

Avec marqué Not Used pour la fonction init ???

Je ne comprend pas comment il est alors sensé détecter que c'est un écran 20x4 et non pas 16x2 ?

Je ne connais pas trop le SerLCD mais as-tu essayé d'utiliser la librairie standard LiquidCrystal ?

Ou du moins est-ce possible ?

C'est un écran série, il n'utilise que 3 fils (c'est ça qui est bien :slight_smile: )
(5v GND et Rx)

Donc je ne pense pas qu'on puisse utiliser la librairie LiquidCrystal

En tout cas tu as les broches nécessaires RW , RS , enable et B4-B7

Je ne sais pas pourquoi la fonction init() est en commentaire mais a priori c'est pourtant celle-ci qu'il faut utiliser.
En regardant plus en détail il y a plein de limitation à un écran de 16x2
par exemple :

void serLCD::setCursor(int row, int col){
        int row_offsets[2][4] = {
                { 0x00, 0x40, 0x10, 0x50 },
                { 0x00, 0x40, 0x14, 0x54 }
        };
        if((row > 0 && row < 3) && (col > 0 && col < 17)){
           command(LCD_SETDDRAMADDR | ((col - 1) + row_offsets[_rowoffset][(row - 1)]));
        }
}

row ne peut valoir que 1 ou 2 et col uniquement entre 1 t 16

En gros, cette lib n'est pas terminée, probablement par ce que le gars qui l'a écrit n'avait que le modele 16x2 et n'a pas pu tester le modèle 4x20
Il va falloir que tu t'y colles et ensuite tu publie ta version améliorée.

EDIT : Ici, ils listent plein de lib compatibles avec l'écran série de Sparkfun. Toi trouver bonheur ? :wink: Arduino Playground - LCD

Résolu.
Parfait, merci à vous.
XD