Jag är ny på Arduino och jag har följande:
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); }
Kodutmatningen i virtuellt brödkort: (jag angav 100)
Men när jag tar bort Serial.flush()
Utdata som (jag angav 100)
Jag förväntar mig utdata:
Ange nummer (jag vill ange nummer 100 efter utdata)
100
Varför fungerar inte koden?
Jag använder Arduino IDE med virtuellt brödkort (ATMega328p)
Kommentarer
- det är ett fel i emuleringen. Serial.flush () väntar bara tills data skickas helt.
Svar
Att inte veta vilket virtuellt brädbräde gör på en vanlig Arduino skulle det göra följande:
Serial.flush () rensar bufferten och det behöver lite tid normalt, du väntar minst 100 ms på att skriva / läsa till den bufferten igen.
Eftersom din kod körs i installationen (så bara en gång) är serien inte tillgänglig eftersom den fortfarande spolas och så ditt resultat.
Som namnet inställningen säger bör detta bara användas för att ställa in HW / SW men inte för att köra rutiner eftersom du kan få alla möjliga konstiga resultat.
Om du använder ”\ n” aka newline-terminatorer i din kommunikation kan du gå till dem och spolning är bara nödvändigt om anslutningen avbryts och du måste skicka data igen.
EDIT
Waits for the transmission of outgoing serial data to complete.
Om du skickar ett tecken placeras det i en buffert för överföring. Det tar tid för varje tecken att skickas eftersom serien är långsam. När den är i bufferten skickas den automatiskt i bakgrunden medan programmet omedelbart går vidare till nästa uttalande. Detta görs så att programmet inte slösar bort tid på att tecken ska skickas.
spolning () är ett sätt att vänta på att det ska skickas, istället för att omedelbart gå vidare i användaren program.
Så efter att ha ringt flush () kan du vara säker på att all data har skickats och bufferten är tom. Så i ditt fall där du placerade det är det ingen mening.
Kommentarer
- Kan du förklara mer detaljerat och Arduino använder samma buffert för både in- och utgång eller serial.flush () spola både in- och utbuffertar?
- Se min redigering ovan. Vänligen markera som godkänd om det är ok
- Så i ditt fall där du placerade det är det ingen mening, varför? Arduino väntar inte i installationsfunktionen och vad är lösningen för det här kan du förklara, jag är ny på det här.
- Vänligen läs på Arduino.cc grundläggande101 Jag ska inte lära ut här, vi löser ett problem i taget
- på något sätt svarar det inte ' säger inget för att svara på problemet