Salut,
J'ai en projet actuellement de créer différents programmes (dans un but d'apprentissage) interfaçant une application écrite en C++ (avec Qt) et une carte Arduino (Uno), en utilisant la communication série.
J'aimerais ici pouvoir envoyer du texte depuis un UI vers un affichage LCD 16x2.
Du coup, au niveau de la programmation de la carte, pour l'instant j'ai ce programme, dont le but est de récupérer une chaîne de caractère et de l'afficher sur la 1ère ligne.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); Serial.begin(9600); lcd.print("Waiting..."); } void loop() { char data; String line1 = ""; if(Serial.available()) { // Tant que la chaine ne fait pas exactement la longueur de l'écran while(line1.length() < 16) { if(Serial.available()) { data = Serial.read(); line1 = String(line1 + data); // On crée la chaine par concaténation succéssive line1.trim(); // On retire les caratères invisibles, parce qu'ils sont bien chiant Serial.println(line1); // Pour voir ce qui se passe Serial.println(line1.length()); // Idem } } Serial.read(); line1.trim(); // On rappelle encore trim, juste au cas où. line1.replace('_', ' '); // Pour pouvoir quand même afficher des espaces (qui sont enlevé avec trim), j'ai choisi de remplacer tout les '_' par des ' ' Serial.println(line1); // Pour voir à quoi la chaine finale ressemble lcd.clear(); lcd.setCursor(0, 0); lcd.print(line1); // On affiche delay(500); } Serial.read(); } |
Bon, ça marche, mais je me demande simplement s'il n'y a pas mieux comme solution, parce que celle-ci à des désavantages : - Si je veux écrire une chaine plus courte que 16 caractères, je dois "combler" jusqu'à en obtenir le bon nombre avec des '_' (ex : "Salut" -> "Salut_____") - si je veux pouvoir afficher sur la deuxième ligne, il me faudra un moyen de le dire (le code actuel ne prévoit rien)
En gros, je voudrais savoir s'il y a un moyen plus efficace de récupérer une chaîne de caractères avec la communication série que ce que je fais actuellement. Il y a des fonctions comme Serial.readByteUntil()
, mais je ne comprend pas comment l'utiliser, elle ne parait pas répondre à ce que je veux.
Merci