Go Down

Topic: Cosa fa esattamente la flush()? (Read 851 times) previous topic - next topic

ste4os

Salve! Mi chiedevo, se uno sketch usa la comunicazione seriale per mandare dati e alla fine non flusha.. cosa succede?

leo72

Il flush serve a svuotare il buffer di ricezione in modo da togliere di mezzo eventuali dati accumulati nello stesso, ricevuti quando la comunicazione non era monitorata o richiesta.
Secondo me andrebbe eseguito PRIMA di iniziare una comunicazione e non dopo, proprio per evitare di leggere dati che erano già presenti nel buffer.

ste4os

E' possibile che se alla fine di uno sketch non svuoto il buffer con la flush, questo si sovraccarichi non consentendomi di uploadare altri sketch su arduino a causa del buffer pieno?

lesto

no, l'arduino si resetta quando carichi il codice, al massimo il tuo arduino prova a scrivere subito sulla seriale incasinando il boot-loader....
metti una delay prima di scrivere sulla seriale nel setup()
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72

Come ti ha consigliato lesto, metti SEMPRE un delay(3000) (minimo) in setup() per darti il tempo di aprire la seriale sul PC altrimenti l'Arduino ti apre subito la comunicazione non appena avviato bloccando la porta.

P.S.:
uno sketch non termina mai di essere eseguito. La funzione loop() viene eseguita (come dice il nome stesso) in ciclo infinito. L'unico modo per terminare un programma è quello di spengere fisicamente l'Arduino.

ste4os


Come ti ha consigliato lesto, metti SEMPRE un delay(3000) (minimo) in setup() per darti il tempo di aprire la seriale sul PC altrimenti l'Arduino ti apre subito la comunicazione non appena avviato bloccando la porta.

P.S.:
uno sketch non termina mai di essere eseguito. La funzione loop() viene eseguita (come dice il nome stesso) in ciclo infinito. L'unico modo per terminare un programma è quello di spengere fisicamente l'Arduino.

Esatto, la storia del loop mi era chiara. Allora mi è anche chiaro perchè quando attaccavo Arduino mi si impastava sempre! Non avevo messo il delay... E quindi mi dava sempre la seriale occupata e non mi faceva uploadare gli sketch!
Diagnosi esatta?  :smiley-mr-green:

leo72


ste4os

Quindi la struttura di base per uno sketch che cominica in seriale quale sarebbe? (Giusto per evitare ulteriori casini... E se per purissimo caso ( :smiley-sweat: ) dovesse ricapitare cosa faccio?)

leo72


Quindi la struttura di base per uno sketch che cominica in seriale quale sarebbe? (Giusto per evitare ulteriori casini...


Nulla di particolare. Ricordati solo di mettere un delay(3000) proprio prima del Serial.begin, così che tu abbia circa 3 secondi per poter aprire il terminale.

Quote

E se per purissimo caso ( :smiley-sweat: ) dovesse ricapitare cosa faccio?)


La "manovra di emergenza" descritta qui (circa a metà pagina).

ste4os

Grazie mille. Quindi la flush() in sostanza, quando va usata?

leo72

Prima di leggere dalla seriale, se sai che il dispositivo trasmittente può inviare dati anche quando tu non li richiedi e tieni la connessione sempre aperta. In questo caso ciò che ricevi ma non leggi materialmente con Serial.read resta nel buffer e ti viene restituito non appena fai una lettura.

lesto

diciamo che in linea di massima non dovresti mai usare la flush(), che comunque lavora solo sul buffer dei dati in ingresso
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up