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); }
Kodeoutputtet i virtuelt brødkort: (jeg indtastede 100)
Men når jeg fjerner Serial.flush()
Outputtet som (jeg indtastede 100)
Jeg forventer output:
Indtast nummer (jeg vil indtaste nummer 100 efter output)
100
Hvorfor fungerer koden ikke?
Jeg bruger Arduino IDE med virtuelt brødkort (ATMega328p)
Kommentarer
- det er en fejl i emuleringen. Serial.flush () venter kun, indtil dataene sendes fuldstændigt.
Svar
Uden at vide, hvilket virtuelt breadboard gør på en normal Arduino, ville det gøre følgende:
Serial.flush () rydder bufferen, og dette har brug for lidt tid, normalt venter du mindst 100 ms på at skrive / læse til bufferen igen.
Da din kode kører i opsætningen (så kun en gang), er serien ikke tilgængelig, da den stadig skylles, og så dit resultat.
Som navnet på opsætningen siger, skal dette kun bruges til at konfigurere HW / SW, men ikke til at køre rutiner, da du muligvis får alle mulige underlige resultater.
Hvis du bruger “\ n” aka newline-terminatorer i din kommunikation, kan du gå efter dem, og skylning er kun nødvendigt, hvis forbindelsen afbrydes, og du skal sende data igen.
REDIGER
Waits for the transmission of outgoing serial data to complete.
Hvis du sender et tegn, placeres det i en buffer til transmission. Det tager tid for hvert tegn at blive sendt, fordi seriel er langsom. Når det er i bufferen, sendes det automatisk i baggrunden, mens programmet straks går videre til næste sætning. Dette gøres, så programmet ikke spilder tid på at vente på, at tegn sendes.
flush () er en måde at vente på, at det bliver sendt, i stedet for straks at gå videre i brugeren program.
Så efter at have ringet til flush () kan du være sikker på, at alle data er sendt, og bufferen er tom. Så i dit tilfælde, hvor du placerede det, giver det ingen mening.
Kommentarer
- Kan du forklare mere detaljeret, og Arduino bruger samme buffer til både input og output eller serial.flush () skylle både input og output buffere?
- Se min redigering ovenfor. Marker som accepteret, hvis det er ok
- Så i dit tilfælde, hvor du placerede det, giver det ingen mening, hvorfor? Arduino venter ikke på installationsfunktionen, og hvad er løsningen til dette kan du forklare, jeg er ny på dette.
- Læs på Arduino.cc grundlæggende101 Jeg vil ikke undervise her, vi løser et problem ad gangen
- på en eller anden måde svarer dette svar ikke ' t siger noget for at besvare problemet