Go Down

Topic: problema con Serial.available() (Read 322 times) previous topic - next topic

deltone16v

Oct 17, 2018, 10:12 pm Last Edit: Oct 18, 2018, 09:17 pm by deltone16v
Salve a tutti Sono un nuovo utente del forum.
da qualche giorno alle prese con arduino uno vr3 e quindi alle prime armi.

volevo chiedervi delucitazione su Serial.available() come da testo dovrebbe restituire i numeri di bytes contenuti nel buffer o no?
ho povato questo semplice prog.
Code: [Select]

void setup() {
Serial.begin(9600);    }

void loop() {
int a=Serial.available();
if (a!=0)
{ Serial.print(a);
   int b;
   while (Serial.available()) {
             b=Serial.read();}}
 }


ma restituisce 1
se invio con serial monitor un solo carattere
se ne invio 2 mi stampa due volte (11) sono due bytes ma non dovrebbe stampare 2 ?
dove è l'errore


Patrick_M

#1
Oct 17, 2018, 10:37 pm Last Edit: Oct 17, 2018, 10:38 pm by Patrick_M
Ciao deltone16v
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :)

inoltre
>OP: ti ricordo che in conformità al regolamento, punto 7, devi modificare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra) e NON all'interno dei tag QUOTE !

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

deltone16v


gpb01

Devi fare quanto ti è stato chiesto nella seconda parte del post di Patrick e sistemare il tuo codice. Grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

Claudio_FF

Quote from: deltone16v
se ne invio 2 mi stampa due volte (11) sono due bytes ma non dovrebbe stampare 2 ?
Il ciclo di loop gira molto più velocemente di quanto ci mette un carattere ad arrivare, cioè letto il primo fa in tempo a ciclare molte altre volte prima che available segnali pronto il secondo.
* * * *    if non è un ciclo   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *

deltone16v

ok grazie giustissimo 
io per svuotare il buffer leggo un bytes alla volta
ma anche la trasmissione del dato che io inserisco viene collocato nel duffer uno alla volta e giustamente come dici li vedo singolarmente
 

Patrick_M

siccome non vai a capo con la print(a) se invii prima 1 carattere e poi altri 2 li trovi scritti tutti uno dopo l'altro
 
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

docdoc

(nota a margine: sto diventando sempre più insofferente ai listati indentati a cacchio...)
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

paulus1969

(nota a margine: sto diventando sempre più insofferente ai listati indentati a cacchio...)
Ti sbagli, non ti sei accorto che questo non è a cacchio.

E' costruito per massimizzare l'incomprensibilità.


Claudio_FF

Quote from: paulus1969
E' costruito per massimizzare l'incomprensibilità.
Il criterio che uso per valutare "l'indentazione utile minima" è quello dell'invarianza della comprensione sia che ci siano le graffe sia che non ci siano.

Ok, l'indentazione e la disposizione delle graffe non è come dovrebbe, MA... questa volta togliendo tutte le graffe (facciamo finta che sia Python) il flusso rimane comprensibile, quindi secondo me non è così male come tanti altri codici (che invece sono visivamente incomprensibili nonostante le parentesi).

* * * *    if non è un ciclo   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *

paulus1969

Capisco. Io, invece, guardo per prima cosa le graffe infatti uso il criterio

Code: [Select]


{ codice
   codice
   codice
         { codice
            codice
            codice
          }
  codice
}



chiudo la graffa sulla stessa colonna di quella di apertura proprio per poter seguire meglio il mio stesso codice, figurati il codice scritto da un altro

Standardoil

Io oltre a quello apro e chiudo pure le graffe su righe separate
E mi sto abituando a farlo anche per branch di uno statement solo...
Oltre a mettere la else pur se vuota
Vabbe', sono idiosincrasie...
Prima legge di Nelson (che sono io):
A parità di risultato maggiore è il pensiero, minore il lavoro.
Quindi prima di fare pensa!

Go Up