I dati seriali appaiono strani


12

Ho un semplice schizzo che stampa "Hello World" sul seriale, ma invece sto diventando un po 'incomprensibile.

void setup() {
    Serial.begin(9600);
}

void loop() {
    Serial.println("Hello World");
    delay(1000);
}

Perché non stampa "Hello World" come dice il codice?


Hai verificato se l'inizializzazione della porta seriale è corretta e corrisponde al terminale seriale del PC? Il setup () dovrebbe avere qualcosa di simile a Serial.begin (9600);
Rajendra,

@Rajendra quella riga è nell'esempio di codice che ho dato. Inoltre, non sto effettivamente avendo il problema. È un problema comune per i principianti e ho risposto alla domanda di seguito.
Sachleen,

Risposte:


8

La scheda e il terminale probabilmente non utilizzano lo stesso baud rate. Controlla l'angolo in basso a destra del terminale seriale Arduino e assicurati che sia impostato su 9600.

Dati seriali

La comunicazione seriale funziona inviando l'intero flusso di dati un bit alla volta. Ciò è in contrasto con la porta parallela standard che invia un byte alla volta. Entrambi i dispositivi devono sapere a quale velocità vengono inviati i dati. Inoltre, entrambi i dispositivi devono funzionare alla stessa velocità. Questo è chiamato baud rate.

Baud Rate

Baud significa davvero solo impulsi al secondo. Nel contesto della comunicazione seriale, significa quanti bit vengono trasmessi al secondo. Uno dei valori più comuni è 9600, ma ce ne sono altri comuni che sono fattori o multipli di 9600. Tuttavia, non importa, a condizione che entrambi i dispositivi funzionino alla stessa velocità.

Se ti invio messaggi più velocemente di quanto tu li riceva, perdi dati. Se ti invio messaggi più lentamente di quanto tu li stia ricevendo, le sciocchezze si mescolano a ciò che ti ho inviato.

Bit di dati, parità, stop

Se guardi la documentazione per begin(), vedrai che può prendere due parametri:

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

Spero che tu capisca la velocità ora, sono i bit al secondo a cui Arduino comunicherà.

Il secondo parametro, configconsente di configurare alcune altre cose sulla trasmissione seriale dei dati. Questi sono i bit Data, Parity e Stop. Vedrai sulla pagina che ha valori come 5N1, 6N1eSERIAL_8N1 (the default)

Il primo numero rappresenta quanti bit di dati. Il secondo personaggio ti dice che tipo di parità c'è. Eper parità pari, Oper parità dispari o Nper nessuna parità. Il terzo numero indica quanti bit di stop.

Quindi, davvero, con 8N1, abbiamo 10 bit inviati per ogni 8 bit di "tuoi" dati. 1 bit di avvio, 8 bit di dati e 1 bit di arresto.

Ad ogni modo, entrambe le parti devono concordare su queste informazioni e sulla velocità. Il terminale seriale Arduino non ti dà la possibilità di modificare queste impostazioni, ma altri lo fanno, quindi dovrai assicurarti che tutte queste impostazioni di configurazione siano le stesse.

Maggiori informazioni sul wiki: comunicazione seriale asincrona


0

La risposta di Sachleen (sopra) dice:

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.

Se questo numero è 9600 e si ottengono ancora dati confusi, controllare l'output ottenuto durante il caricamento del codice. Dovrebbe leggere qualcosa del tipo:

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

Questa linea di fondo (di ciò che ho pubblicato) dice qual è il baudrate predefinito del tuo dispositivo. Per quanto mi riguarda, ho cambiato Serial.begin(9600);-> Serial.begin(57600);e verificato che l'angolo in basso a destra del mio terminale seriale Arduino leggesse 57600.

Dopo aver eseguito questo, e ha funzionato, sono stato in grado di tornare a 9600 e ottenere dati non confusi. Arduino sembra essere schizzinoso ...


0

Ho impiegato mezz'ora a cercare di risolverlo, ed era il mio Arduino Pro Mini a 3,3 V e avevo selezionato 5 V nell'IDE Arduino (su PC). La stampa seriale non funziona mai così anche con lo stesso baud rate definito.

Seleziona la scheda corretta nell'IDE di Arduino.

Per essere chiari, è necessario selezionare il processore corretto (tensione / velocità di clock) nella scheda Strumenti .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.