Commentaires
- Puisque vous nutilisez que
1
s et0
s, vous pouvez également le convertir en un nombre à trois chiffres et limprimerSerial.write(out1*100 + out2*10 + out3);
- @Gerben: Vous voulez dire
Serial.println()
. - Correction:
Serial.println(out1*100 + out2*10 + out3);
(merci @EdgarBonet)
Réponse
Si vous « sortez simplement en série, vous navez pas besoin de concaténer – imprimez simplement chaque bit séparément, comme:
Serial.print(out1); Serial.print(","); Serial.print(out2); Serial.print(","); Serial.println(out3);
Vous devriez éviter dutiliser String car ce nest pas bon sur les appareils avec de petites quantités de mémoire comme Arduinos. Inst ead si vous avez vraiment besoin de concaténer des nombres, vous devriez utiliser une chaîne C et peut-être snprintf
pour y formater les nombres:
char out[30]; snprintf(out, 30, "%d,%d,%d", out1, out2, out3);
Réponse
Je seconde les remarques de Majenko sur limpression des bits séparément si possible, et en évitant String
objets.
Cependant, si vous avez besoin de construire une telle chaîne (pas un objet String, juste une chaîne C), vous navez pas besoin de sprintf()
, qui est une fonction assez grande: vous pouvez construire la chaîne caractère par caractère. Par exemple:
char out[4]; // 3 + 1 char for the termination character out[0] = out1==HIGH ? "1" : "0"; out[1] = out2==HIGH ? "1" : "0"; out[2] = out3==HIGH ? "1" : "0"; out[3] = "\0"; // add NUL termination Serial.println(out);
Ceci utilise le opérateur ternaire , qui signifie ici « si out1
est HIGH
, alors utilisez le caractère "1"
, sinon utilisez "0"
« .
Maintenant, il arrive juste que dans Arduino HIGH
signifie 1 et LOW
signifie 0. Et les nombres à un chiffre peuvent être convertis en caractères en ajoutant simplement le code numérique du caractère «0», qui est 48 mais peut sécrire "0"
en C ++. Ainsi, vous pouvez écrire:
out[0] = out1 + "0"; // convert number to character
Et vous pouvez tout mettre ensemble comme:
char out[4]; // 3 + 1 char for the termination character out[0] = digitalRead(r1) + "0"; out[1] = digitalRead(r2) + "0"; out[2] = digitalRead(r3) + "0"; out[3] = "\0"; // add NUL termination Serial.println(out);
Réponse
Serial.write (b) affiche un octet et non une chaîne. Utilisez print () pour imprimer des chaînes et des nombres.
Serial.print(digitalRead(r1)); Serial.print(digitalRead(r2)); Serial.println(digitalRead(r3));