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?
Respostas:
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: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 gosto5N1
,6N1
eSERIAL_8N1 (the default)
O primeiro número representa quantos bits de dados. O segundo caractere informa que tipo de bit de paridade existe.
E
para paridadeO
par, paridade ímpar ouN
sem 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
fonte
A resposta de Sachleen (acima) diz:
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:
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 ...
fonte
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.
fonte