affichage tableau de paramètre sur un afficheur 4*20 lignes I2C

Bonjour^^
je post mon premier topic;
je but sur le principe du scrolling ; je souhaite afficher sur un ecran 420 une liste de parametre contenu dans un tableau ; mon materil : afficheur 420 et 4 boutons poussoir (Fleche Bas;Fleche Haut ; Enter et Echap).
Mon programme fonctionne correctement quand je fait descendre la liste mais quand je remonte la liste ; j’ai un
soucis indexation. Apres x recherches sur differents forum ; aucun forum ne parle de scrolling sur un afficheur 4*20.
Je vous mets le code et j’espere que vous vous me mettez sur la piste pour resoudre ce soucis.

Merci d’avance de votre participation probable.

Joël ( situé en haute Normandie)

/

CODE

PGM_P PROGMEM paramMess = { “Mess 0”, “Mess 1”, “Mess 2”, “Mess 3”, “Mess 4”, “Mess 5”, “Mess 6”, “Mess 7”,
“Mess 8”, “Mess 9”, “Mess 10”, “Mess 11”};

int iPosTabCourant=0;
int indiceScrolling=0;
int bMettreAjourScrollingBas=0;
int bMettreAjourScrollingHaut=0;
int iPositionCurseur=0;
int ifirstAff=0;

void loop()
{
int iPos;
int iNombreParam=12;
int iPosAffichage;
int iPosCalculeIndex;

GestionKeyLcd(); //lecture des BP

iNombreParam=12;

if (iKeyPress==iKeyDOWN && (iPosTabCourant+indiceScrolling) <((iNombreParam)))
{
iPosTabCourant++;
bMettreAjourScrollingBas=1;
Serial.print(“iPosTabCourant:”);
Serial.print(iPosTabCourant,DEC);
Serial.print(" “);
Serial.print(“indiceScrolling:”);
Serial.println(indiceScrolling,DEC);
}
else if ( iKeyPress==iKeyUP && iPosTabCourant>0)
{
iPosTabCourant–;
bMettreAjourScrollingHaut=1;
Serial.print(“iPosTabCourant:”);
Serial.print(iPosTabCourant,DEC);
Serial.print(” ");
Serial.print(“indiceScrolling:”);
Serial.println(indiceScrolling,DEC);
}
else
{
bMettreAjourScrollingHaut=0;
bMettreAjourScrollingBas=0;
}
if ( bMettreAjourScrollingHaut==1 || bMettreAjourScrollingBas==1)
{
lcd.clear();
if ( bMettreAjourScrollingBas==1)
{
if (iPositionCurseur <3)
{
iPositionCurseur++;
}
else
{
iPositionCurseur=3;
indiceScrolling++;
}
}

if ( bMettreAjourScrollingHaut==1)
{
if (iPositionCurseur >0)
{
iPositionCurseur–;
}
else
{
iPositionCurseur=0;
indiceScrolling–;
}
}
}
if ( bMettreAjourScrollingHaut==0 && bMettreAjourScrollingBas==0)
{
lcd.setCursor(1,iPositionCurseur);
}

if(ifirstAff==0 || iKeyPress!=iKeyNoPress)
{
ifirstAff=1;
for(iPosAffichage=0;iPosAffichage<4;iPosAffichage++)
{
if ( iPosTabCourant+iPosAffichage<iNombreParam)
{
lcd.setCursor(1,iPosAffichage);
if( iPositionCurseur== iPosAffichage)
{ //LA c le print de l’item selectionné
lcd.print(paramMess[iPosTabCourant-iPositionCurseur+indiceScrolling+iPosAffichage]);
}
else
{ //la c le print des autres items
iPosCalculeIndex=iPosTabCourant-iPositionCurseur+indiceScrolling+iPosAffichage;
lcd.print(paramMess[iPosCalculeIndex]);
}
lcd.setCursor(1,iPosAffichage);
}
}
}
iKeyPress=iKeyNoPress;
delay(100);
//fin de la prémiere boucle de traitement du top depart
iFirstLoop=1;
}

4_20lcd.JPG

Ton programme me parais compliqué pour juste faire un scroling.
En fait tu dois juste deplacer un fenetre de 4 item sur une liste…

en gros
fleche bas: i++
fleche haut i–

si i <1 alors i=1
si i >fin de liste -4 alors i=fin de liste -4

affichage par une boucle de 4
de i à i+3

Bon ce n’est peut etre pas tres clair… juste une piste.

merci de ta réponse^^ élément compliqué est de garder indexation du tableau affiché... ta piste me donne pas de piste pour garder cette indexation ^^ ps: çà fait 4 jours que je suis dessus ... :roll_eyes: