일련의 "Hello World"를 인쇄하는 간단한 스케치가 있지만 대신 많은 횡설수설이 있습니다.
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
코드처럼 "Hello World"를 인쇄하지 않는 이유는 무엇입니까?
일련의 "Hello World"를 인쇄하는 간단한 스케치가 있지만 대신 많은 횡설수설이 있습니다.
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
코드처럼 "Hello World"를 인쇄하지 않는 이유는 무엇입니까?
답변:
보드와 터미널이 같은 전송 속도를 사용하지 않을 수 있습니다. Arduino 직렬 터미널의 오른쪽 하단을 확인하고 9600으로 설정되어 있는지 확인하십시오.
직렬 통신은 한 번에 한 비트 씩 전체 데이터 스트림을 전송하여 작동합니다. 이것은 한 번에 1 바이트를 보내는 표준 병렬 포트와 대조적입니다. 두 장치 모두 데이터 전송 속도를 알아야합니다. 또한 두 장치 모두 같은 속도로 작동해야합니다. 이것을 보드 율이라고합니다.
Baud는 실제로 초당 펄스를 의미합니다. 직렬 통신의 맥락에서 이는 초당 전송되는 비트 수를 의미합니다. 가장 일반적인 값 중 하나는 9600이지만 9600의 요소 또는 배수 인 다른 일반적인 값이 있습니다. 두 장치가 모두 같은 속도로 작동하는 한 실제로 중요하지 않습니다.
메시지를받는 것보다 빠르게 메시지를 보내면 데이터가 손실됩니다. 내가받는 것보다 느리게 메시지를 보내면 내가 보낸 것과 혼동되지 않습니다.
에 대한 설명서를 보면 begin()
두 가지 매개 변수를 사용할 수 있습니다.
Serial.begin(speed)
Serial.begin(speed, config)
아두 이노가 통신하는 속도는 초당 비트입니다.
두 번째 매개 변수 인 config
을 사용하면 직렬 데이터 전송에 대한 다른 사항을 구성 할 수 있습니다. 이들은 Data, Parity 및 Stop 비트입니다. 페이지 5N1
에 6N1
와 같은 값이 있으며SERIAL_8N1 (the default)
첫 번째 숫자는 데이터 비트 수를 나타냅니다. 두 번째 문자는 어떤 종류의 패리티 비트가 있는지 알려줍니다. E
짝수 패리티 대한 O
홀수 패리티 또는 N
패리티 대. 세 번째 숫자는 정지 비트 수를 나타냅니다.
실제로 8N1을 사용하면 8 비트의 "귀하의"데이터마다 10 비트가 전송됩니다. 1 개의 시작 비트, 8 개의 데이터 비트 및 1 개의 정지 비트.
어쨌든, 양측은이 정보와 속도에 동의해야합니다. Arduino 시리얼 터미널은 이러한 설정을 변경하는 옵션을 제공하지 않지만 다른 설정은 변경 가능하므로 모든 구성 설정이 동일한 지 확인해야합니다.
위키에 대한 추가 정보 : 비동기 직렬 통신
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는 까다로운 것 같습니다 ...