Problemi con Serial e Stringheeee !!!

ora che ho capito come vengono letti i dati ho un altro problema sempre legato alle stringhe anche se in questo casi il colpevole è un ciclo while:

void setup() {
  Serial.begin(9600);
}
String stringOne = "";
void loop() {
  if (Serial.available()){
    while (Serial.available()>0){
      char a=Serial.read(); 
      stringOne += String(a);   
      Serial.println(stringOne);  
    }
      Serial.println("Finito!!!");
      stringOne = "";
  }
}

Secondo la mia logica questo codice dovrebbe:

  • controllare se ci sono byte disponibili da leggere
  • se si, finchè ce ne sono eseguire il codice all'interno di while
  • una volta letti tutti i byte il ciclo while dovrebbe fermarsi e io mi ritroverei con una stringa composta dai vari byte
  • Uscito dal ciclo while stampare "Finito!!!" e riazzerare la stringa per una prossima lettura
  • Riprendere a looppare finche non vi siano di nuovo dei byte da leggere

Nella mia idea il ciclo while dovrebbe interrompere il loop() fino a sua conclusione.

Invece come risultato (avendo inviato "ciao") ottengo:

c
Finito!!!
i
Finito!!!
a
Finito!!!
o
Finito!!!

quindi ripete ogni volta tutto il loop fregandosene di ripetere prima il while.

Cosa sbaglio??? :cold_sweat: :cold_sweat: :cold_sweat: