Serial.flush () in arduino (Italiano)

Sono nuovo su Arduino e ho quanto segue:

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

Loutput del codice nella breadboard virtuale: (i Inserito 100)

Output 1

Ma quando rimuovo Serial.flush() loutput come (ho inserito 100)

Output 2

Mi aspetto loutput:

Inserisci numero (voglio inserire numero 100 dopo loutput)

100

Perché il codice non funziona?

Sto usando lIDE di Arduino con breadboard virtuale (ATMega328p)

Commenti

  • è un errore di emulazione. Serial.flush () attende solo che i dati vengano inviati completamente.

Risposta

Non sapendo quale breadboard virtuale fa su un normale Arduino che farebbe quanto segue:
Serial.flush () cancella il buffer e questo richiede un po di tempo normalmente si attende almeno 100 ms per scrivere / leggere di nuovo su quel buffer.
Dato che il tuo codice viene eseguito nella configurazione (quindi solo una volta), il seriale non è disponibile poiché sta ancora scaricando e quindi il tuo risultato.
Come dice il nome setup, questo dovrebbe essere usato solo per configurare HW / SW ma non per eseguire routine poichè potresti ottenere tutti i tipi di risultati strani.
Se usi “\ n” aka terminatori di nuova riga nella tua comunicazione, puoi usarli e lo svuotamento sarebbe necessario solo se la connessione viene interrotta e devi inviare nuovamente i dati.
MODIFICA

Waits for the transmission of outgoing serial data to complete. 

Se invii un carattere, questo viene inserito in un buffer per la trasmissione. Linvio di ogni carattere richiede tempo perché il numero di serie è lento. Una volta che è nel buffer, verrà inviato automaticamente in background mentre il programma passa immediatamente allistruzione successiva. Questo viene fatto in modo che il programma non perda tempo ad aspettare che i caratteri vengano inviati.

flush () è un modo per aspettare che venga inviato, invece di spostarsi immediatamente nellutente

Quindi, dopo aver chiamato flush (), puoi essere certo che tutti i dati sono stati inviati e il buffer è vuoto. Quindi nel tuo caso in cui lhai posizionato non ha senso.

Commenti

  • Puoi spiegare più in dettaglio e Arduino usa lo stesso buffer sia per linput che per loutput o serial.flush () svuota entrambi i buffer di input e output?
  • Vedi la mia modifica sopra. Contrassegna come accettata se è ok
  • Quindi nel tuo caso in cui lhai posizionata non ha senso, perché? Arduino non aspetta nella funzione di configurazione e qual è la soluzione per questo puoi spiegare per favore sono nuovo a questo.
  • Per favore leggi su Arduino.cc il basic101 Non insegnerò qui risolviamo un problema alla volta
  • in qualche modo questa risposta non funziona ' t dire nulla per rispondere al problema

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *