Imprimer une chaîne et un entier LCD

Comment imprimer une chaîne et un entier sur un LCD? Voici ce que jai essayé:

int number = 2; int result = (number + number); lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC); 

Et le résultat est une erreur. Quand jessaye:

lcd.print(number + "look"); 

ou

lcd.print("1234 " + number); 

Ensuite, le résultat sur lécran LCD est « 34 », car il a supprimé les deux premiers chiffres!

Je veux quil simprime:

1234 2

Sil vous plaît aider! Merci!

Réponse

La méthode lcd.print() prend une chaîne ou un nombre comme un argument, mais pas les deux à la fois. Lutilisation de lopérateur + pour la concaténation nest pas native des chaînes C. Les chaînes C sont essentiellement stockées sous forme de pointeurs vers le premier caractère de la chaîne. Ainsi, lorsque vous avez essayé lcd.print("1234 " + number) et que vous avez obtenu "34 ", vous avez probablement avancé le pointeur, pointant vers le premier caractère de "1234 " (cest-à-dire « 1 ») par number (cest-à-dire 2), faisant ainsi pointer le pointeur vers 3ème caractère dans la chaîne et donc lcd.print() afficher "34 ". Afin dimprimer quelque chose qui contient à la fois des chaînes et des entiers, le moyen le plus simple est de convertir chaque morceau en une chaîne Arduino, puis de les concaténer, en utilisant lopérateur + comme vous lavez fait précédemment.

 lcd.print(String("1234 ") + String(number)); lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result)); 

Voici quelques exemples. Vous pouvez également créer un tampon char suffisamment grand et utiliser sprintf() de stdio.h pour construire une chaîne composée dentiers et de chaînes. Recherchez un manuel sur C / C ++ pour plus de détails.

Réponse

Jai eu le même problème et jai imprimé la chaîne et lentier sur la même ligne en déplaçant le curseur comme ceci:

 lcd.setCursor(0, 0); <----------Column 0 , Line 1 lcd.print("This code failed"); lcd.setCursor(0, 1); <----------Column 0 , Line 2 lcd.print("Error Code = "); lcd.setCursor(13, 1); <-change the cursor for the INT. Column 13 , Line 2 lcd.print(int); 

Commentaires

  • Que se passe-t-il si un premier code derreur est, disons, 1234, alors un autre est 57 … lécran affichera " 5734 " nest-ce pas?

Réponse

Quel est le problème avec ceci:

lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC); 

Cest le nombre de paramètres et lhypothèse que plus concaténera les littéraux de chaîne.

lcd.print("1234 " + number); 

Cela donne « 34 » lorsque le nombre est 2 . Pourquoi? Cest parce que cest le résultat de lajout de 2 au pointeur littéral de chaîne, cest-à-dire la chaîne commençant au caractère « 3 ». Veuillez utiliser des instructions dimpression séparées à la place:

lcd.print("1234 "); lcd.print(number); 

Nutilisez pas String pour concaténer des chaînes. Cest un gaspillage de SRAM, de traitement et présente un risque de fragmentation du tas. Tout simplement une mauvaise idée dans les systèmes embarqués à petite échelle tels que AVR.

Pour comprendre ces erreurs, vous devriez revenir en arrière et lire sur les chaînes et les littéraux de chaîne en C / C ++ (par rapport à Java :).

Cheers!

Réponse

int a=0; float b=10.01; char str[16]; sprintf(str,"a=%d, b=%.2f, c=%d", a, b, 2); // use sprintf() to compose the string str lcd.print(str); 

Le résultat sera « a = 0, b = 10.01, c = 2 »

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *