Jsem v Arduinu nový a mám následující:
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); }
Výstup kódu na virtuální desce s chlebem: (i zadáno 100)
Ale když odstraním Serial.flush()
Výstup jako (zadal jsem 100)
Očekávám výstup:
Zadejte číslo (chci zadat číslo 100 za výstupem)
100
Proč kód nefunguje?
Používám Arduino IDE s virtuální deskou chleba (ATMega328p)
Komentáře
- jedná se o chybu emulace. Serial.flush () čeká pouze na úplné odeslání dat.
Odpověď
Nevím, jaké virtuální prkénko dělá na normálním Arduinu, udělá to takto:
Serial.flush () vymaže vyrovnávací paměť a to potřebuje nějaký čas, normálně počkáte minimálně asi 100 ms, než budete znovu zapisovat / číst do této vyrovnávací paměti.
Protože váš kód běží v nastavení (tedy jen jednou), seriál není k dispozici, protože stále proplachuje, a tak váš výsledek.
Jak název napovídá, toto by mělo být použito pouze k nastavení HW / SW, ale nikoli ke spuštění rutiny, protože můžete získat nejrůznější podivné výsledky.
Pokud ve své komunikaci používáte terminály „\ n“ aka newline, můžete je použít a proplachování by bylo nutné pouze v případě, že je připojení přerušeno a musíte znovu odeslat data.
EDIT
Waits for the transmission of outgoing serial data to complete.
Pokud posíláte znak, je umístěn do vyrovnávací paměti pro přenos. Odeslání každé postavy trvá nějakou dobu, protože sériové číslo je pomalé. Jakmile je ve vyrovnávací paměti, bude automaticky odeslán na pozadí, zatímco program okamžitě přejde na další příkaz. To se děje tak, aby program neztrácel čas čekáním na odeslání znaků.
flush () je způsob, jak čekat na jeho odeslání, namísto okamžitého přechodu v uživateli program.
Takže po volání flush () si můžete být jisti, že byla odeslána všechna data a vyrovnávací paměť je prázdná. Takže ve vašem případě, kde jste je umístili, to nedává smysl.
Komentáře
- Můžete vysvětlit podrobněji a Arduino používá stejnou vyrovnávací paměť pro vstup i výstup nebo serial.flush () vyprázdní vstupní i výstupní vyrovnávací paměť?
- Viz moji úpravu výše. Označte prosím jako přijaté, pokud je to v pořádku.
- Takže ve vašem případě, kde jste ji umístili, to nedává smysl, proč? Arduino nečeká na funkci nastavení a jaké je řešení pro to můžete vysvětlit, prosím, jsem v tom nový.
- Přečtěte si prosím na Arduino.cc basic101 Nebudu to tady učit, řešíme jeden problém najednou
- nějak tato odpověď ne ' k zodpovězení problému nic neříkám