Serial.flush () i arduino

Jeg er ny på Arduino og har følgende:

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); } 

Kodeutdata i virtuelt brødbrett: (i Angitt 100)

Utgang 1

Men når jeg fjerner Serial.flush() Utdata som (jeg skrev inn 100)

Utgang 2

Jeg forventer utdata:

Skriv inn nummer (jeg vil angi nummer 100 etter utdata)

100

Hvorfor fungerer ikke koden?

Jeg bruker Arduino IDE med virtuelt brødkort (ATMega328p)

Kommentarer

  • det er en feil i emuleringen. Serial.flush () venter bare til dataene blir sendt fullstendig.

Svar

Uten å vite hvilket virtuelt brødbord gjør det på en vanlig Arduino ville det gjøre følgende:
Serial.flush () tømmer bufferen, og dette trenger litt tid, du venter minimum i rundt 100 ms for å skrive / lese til den bufferen igjen.
Ettersom koden din kjører i oppsettet (så bare en gang), er serien ikke tilgjengelig fordi den fremdeles skyller, og resultatet ditt blir så bra.
Som navnet oppsett sier, bør dette bare brukes til å konfigurere HW / SW, men ikke til å kjøre rutiner da du kan få alle slags rare resultater.
Hvis du bruker «\ n» aka newline-terminatorer i kommunikasjonen din, kan du gå for dem, og spyling er bare nødvendig hvis forbindelsen blir avbrutt og du må sende data på nytt.
EDIT

Waits for the transmission of outgoing serial data to complete. 

Hvis du sender et tegn, plasseres det i en buffer for overføring. Det tar tid for hvert tegn å bli sendt fordi serien er treg. Når den er i bufferen, vil den sendes automatisk i bakgrunnen mens programmet umiddelbart går videre til neste uttalelse. Dette gjøres slik at programmet ikke kaster bort tid på å vente på at tegn skal sendes.

flush () er en måte å vente på at det blir sendt, i stedet for å umiddelbart gå videre i brukeren programmet.

Så etter å ha ringt flush () kan du være sikker på at alle data er sendt, og bufferen er tom. Så i ditt tilfelle hvor du plasserte det, gir det ingen mening.

Kommentarer

  • Kan du forklare mer detaljert og Arduino bruker samme buffer for både inngang og utgang eller serial.flush () skyll både inngangs- og utgangsbuffere?
  • Se redigeringen min ovenfor. Vennligst merk som akseptert hvis det er ok
  • Så i ditt tilfelle der du plasserte det, gir det ingen mening, hvorfor? Arduino venter ikke i installasjonsfunksjonen og hva er løsningen for dette kan du forklare, vær så snill, jeg er ny på dette.
  • Vennligst les på Arduino.cc det grunnleggende101 Jeg skal ikke undervise her, vi løser ett problem om gangen
  • på en eller annen måte svarer ikke dette svaret ' t si noe for å svare på problemet

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *