problema con Serial.available()

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.

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

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. :slight_smile:

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.

ciao
spero di aver capito

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

Guglielmo

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.

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

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

(nota a margine: sto diventando sempre più insofferente ai listati indentati a cacchio...)

docdoc:
(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à.

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).

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

{ 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

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...