ca fait pas si longtemps ;) mais ca fais plaisir de voir que je te manque 8)
oui c'est bien ca, sur 18 lignes après réorganisations.
et voici les déclarations dans la librairie :
uint16_t NexText::getText(char *buffer, uint16_t len)
{
String cmd;
cmd += "get ";
cmd += getObjName();
cmd += ".txt";
sendCommand(cmd.c_str());
return recvRetString(buffer,len);
}
bool NexText::setText(const char *buffer)
{
String cmd;
cmd += getObjName();
cmd += ".txt=\"";
cmd += buffer;
cmd += "\"";
sendCommand(cmd.c_str());
return recvRetCommandFinished();
}
J'ai bosser dessus toute la journée et j'ai réussi a l'intégrer dans la fonction qui lis la carte sd :
/* lis sur la carte SD */
boolean lisSurSd(const char * nomDuFichierTxt, char *donneeLueSurSD, size_t indexEcritureMAX) {
boolean lectureOK = false; // retourne l'etat de lecture
uint8_t i = zero;
uint8_t ligneNextion = 0;
uint16_t rechercheLigne = 0;
DPRINTF("Ouverture de : "); DPRINTLN(nomDuFichierTxt);//debug
myFile = SD.open(nomDuFichierTxt, O_READ); // ouvre le fichier
if (myFile) {
donneeLueSurSD[0] = '\0'; // on initialise la chaine à vide
while (myFile.available()) { // on lit l'intégralité du fichier, à concurrence de l'espace dispo dans notre buffer
if (i < indexEcritureMAX) {
donneeLueSurSD[i] = myFile.read(); // lit le fichier
i++;
if (pageActuelNextion == sd) {
if (donneeLueSurSD[i - 1] == '\n') {
donneeLueSurSD[i] = '\0'; // il n'y a plus rien à lire dans le fichier, on termine
i = 0;
DPRINTF("ligne nextion :"); DPRINT(ligneNextion); DPRINTF(" / ligne actuel :"); DPRINT(ligneActuel); DPRINTF(" / rechercheligne :"); DPRINT(rechercheLigne); DPRINTLN();
if (rechercheLigne == ligneActuel) {
ligneActuel++;
switch (ligneNextion) {
case 1:
valeursd00.setText(donneeLueSurSD);
break;
case 2:
valeursd01.setText(donneeLueSurSD);
break;
case 3:
valeursd02.setText(donneeLueSurSD);
break;
case 4:
valeursd03.setText(donneeLueSurSD);
break;
case 5:
valeursd04.setText(donneeLueSurSD);
break;
case 6:
valeursd05.setText(donneeLueSurSD);
break;
case 7:
valeursd06.setText(donneeLueSurSD);
break;
case 8:
valeursd07.setText(donneeLueSurSD);
break;
case 9:
valeursd08.setText(donneeLueSurSD);
break;
case 10:
valeursd09.setText(donneeLueSurSD);
break;
case 11:
valeursd10.setText(donneeLueSurSD);
break;
case 12:
valeursd11.setText(donneeLueSurSD);
break;
case 13:
valeursd12.setText(donneeLueSurSD);
break;
case 14:
valeursd13.setText(donneeLueSurSD);
break;
case 15:
valeursd14.setText(donneeLueSurSD);
break;
case 16:
valeursd15.setText(donneeLueSurSD);
break;
case 17:
valeursd16.setText(donneeLueSurSD);
break;
case 18:
valeursd17.setText(donneeLueSurSD);
break;
}
if (ligneNextion >= nbr2Lignes) {
donneeLueSurSD[i] = '\0'; // ajoute caractere de fin
lectureOK = true; // la lecture c'est bien passé
myFile.close(); // ferme le fichier
break;
}
ligneNextion++;
}
rechercheLigne++;
}
}
}
else {
donneeLueSurSD[indexEcritureMAX] = '\0'; // ajoute caractere de fin
break;
}
}
donneeLueSurSD[i] = '\0'; // il n'y a plus rien à lire dans le fichier, on termine
lectureOK = true; // la lecture c'est bien passé
myFile.close(); // ferme le fichier
effaceBufferTexte(); // efface le buffer
strncpy_P (bufferTexte, texteNextionImportationDe, maxbufferTexte); // recupere "char" en memoire flash et le copie
bufferTexte[maxbufferTexte] = '\0'; // ajoute le caractere de fin
if (strlen(bufferTexte) + strlen(nomDuFichierTxt) < maxbufferTexte) {
strcat(bufferTexte, nomDuFichierTxt); // ajoute a la chaine de caractere
if (strlen(bufferTexte) + strlen(nomDuFichierTxt) < maxbufferTexte) {
strcat(bufferTexte, ", OK"); // ajoute a la chaine de caractere
if (pageActuelNextion == demarrage) { // si l'ecran est sur la page de demarrage
texte4.Set_font_color_pco(vert); // texte couleur vert
texte4.setText(bufferTexte);// envoi char a l'ecran nextion// envoi char a l'ecran nextion
DDELAY(mille);
}
else {
effaceBufferTexte();
strncpy_P (bufferTexte, texteNextionPasDeFichier, maxbufferTexte); // recupere "char" en memoire flash et le copie
bufferTexte[maxbufferTexte] = '\0'; // ajoute le caractere de fin
strcat(bufferTexte, nomDuFichierTxt); // ajoute a la chaine de caractere
if (pageActuelNextion == demarrage) { // si l'ecran est sur la page de demarrage
texte4.Set_font_color_pco(rouge); // text couleur rouge
texte4.setText(bufferTexte);// envoi char a l'ecran nextion// envoi char a l'ecran nextion
}
DPRINT(bufferTexte); DPRINTLN(); // debug
DDELAY(mille);
}
DPRINT(bufferTexte); DPRINTLN(); // debug
}
else {
DPRINTF("probleme de place memoire dans lisSurSd niveau 2"); DPRINTLN(); // debug
}
}
else {
DPRINTF("probleme de place memoire dans lisSurSd niveau 1"); DPRINTLN(); // debug
}
}
else {
myFile = SD.open(nomDuFichierTxt, O_WRITE | O_CREAT | O_AT_END);
myFile.close(); // ferme le fichier
}
return lectureOK;
}
en faite je compte les saut de ligne pour pouvoir "naviger d'une page a une autre :
si je click bas je prend la suite de la dernier ligne lu
Si je click haut je soustrait 38 a la ligne actuel, je compte les saut de ligne est quand je suis a l'identique j'affiche les 18 lignes suivante.
mais plus on descend et plus c'est long (le temps de recompter les saut de ligne depuis le début)
d'un autre cote je me dit que ce n'est pas une fonction principal et qu'il ne faut peut être pas monter une usine a gaz.
je post une vidéo bientot