Arduino 직렬 버퍼를 지우는 방법

Arduino Jiglyeol Beopeoleul Jiuneun Bangbeob



Arduino는 스케치로 알려진 코드 형태로 사용자의 지시를 받아 그에 따라 출력을 생성하는 전자 플랫폼입니다. 명령을 수집하고 하나씩 처리하기 위해 Arduino는 직렬 버퍼를 사용합니다. Arduino 직렬 버퍼는 장치가 처리할 준비가 될 때까지 들어오는 데이터를 보유합니다. 때때로 우리는 들어오는 데이터와의 간섭을 피하기 위해 Arduino 직렬 버퍼를 지워야 합니다. 더 자세히 살펴보겠습니다.

Arduino 직렬 버퍼

따라서 우리 모두는 Arduino가 USART로 알려진 직렬 통신 프로토콜을 사용하여 통신한다는 것을 알고 있습니다. 예, Arduino에는 SPI, I2C와 같은 다른 프로토콜이 있지만 USART가 가장 일반적이고 자주 사용되는 프로토콜입니다. Arduino의 세 가지 프로토콜을 모두 읽으려면 다음을 클릭하십시오. 여기 .







Arduino 직렬 버퍼는 들어오는 직렬 문자를 수집하여 마이크로컨트롤러가 처리할 수 있을 때까지 유지합니다. 직렬 통신은 한 장치에서 다른 장치로 데이터를 전송하는 방법입니다. 보드에 USART 하드웨어를 사용하는 Arduino는 각 8비트를 바이트로 조립합니다. 그런 다음 이 바이트를 직렬 버퍼에 저장합니다. Arduino 직렬 버퍼에는 최대 64바이트를 저장할 수 있습니다.



Arduino 직렬 버퍼 지우기

Arduino 직렬 버퍼는 메모리가 오버플로되거나 직렬 핀에 많은 양의 데이터가 있는 경우 데이터를 저장할 메모리가 제한되어 있으므로 들어오는 데이터를 저장하기 위해 먼저 직렬 버퍼를 지워야 합니다. Arduino 직렬 버퍼를 지우는 가능한 방법을 알아 보겠습니다.



Arduino 직렬 버퍼를 지우는 방법

직렬 버퍼 공간을 확보하여 새 데이터로 업데이트할 수 있도록 하려면 다음 두 가지 방법이 도움이 될 수 있습니다.





    • Serial.flush() 함수를 사용하여 직렬 버퍼 지우기
    • Serial.begin() 함수를 사용하여 직렬 버퍼 지우기

1: Serial.flush() 함수를 사용하여 직렬 버퍼 지우기

따라서 Arduino 직렬 버퍼를 지우는 첫 번째 방법은 Serial.flush() 함수를 사용하는 것입니다. 이 기능은 Arduino 직렬 라이브러리 기능에 속합니다.

Serial.flush()

Arduino Serial.flush() 함수는 데이터가 완전히 전송될 때까지 기다립니다. 들어오는 데이터를 버리는 대신 버퍼 내부의 데이터가 완전히 전송되면 직렬 버퍼가 새 데이터를 수신할 수 있도록 대기하도록 합니다.



메모 : Serial.flush() 프로그램을 사용한 후 프로그램을 실행하고 직렬 모니터에 출력하는 데 시간이 더 걸릴 수 있습니다. 현재 Arduino 코드는 모든 데이터가 전송되면 대기하여 새 데이터를 메모리에 저장할 수 있습니다.

통사론

직렬.플러시 ( )

매개변수

하나의 매개변수만 사용합니다.

연속물: 직렬 포트 개체

보고

이 함수는 아무 것도 반환하지 않습니다.

예제 코드

다음은 Serial.flush() 함수를 사용하지 않고 작성된 코드입니다.

