Comment convertir un int en string sur un Arduino?
Comment puis-je convertir un int, n
, à une chaîne de sorte que lorsque je l'envoyer au cours de la série, il est envoyé comme une chaîne de caractères?
C'est ce que j'ai à ce jour:
int ledPin=13;
int testerPin=8;
int n=1;
char buf[10];
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(testerPin, OUTPUT);
Serial.begin(115200);
}
void loop()
{
digitalWrite(ledPin, HIGH);
sprintf(buf, "Hello!%d", n);
Serial.println(buf);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
n++;
}
- ?tous les commentaires ici sont partis....ce qui s'est passé?
- rend votre objet exécutable ~1000 octets plus grande, de sorte que vous pouvez ne pas l'utiliser si la taille est un problème." playground.arduino.cc/Main/Printf
Vous devez vous connecter pour publier un commentaire.
Utiliser comme ceci:
Vous pouvez trouver plus d'exemples ici.
utiliser le
itoa()
fonction incluse dansstdlib.h
Vous pouvez tout simplement faire:
qui va le transformer en
n
à une chaîne de caractères ASCII automatiquement. Voir la documentation denuméro de Série.println()
.Vous suffit de l'enrouler autour d'un objet de type String comme ceci:
Vous pouvez également le faire:
C'est la vitesse de solution optimisée pour la conversion de int (entier signé de 16 bits) dans la chaîne.
Cette mise en œuvre permet d'éviter d'utiliser de la division depuis 8 bits AVR utilisé pour Arduino n'a pas de matériel DIV instruction, le compilateur traduire division en temps répétitif soustractions. Ainsi, la solution la plus rapide est conditionnelle à l'aide de branches pour construire la chaîne.
Fixe de 7 octets de la mémoire tampon, préparé à partir de début dans la RAM pour éviter l'allocation dynamique. Puisque c'est seulement 7 octets, le coût fixe de l'utilisation de la RAM est considéré comme minimum. Pour aider le compilateur, nous ajoutons inscrire le modificateur dans la déclaration de la variable de la vitesse d'exécution.
Cette esquisse est compilé à 1,082 octets de code à l'aide de avr-gcc qui livré avec Arduino v1.0.5 (taille de int2str fonction elle-même est 594 octets). Par rapport à une solution à l'aide de la Chaîne de l'objet qui les a rassemblées dans 2,398 octets, cette mise en œuvre peut réduire votre taille de code de 1,2 Kb (supposé que vous avez besoin d'aucun autre de la Chaîne de méthode d'objet, et votre numéro est stricte signés type int).
Cette fonction peut être optimisé en outre par écrit, dans un code en langage assembleur.
La solution est beaucoup trop grand. Essayez ce simple. Veuillez fournir une 7+ tampon de caractère, pas de chèque.
Peut être facilement modifié pour donner en retour à la fin de tampon, si vous jetez un "indice de l' et l'incrément de la mémoire tampon directement.
Voici ci-dessous un auto composé myitoa() qui est de loin plus petit dans le code, et se réserve un tableau FIXE de 7 (y compris la résiliation 0) char *machaine, qui est souvent souhaitable. Il est évident que l'on peut construire le code de caractère-maj au lieu de cela, si on besoin d'une longueur variable de sortie de chaîne.
de plus, vous pouvez visiter le site de l'arduino
https://www.arduino.cc/en/Serial/Println
voulez que cela va vous aider.
merci!
dans le premier exemple, un classique de la chaîne C est utilisé: il s'agit simplement d'un tableau de caractères terminée par un zéro (NUL personnage).
d'autres exemples d'utilisation de la classe String, une classe C++ que j'allais diriger loin de l'exception de toy exemples et des petites démos. Il ya des fuites de mémoire dans les moyens qui ne sont pas si faciles à prévoir, et conduit à de mystérieux problèmes de blocage du conseil d'administration.