LOCODUINO
Parlons Arduino => Vos projets => Discussion démarrée par: Pilou3837 le novembre 02, 2021, 07:12:30 pm
-
Bonjour,
J'ai realisé ce montage pour sonoriser la partie village de mon reseau .
J'utlise un lecteur de carte SD MP3 TF16P et un ecran LCD 16x2 pour voir l'etat des lectures N° piste, pause, start ...
les commandes sont pilotées par une petite telecommande Eleegoo
Le fichier fonctionne parfaitement et les piste sont jouées correctement
J'ai juste un petit soucis sur l affiche du LCD :
sur la premiere ligne j affiche "lecteur MP3" et "OK" si connection correcte ou "erreur" si echec connection serie pas de soucis ici
Sur la deuxieme ligne j affiche l etat du lecteur par exemple "pause". par contre si j affiche 1 apres pause j'ai à l affichage "1ause"
Y a t il un moyen de faire disparaitre le precedent affichage pour eviter que la commande suivante apparraise incluse dans la commande précedente.
J'ai testé avec clear ou display mais sans succes ( clear efface tout y compris la premiere ligne ) .
Quelqu'un aurait une astuce ?
Merci
Pierre
-
Bonsoir Pierre,
et si tu rajoutes des espaces après le 1 jusqu'à la fin de la ligne... Ce n'est peut-être pas la plus technique des méthodes.
-
Bonsoir,
lcd.setCursor(0, 1); est exécuté à chaque loop.
il faudrait positionner le curseur à (2, 1) avant lcd.print("pause"); (que je n'ai pas trouvé)
-
Ok merci je vais tester cela, ça me semble logique
Pierre
-
Bonjour
Je me suis fait 2 petits programmes pour tester les adresses I2c (LCD => 0x3f ou 0x27)
1 => 2 lignes
2 => 4 lignes
Si cela peut aider
-
lcd.setCursor(0, 1); est exécuté à chaque loop.
il faudrait positionner le curseur à (2, 1) avant lcd.print("pause"); (que je n'ai pas trouvé)
Mais qui n'effacerait quand même pas le mot PAUSE, d'où les espaces proposés
Cordialement
Antoine
-
... on ne sait pas ce qui recherché !
-
Sur la deuxieme ligne j affiche l etat du lecteur par exemple "pause". par contre si j affiche 1 apres pause j'ai à l affichage "1ause"
Y a t il un moyen de faire disparaitre le precedent affichage pour eviter que la commande suivante apparraise incluse dans la commande précedente.
D'après ce que j'ai compris, en voulant afficher lors d'une seconde boucle un "1", il reste une partie du premier affichage cad "ause", d'où l'idée d'afficher plutôt qu'un "1", un "1 " avec le nombre d'espace pour remplir la ligne.
Est-ce cela Pierre ?
-
Oui c est cela
Si je positionne setCursor dans chaque Case au lieu de le mettre en debut de boucle ca ne change rien
ex
case 0xFF30CF:// bouton 1 lecture fichier 0001
Serial.println("1");
MP3.play(1);
lcd.setCursor(0, 1);// Affiche information du lecteur sur la deuxième ligne
lcd.print ("1");
break;
L idée serait de n effacer que la deuxieme ligne a chaque boucle , la fonction clear dispo dans la biblio liquidcrystal efface systematiquement les deux lignes .
En jouant avec les espaces on s en sort et l affichage est propre
Merci à tous
Pierre
-
La solution de Tony04 est bonne.
Dans ta loop ,effectivement tu positionnes ton texte sur la 2ème ligne en colonne 0.
Donc pour effacer à coup sûr le texte précédent envoie systématiquement 16 caractères (texte suivi d'espace).
exemple:
case 0xFFA25D: // bouton Power pas d action
Serial.println("POWER");
lcd.print ("POWER "); // 5 caractères suivi de 11 espaces
break;