무효 설정 ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* 현재 Arduino 시계를 저장하여 코드 시작 시각 */
Serial.println ( 에프 ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( 에프 ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( 에프 ( 'Linuxhint.com/자습서' ) ) ;
부호 없는 긴 millis_FlushStop = 밀리 ( ) ; /* 현재의 시각 이 지점에서 */
시리얼.프린트 ( 에프 ( '플러시 기능이 없으면 필요합니다' ) ) ;
시리얼.프린트 ( millis_FlushStop - millis_FlushStart ) ; /* 인쇄물 시각 데이터를 인쇄하기 위해 직렬 버퍼에 의해 사용됨 */
Serial.println ( 에프 ( '밀리초.' ) ) ;
}
무효 루프 ( ) {
}


위의 코드에서 우리는 세 개의 다른 문자열을 초기화하고 millis() 함수에서 현재 시간을 가져와 새 변수에 저장하여 코드를 시작했습니다. millis() 함수를 사용하여 데이터가 다시 인쇄되면 현재 시간을 새 변수에 전달합니다.

두 변수 내에서 두 시간이 모두 수신되면 Arduino가 밀리초 단위로 정의된 세 개의 문자열을 인쇄하는 데 걸리는 시간을 알 수 있습니다.


출력 터미널에서 정의된 문자열을 인쇄하는 데 9ms가 걸리는 것을 볼 수 있습니다.


이제 아래 주어진 코드에서 모든 문자열이 통과하도록 허용하고 직렬 버퍼가 다음 데이터를 수신하기 위해 지워질 때까지 대기할 수 있는 Serial.flush() 함수를 사용할 것입니다. 따라서 Serial.flush()를 사용하지 않고 데이터를 인쇄하는 것보다 시간이 더 걸립니다.

무효 설정 ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* 현재 Arduino 시계를 저장하여 코드 시작 시각 */
Serial.println ( 에프 ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( 에프 ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( 에프 ( 'Linuxhint.com/자습서' ) ) ;
직렬.플러시 ( ) ; /* 대기 ~을 위한 해당 플러시 메모리 이후에 전송할 데이터 */
부호 없는 긴 millis_FlushStop = 밀리 ( ) ; /* 현재의 시각 이 지점에서 */
시리얼.프린트 ( 에프 ( '플러시 기능을 사용하면 ' ) ) ;
시리얼.프린트 ( millis_FlushStop - millis_FlushStart ) ; /* 인쇄물 시각 데이터를 인쇄하기 위해 직렬 버퍼에서 가져옴 */
Serial.println ( 에프 ( '밀리초.' ) ) ;
}
무효 루프 ( ) {
}


이 코드는 앞에서 설명한 것과 유사합니다. 여기서 차이점은 다음 데이터를 수신하기 위해 직렬 버퍼 메모리가 지워질 때까지 프로그램이 추가 시간을 기다릴 수 있도록 하는 Serial.flush() 함수입니다.


출력에서 우리는 9ms만 걸리는 이전 것과 비교하여 세 개의 문자열을 인쇄하는 데 이번에는 76ms가 걸린다는 것을 분명히 알 수 있습니다.

2: Serial.begin() 함수를 사용하여 직렬 버퍼 지우기

지금까지 직렬 버퍼를 지우는 Serial.flush() 함수에 대해 설명했지만 이 함수는 데이터가 완전히 전송될 때까지 기다려야 합니다. 이제 직렬 버퍼 내부에 들어오는 데이터를 지우려면 어떻게 해야 하는지에 대한 질문이 떠오릅니다. 질문에 대한 답은 간단합니다. 동안 직렬 라이브러리 기능이 있는 루프.

통사론

동안 ( 시리얼.사용 가능 ( ) )
직렬.읽기 ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

암호

문자열 값;
무효 설정 ( ) {
}
무효 루프 ( ) {
만약에 ( 시리얼.사용 가능 ( ) ) { /* 확인하다 ~을 위한 직렬 데이터 */
값 = '' ;
동안 ( 시리얼.사용 가능 ( ) ) { /* 읽다 직렬 데이터 만약에 사용 가능 */
직렬 데이터 = 직렬.읽기 ( ) ;
=val+Serial_Data; /* 새 문자열 안에 데이터 저장 */
}
Serial.println ( ) ; /* 인쇄하다 읽다 데이터 */
Serial.end ( ) ; /* 직렬 통신 종료 */
Serial.begin ( 9600 ) ; /* 분명한 직렬 버퍼 */
}
}


Arduino는 Serial.begin() 함수를 사용하여 baud rate를 정의하여 직렬 통신을 초기화하며 이 함수가 초기화되면 이전에 Arduino 메모리에 저장된 데이터가 지워집니다. 여기서 우리는 Serial.available() 함수를 사용하여 직렬 데이터를 확인할 것입니다. 일단 데이터가 읽혀지면 새 문자열 안에 저장할 것이고 마지막으로 Serial.begin(9600)을 사용하여 Arduino 직렬 버퍼를 지울 것입니다.

메모: 직렬 버퍼를 플러시해야 합니다. 직렬 버퍼는 데이터가 장치로 전송되고 전송되기를 기다리거나 보류 중이 아니라는 것을 보장하기 때문입니다.

결론

Arduino 직렬 버퍼를 지우려면 버퍼 메모리에 새 데이터를 저장할 수 있습니다. Serial.flush() 및 직렬 시작을 사용할 수 있습니다. Arduino 직렬 버퍼를 지우는 데 사용할 수 있지만 이를 피하기 위해 모든 데이터가 전송되면 기다려야 합니다. 직렬 버퍼에서 들어오는 데이터를 지울 수도 있는 Serial.begin() 함수와 함께 while 루프를 사용할 수 있습니다.