nan vuol dire che hai già tentato di convertire la stringa in numero. ma io voglio sapere cosa hai nella stringa PRIMA della conversione.
quel codice è buggato:
void serialEvent (Serial port){
brightness = float(port.readStringUntil('\n'));
}
questa funzione è come un interrupt, viene chiamata ogni volta che succede qualcosa alla seriale. Eliminiamo il fatto che ci son mille motivi per cui potrebbe essere chiamato quel codice (in teoria anche quando invii... ma devo guardare la documentazione)
quello che è sicuro è che probabilmente (dipende dal carico del PC) chiamata OGNI byte in entrata... quindi se invii 123'\n', le prime 3 concersioni (con 1, 2 e 3) vanno in errore perchè port.readStringUntil('\n') ritorna null (perchè nel buffer in ricezione non è ancora presente '\n'), che diventa NaN passando dalla conversione.
quindi:
void serialEvent (Serial port){
String ris = port.readStringUntil('\n');
if (ris!=null){
println("Letto:"+ris);
brightness = float(ris);
println("convertito:"+brightness );
}else{
println("dati incompleti, non ho letto nulla" );
}
}
Tra l'altro non vorrei che la "ris" contega ANCHE il carattere terminatore: quindi se invii "123\n" è ok perchè la conversione si occupa del \n, stesso vale per \r e probabilmente \t, ma non lo fa per M il 99% degli altri caratteri.
Manda la stringa ris