Datos seriales que aparecen raros

12

Tengo un boceto simple que imprime "Hello World" en la serie, pero en cambio recibo un montón de galimatías.

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

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

¿Por qué no está imprimiendo "Hello World" como dice el código?

Sachleen
fuente
¿Ha verificado si la inicialización del puerto serie es correcta y coincide con el terminal serie de la PC? La configuración () debería tener algo como Serial.begin (9600);
Rajendra
@Rajendra esa línea está en el ejemplo de código que di. Además, en realidad no estoy teniendo el problema. Es un problema común para principiantes y respondí la siguiente pregunta.
sachleen

Respuestas:

8

La placa y el terminal probablemente no estén usando la misma velocidad en baudios. Verifique la esquina inferior derecha de la Terminal serie Arduino y asegúrese de que esté configurado en 9600.

Datos seriales

La comunicación en serie funciona enviando todo el flujo de datos un bit a la vez. Esto contrasta con el puerto paralelo estándar que envía un byte a la vez. Ambos dispositivos necesitan saber a qué velocidad se envían los datos. Además, ambos dispositivos deben funcionar a la misma velocidad. Esto se llama velocidad de transmisión.

Velocidad de transmisión

Baudios realmente solo significa pulsos por segundo. En el contexto de la comunicación en serie, significa cuántos bits se transmiten por segundo. Uno de los valores más comunes es 9600, pero hay otros comunes que son factores o múltiplos de 9600. Sin embargo, en realidad no importa, siempre que ambos dispositivos funcionen a la misma velocidad.

Si le envío mensajes más rápido de lo que los recibe, pierde datos. Si te estoy enviando mensajes más lento de lo que los estás recibiendo, obtienes tonterías mezcladas con lo que te envié.

Datos, paridad, bits de parada

Si observa la documentación begin(), verá que puede tomar dos parámetros:

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

Esperemos que ahora entienda la velocidad, son los bits por segundo a los que se comunicará Arduino.

El segundo parámetro, le configpermite configurar algunas otras cosas sobre la transmisión de datos en serie. Estos son los bits de datos, paridad y parada. Verá en la página que tiene valores como 5N1, 6N1ySERIAL_8N1 (the default)

El primer número representa cuántos bits de datos. El segundo personaje te dice qué tipo de bit de paridad hay. Epara paridad Opar, paridad impar o Nsin paridad. El tercer número te dice cuántos bits de parada.

Entonces, realmente, con 8N1, tenemos 10 bits enviados por cada 8 bits de "sus" datos. 1 bit de inicio, 8 bits de datos y 1 bit de parada.

De todos modos, ambas partes deben acordar esta información y la velocidad. El terminal serie de Arduino no le da la opción de cambiar estas configuraciones, pero otras lo hacen, por lo que deberá asegurarse de que todas estas configuraciones sean las mismas.

Más información en wiki: comunicación serial asincrónica

Sachleen
fuente
0

La respuesta de Sachleen (arriba) 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.

Si este número es 9600, y aún obtiene datos confusos, verifique el resultado que obtuvo al cargar el código. Debería leer algo como:

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

Este resultado final (de lo que he publicado) dice cuál es la velocidad de transmisión predeterminada de su dispositivo. Para mí, cambié Serial.begin(9600);-> Serial.begin(57600);y verifiqué que la esquina inferior derecha de mi terminal serie Arduino decía 57600.

Después de ejecutar esto, y funcionó, pude volver a 9600 y obtener datos no confusos. Arduino parece ser quisquilloso ...

John Doe
fuente
0

Pasé media hora tratando de resolver eso, y fue mi Arduino Pro Mini de 3.3V y había seleccionado 5V en el Arduino IDE (en PC). La impresión en serie nunca funciona así, incluso con la misma velocidad de transmisión definida.

Seleccione la placa correcta en el IDE de Arduino.

Para ser claros, se debe seleccionar el procesador correcto (voltaje / velocidad del reloj) en la pestaña Herramientas .

tmaster
fuente