Concaténer les entiers sous forme de chaîne [dupliquer]

Cette question a déjà des réponses ici :

Commentaires

  • Puisque vous nutilisez que 1 s et 0 s, vous pouvez également le convertir en un nombre à trois chiffres et limprimer Serial.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)); 

Laisser un commentaire

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