Ik ben nieuw bij Arduino en ik heb het volgende:
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); }
De code-output in virtueel breadboard: (i Entered 100)
Maar als ik Serial.flush()
verwijder, is de output zoals (i Entered 100)
Ik verwacht de uitvoer:
Voer nummer in (ik wil nummer 100 na de uitvoer)
100
Waarom werkt de code niet?
Ik gebruik Arduino IDE met virtueel breadboard (ATMega328p)
Reacties
- het is een fout van de emulatie. Serial.flush () wacht alleen totdat de gegevens volledig zijn verzonden.
Antwoord
Weet niet welk virtueel breadboard doet op een normale Arduino het zou het volgende doen:
Serial.flush () wist de buffer en dit heeft wat tijd nodig, normaal moet je minimaal ongeveer 100 ms wachten om weer naar die buffer te schrijven / lezen.
Omdat je code in setup wordt uitgevoerd (dus slechts één keer), is de serie niet beschikbaar omdat deze nog steeds aan het doorspoelen is en dus je resultaat.
Zoals de naam setup zegt, mag dit alleen worden gebruikt om HW / SW in te stellen, maar niet om uit te voeren routines, want je kunt allerlei rare resultaten krijgen.
Als je “\ n” aka newline terminators gebruikt in je communicatie, kun je ervoor kiezen en doorspoelen is alleen nodig als de verbinding wordt onderbroken en je gegevens opnieuw moet verzenden.
BEWERKEN
Waits for the transmission of outgoing serial data to complete.
Als u een teken verzendt, wordt het voor verzending in een buffer geplaatst. Het duurt even voordat elk teken is verzonden, omdat serieel traag is. Zodra het zich in de buffer bevindt, wordt het automatisch op de achtergrond verzonden terwijl het programma onmiddellijk doorgaat naar de volgende instructie. Dit wordt gedaan zodat het programma geen tijd verspilt aan het wachten op het verzenden van tekens.
flush () is een manier om te wachten tot het wordt verzonden, in plaats van onmiddellijk verder te gaan in de gebruiker programma.
Dus nadat je flush () hebt aangeroepen, kun je er zeker van zijn dat alle gegevens zijn verzonden en dat de buffer leeg is. Dus in jouw geval waar je het hebt geplaatst, heeft het geen zin.
Opmerkingen
- Kun je meer in detail uitleggen en Arduino gebruikt dezelfde buffer voor zowel invoer als uitvoer of serial.flush () maakt zowel invoer- als uitvoerbuffers leeg?
- Zie mijn bewerking hierboven. Markeer als geaccepteerd als het in orde is
- Dus in jouw geval waar je het hebt geplaatst, heeft het geen zin, waarom? Arduino wacht niet in de setup-functie en wat is de oplossing voor dit kun je uitleggen alsjeblieft, ik ben hier nieuw in.
- Lees op Arduino.cc de basis101 die ik hier niet ga leren, we lossen één probleem tegelijk op
- op de een of andere manier doet dit antwoord dat niet ' zeg niets om het probleem op te lossen