Dados seriais aparecendo estranhos


12

Eu tenho um esboço simples que imprime "Hello World" na série, mas estou recebendo um monte de bobagens.

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

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

Por que não está imprimindo "Hello World" como o código diz?


Você verificou se a inicialização da porta serial é adequada e combina com o terminal serial do PC? A configuração () deve ter algo como Serial.begin (9600);
Rajendra

@ Rajendra essa linha está no exemplo de código que eu dei. Além disso, na verdade não estou tendo o problema. É um problema comum para iniciantes e eu respondi a pergunta abaixo.
Sachleen

Respostas:


8

A placa e o terminal provavelmente não estão usando a mesma taxa de transmissão. Verifique o canto inferior direito do terminal serial do Arduino e verifique se está definido como 9600.

Dados Seriais

A comunicação serial funciona enviando todo o fluxo de dados um bit de cada vez. Isso contrasta com a porta paralela padrão que envia um byte por vez. Ambos os dispositivos precisam saber a que velocidade os dados estão sendo enviados. Além disso, ambos os dispositivos precisam estar operando na mesma velocidade. Isso é chamado de taxa de transmissão.

Taxa de transmissão

Baud realmente significa apenas pulsos por segundo. No contexto da comunicação serial, significa quantos bits são transmitidos por segundo. Um dos valores mais comuns é 9600, mas existem outros comuns que são fatores ou múltiplos de 9600. Porém, isso realmente não importa, desde que ambos os dispositivos operem na mesma velocidade.

Se estou enviando mensagens mais rapidamente do que as recebidas, você perde dados. Se estou lhe enviando mensagens mais lentamente do que você as recebe, você fica sem sentido misturado com o que eu lhe enviei.

Dados, paridade, bits de parada

Se você olhar para a documentação begin(), verá que são necessários dois parâmetros:

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

Espero que você entenda a velocidade agora, são os bits por segundo em que o Arduino se comunicará.

O segundo parâmetro config,, permite configurar outras coisas sobre a transmissão de dados seriais. Estes são os bits de dados, paridade e parada. Você verá na página que tem valores gosto 5N1, 6N1eSERIAL_8N1 (the default)

O primeiro número representa quantos bits de dados. O segundo caractere informa que tipo de bit de paridade existe. Epara paridade Opar, paridade ímpar ou Nsem paridade. O terceiro número indica quantos bits de parada.

Realmente, com o 8N1, temos 10 bits sendo enviados para cada 8 bits dos "seus" dados. 1 bit de início, 8 bits de dados e 1 bit de parada.

De qualquer forma, ambos os lados precisam concordar com essas informações e com a velocidade. O terminal serial do Arduino não oferece a opção de alterar essas configurações, mas outras, por isso, você precisará garantir que todas essas configurações sejam iguais.

Mais informações no wiki: Comunicação serial assíncrona


0

A resposta de Sachleen (acima) diz:

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 esse número for 9600 e você ainda obtiver dados ilegíveis, verifique a saída obtida ao fazer o upload do código. Deve ler 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

Esta linha inferior (do que eu postei) diz qual é a taxa de transmissão padrão do seu dispositivo. Para mim, mudei Serial.begin(9600);-> Serial.begin(57600);e verifiquei se o canto inferior direito do meu terminal serial do Arduino dizia 57600.

Depois que eu executei isso e funcionou, consegui voltar para 9600 e obter dados sem erros. O Arduino parece ser meticuloso ...


0

Passei meia hora tentando resolver isso, e era o meu Arduino Pro Mini que é 3.3V e selecionei 5V no Arduino IDE (no PC). A impressão serial nunca funciona assim, mesmo com a mesma taxa de transmissão definida.

Selecione a placa correta no IDE do Arduino.

Para ficar claro, o processador correto (voltagem / velocidade do relógio) na guia Ferramentas deve ser selecionado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.