Les données en série apparaissent étranges

12

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?

sachleen
la source
Avez-vous vérifié si l'initialisation du port série est correcte et correspond au terminal série du PC? Le setup () devrait avoir quelque chose comme Serial.begin (9600);
Rajendra
@Rajendra cette ligne est dans l'exemple de code que j'ai donné. D'ailleurs, je n'ai pas vraiment le problème. C'est un problème courant pour les débutants et j'ai répondu à la question ci-dessous.
sachleen

Réponses:

8

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:

Serial.begin(speed)
Serial.begin(speed, config)

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 comme 5N1, 6N1etSERIAL_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é. Epour une parité paire, Opour une parité impaire ou Npour 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

sachleen
la source
0

La réponse de Sachleen (ci-dessus) dit:

The board and terminal are probably not using the same baud rate. 
Check the bottom right corner of the Arduino Serial Terminal
and make sure it is set to 9600.

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:

Sketch uses 2754 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 195 bytes (9%) of dynamic memory, leaving 1853 bytes for local variables. Maximum is 2048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM5 -b57600 -D -Uflash:w:C:\Users\Owner\AppData\Local\Temp\arduino_build_457862/LockCode.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600

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 ...

John Doe
la source
0

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é.

tmaster
la source