arduino의 Serial.flush ()

나는 Arduino를 처음 사용하며 다음이 있습니다.

int delaynum; char cval[12]; void setup() { Serial.begin(9600); Serial.print("Enter Number"); Serial.flush(); int i=0; while(i<12) { if(Serial.available()>0) { char ch=Serial.read(); if(ch>="0"&&ch<="9") { cval[i]=ch; i++; } else { cval[i]=0; delaynum=atoi(cval); break; } } } } void loop() { Serial.println(delaynum); exit(0); } 

가상 브레드 보드의 코드 출력 : (i Entered 100)

출력 1

하지만 Serial.flush()를 제거하면 (i Entered 100)

출력 2

출력을 예상하고 있습니다.

숫자 입력 (입력하고 싶습니다. 출력 후 100 번)

100

코드가 작동하지 않는 이유는 무엇입니까?

가상 브레드 보드 (ATMega328p)와 함께 Arduino IDE를 사용하고 있습니다.

코멘트

  • 에뮬레이션 오류입니다. Serial.flush ()는 데이터가 완전히 전송 될 때까지만 기다립니다.

Answer

가상 브레드 보드가 무엇인지 모름 정상적인 Arduino에서 수행되는 작업은 다음과 같습니다.
Serial.flush ()는 버퍼를 지우고 해당 버퍼에 다시 쓰기 / 읽기 위해 최소 약 100ms 동안 기다릴 시간이 필요합니다.
코드가 설정에서 실행되기 때문에 (한 번만) 시리얼은 여전히 플러싱되어 결과를 사용할 수 없습니다.
이름 설정에서 알 수 있듯이 이것은 HW / SW 설정에만 사용해야하지만 실행에는 사용하지 않아야합니다. 모든 종류의 이상한 결과를 얻을 수 있습니다.
수정

Waits for the transmission of outgoing serial data to complete. 

문자를 보내면 전송을 위해 버퍼에 배치됩니다. 시리얼이 느리기 때문에 각 문자를 보내는 데 시간이 걸립니다. 일단 버퍼에 있으면 프로그램이 즉시 다음 문으로 이동하는 동안 백그라운드에서 자동으로 전송됩니다. 이것은 프로그램이 문자가 전송되기를 기다리는 시간을 낭비하지 않도록하기위한 것입니다.

flush ()는 사용자에게 즉시 이동하는 대신 문자가 전송 될 때까지 기다리는 방법입니다.

플러시 ()를 호출 한 후 모든 데이터가 전송되었고 버퍼가 비어 있는지 확인할 수 있습니다. 따라서 배치 한 경우에는 의미가 없습니다.

코멘트

  • 아두 이노가 입력과 출력 모두에 동일한 버퍼를 사용하거나 serial.flush ()가 입력과 출력 버퍼를 모두 플러시 할 수 있습니까?
  • 위의 수정 사항을 참조하세요. 괜찮다면 수락 된 것으로 표시하세요.
  • 그러므로 배치 한 경우 의미가 없습니다. 이유는 무엇입니까? Arduino는 설정 기능에서 기다리지 않고 해결 방법은 무엇입니까? 이것은 내가 이것에 익숙하지 않다는 것을 설명 할 수 있습니다.
  • Arduino.cc에서 basic101을 읽으십시오. 여기서 가르치지 않을 것입니다. 한 번에 하나의 문제를 해결합니다.
  • 어쨌든이 대답은 ' 문제에 대한 답을 말하지 마십시오

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다