Serial.flush () în arduino (Română)

Sunt nou în Arduino și am următoarele:

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

Codul de ieșire în placa virtuală de pâine: (am introdus 100)

Ieșire 1

Dar atunci când elimin Serial.flush() ieșirea ca (am introdus 100)

Ieșirea 2

Aștept rezultatul:

Introduceți numărul (vreau să introduc numărul 100 după ieșire)

100

De ce codul nu funcționează?

Folosesc Arduino IDE cu panou virtual (ATMega328p)

Comentarii

  • este o eroare de emulare. Serial.flush () așteaptă doar până când datele sunt trimise complet.

Răspuns

Nu știu ce panou virtual face pe un Arduino normal ar face următoarele:
Serial.flush () șterge bufferul și acest lucru are nevoie de ceva timp, în mod normal, așteptați minimum 100 ms pentru a scrie / citi din nou în acel buffer.
Pe măsură ce codul dvs. rulează în configurare (deci o singură dată) serialul nu este disponibil deoarece este încă în curs de spălare și astfel rezultatul dvs.
După cum spune numele de configurare, acest lucru ar trebui utilizat numai pentru a configura HW / SW, dar nu pentru a rula rutine, deoarece puteți obține tot felul de rezultate ciudate.
Dacă utilizați „\ n”, de asemenea, terminatoare de linie nouă în comunicarea dvs., puteți alege pentru ele și spălarea ar fi necesară numai dacă conexiunea este întreruptă și trebuie să retrimiteți datele.
EDITĂ

Waits for the transmission of outgoing serial data to complete. 

Dacă trimiteți un caracter, acesta este plasat într-un buffer pentru transmisie. Este nevoie de timp pentru ca fiecare caracter să fie trimis, deoarece serialul este lent. Odată ce se află în buffer, acesta va fi trimis automat în fundal în timp ce programul trece imediat la următoarea declarație. Acest lucru se face astfel încât programul să nu piardă timpul așteptând trimiterea personajelor.

flush () este o modalitate de a aștepta trimiterea acestuia, în loc să treceți imediat la utilizator program.

Deci, după ce ați apelat la flush (), puteți fi siguri că toate datele au fost trimise și că bufferul este gol. Deci, în cazul în care l-ați plasat, nu are sens.

Comentarii

  • Puteți explica mai detaliat și Arduino folosește același buffer atât pentru intrare cât și pentru ieșire sau serial.flush () spălați atât bufferele de intrare cât și cele de ieșire?
  • Vedeți ediția mea de mai sus. Vă rugăm să marcați ca acceptată dacă este ok
  • Deci, în cazul în care ați plasat-o, nu are sens, de ce? Arduino nu așteaptă în funcția de configurare și pentru ce este soluția acest lucru puteți explica, vă rog, sunt nou în acest sens.
  • Vă rugăm să citiți pe Arduino.cc basic101 nu voi învăța aici, rezolvăm o problemă la un moment dat
  • cumva acest răspuns nu ' nu spune nimic pentru a răspunde la problema

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *