J'ai un simple croquis qui imprime "Hello World" sur la série, mais je reçois un tas de charabia à la place.
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
Pourquoi n'imprime-t-il pas "Hello World" comme le dit le code?
Réponses:
La carte et le terminal n'utilisent probablement pas le même débit en bauds. Vérifiez le coin inférieur droit du terminal série Arduino et assurez-vous qu'il est réglé sur 9600.
Données série
La communication série fonctionne en envoyant le flux de données entier un bit à la fois. Cela contraste avec le port parallèle standard qui envoie un octet à la fois. Les deux appareils doivent savoir à quelle vitesse les données sont envoyées. De plus, les deux appareils doivent fonctionner à la même vitesse. C'est ce qu'on appelle le débit en bauds.
Débit en bauds
Baud signifie vraiment juste des impulsions par seconde. Dans le contexte de la communication série, cela signifie combien de bits sont transmis par seconde. L'une des valeurs les plus courantes est 9600, mais il existe d'autres valeurs courantes qui sont des facteurs ou des multiples de 9600. Cela n'a cependant pas vraiment d'importance, tant que les deux appareils fonctionnent à la même vitesse.
Si je vous envoie des messages plus rapidement que vous ne les recevez, vous perdez des données. Si je vous envoie des messages plus lentement que vous ne les recevez, vous obtenez un non-sens mélangé avec ce que je vous ai envoyé.
Données, parité, bits d'arrêt
Si vous regardez la documentation de
begin()
, vous verrez qu'elle peut prendre deux paramètres:J'espère que vous comprenez la vitesse maintenant, ce sont les bits par seconde auxquels l'Arduino communiquera.
Le deuxième paramètre
config
,, vous permet de configurer d'autres choses sur la transmission de données série. Ce sont les bits de données, de parité et d'arrêt. Vous verrez sur la page qu'il a des valeurs comme5N1
,6N1
etSERIAL_8N1 (the default)
Le premier nombre représente le nombre de bits de données. Le deuxième caractère vous indique le type de bit de parité.
E
pour une parité paire,O
pour une parité impaire ouN
pour aucune parité. Le troisième chiffre vous indique le nombre de bits d'arrêt.Donc, vraiment, avec 8N1, nous avons 10 bits envoyés pour chaque 8 bits de "vos" données. 1 bit de démarrage, 8 bits de données et 1 bit d'arrêt.
Quoi qu'il en soit, les deux parties doivent s'entendre sur ces informations ainsi que sur la vitesse. Le terminal série Arduino ne vous donne pas la possibilité de modifier ces paramètres, mais d'autres le font, vous devrez donc vous assurer que tous ces paramètres de configuration sont les mêmes.
Plus d'infos sur le wiki: Communication série asynchrone
la source
La réponse de Sachleen (ci-dessus) dit:
Si ce nombre est 9600 et que vous obtenez toujours des données tronquées, vérifiez la sortie que vous avez obtenue lors du téléchargement du code. Il devrait lire quelque chose comme:
Cette ligne de fond (de ce que j'ai publié) indique quel est le débit en bauds par défaut de votre appareil. Pour moi, j'ai changé
Serial.begin(9600);
->Serial.begin(57600);
et vérifié que le coin inférieur droit de mon terminal série Arduino lisait 57600.Après avoir exécuté cela et cela a fonctionné, j'ai pu revenir à 9600 et obtenir des données non tronquées. Arduino semble être capricieux ...
la source
J'ai passé une demi-heure à essayer de résoudre ce problème, et c'était mon Arduino Pro Mini qui est de 3,3 V et j'avais sélectionné 5 V dans l'Arduino IDE (sur PC). L'impression en série ne fonctionne jamais comme ça, même avec la même vitesse de transmission définie.
Sélectionnez la bonne carte dans l'IDE Arduino.
Pour être clair, le bon processeur (tension / vitesse d'horloge) sous l' onglet Outils doit être sélectionné.
la source