직렬 데이터가 이상하게 표시됨


12

일련의 "Hello World"를 인쇄하는 간단한 스케치가 있지만 대신 많은 횡설수설이 있습니다.

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

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

코드처럼 "Hello World"를 인쇄하지 않는 이유는 무엇입니까?


직렬 포트 초기화가 올 바르고 PC 직렬 터미널과 일치하는지 확인 했습니까? setup ()은 Serial.begin (9600)과 비슷해야합니다.
Rajendra

@Rajendra 그 줄은 내가 준 코드 예제에 있습니다. 게다가, 실제로 문제가 없습니다. 초보자에게는 일반적인 문제이며 아래 질문에 답변했습니다.
Sachleen

답변:


8

보드와 터미널이 같은 전송 속도를 사용하지 않을 수 있습니다. Arduino 직렬 터미널의 오른쪽 하단을 확인하고 9600으로 설정되어 있는지 확인하십시오.

시리얼 데이터

직렬 통신은 한 번에 한 비트 씩 전체 데이터 스트림을 전송하여 작동합니다. 이것은 한 번에 1 바이트를 보내는 표준 병렬 포트와 대조적입니다. 두 장치 모두 데이터 전송 속도를 알아야합니다. 또한 두 장치 모두 같은 속도로 작동해야합니다. 이것을 보드 율이라고합니다.

전송 속도

Baud는 실제로 초당 펄스를 의미합니다. 직렬 통신의 맥락에서 이는 초당 전송되는 비트 수를 의미합니다. 가장 일반적인 값 중 하나는 9600이지만 9600의 요소 또는 배수 인 다른 일반적인 값이 있습니다. 두 장치가 모두 같은 속도로 작동하는 한 실제로 중요하지 않습니다.

메시지를받는 것보다 빠르게 메시지를 보내면 데이터가 손실됩니다. 내가받는 것보다 느리게 메시지를 보내면 내가 보낸 것과 혼동되지 않습니다.

데이터, 패리티, 정지 비트

에 대한 설명서를 보면 begin()두 가지 매개 변수를 사용할 수 있습니다.

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

아두 이노가 통신하는 속도는 초당 비트입니다.

두 번째 매개 변수 인 config을 사용하면 직렬 데이터 전송에 대한 다른 사항을 구성 할 수 있습니다. 이들은 Data, Parity 및 Stop 비트입니다. 페이지 5N16N1와 같은 값이 있으며SERIAL_8N1 (the default)

첫 번째 숫자는 데이터 비트 수를 나타냅니다. 두 번째 문자는 어떤 종류의 패리티 비트가 있는지 알려줍니다. E짝수 패리티 대한 O홀수 패리티 또는 N패리티 대. 세 번째 숫자는 정지 비트 수를 나타냅니다.

실제로 8N1을 사용하면 8 비트의 "귀하의"데이터마다 10 비트가 전송됩니다. 1 개의 시작 비트, 8 개의 데이터 비트 및 1 개의 정지 비트.

어쨌든, 양측은이 정보와 속도에 동의해야합니다. Arduino 시리얼 터미널은 이러한 설정을 변경하는 옵션을 제공하지 않지만 다른 설정은 변경 가능하므로 모든 구성 설정이 동일한 지 확인해야합니다.

위키에 대한 추가 정보 : 비동기 직렬 통신


0

Sachleen의 답변은 다음과 같습니다.

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.

이 숫자가 9600인데도 여전히 잘못된 데이터가 표시되면 코드를 업로드 할 때 얻은 출력을 확인하십시오. 다음과 같이 읽어야합니다.

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

이 결론 (내가 게시 한 것)은 장치의 기본 전송 속도가 무엇인지 나타냅니다. 나를 위해 Serial.begin(9600);->를 변경 Serial.begin(57600);하고 Arduino 직렬 터미널의 오른쪽 하단 모서리가 57600인지 확인했습니다.

이것을 실행하고 작동시킨 후 9600으로 다시 전환하고 깨지지 않은 데이터를 얻을 수있었습니다. Arduino는 까다로운 것 같습니다 ...


0

나는 그것을 해결하기 위해 30 분을 보냈고 3.3V 인 Arduino Pro Mini 였고 Arduino IDE (PC)에서 5V를 선택했습니다. 동일한 전송 속도가 정의 된 경우에도 직렬 인쇄는 그렇게 작동하지 않습니다.

Arduino IDE에서 올바른 보드선택하십시오 .

명확하게하려면 도구 탭 에서 올바른 프로세서 (전압 / 클럭 속도) 를 선택해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.