Serial.write(0): perchè non funziona?

In qualche sketch, inserendo questa istruzione) mi è capitato di ricevere l'errore dal compilatore "... is ambiguous ...".

Nulla di irrimediabile: Serial.write((byte) 0) oppure Serial.write( '\0' ) e problema risolto.

Tuttavia, non riesco a comprendere perché non sia possibile.

Ettore Massimo Albani

attenzione che non sono sicuro che /0 e 0 siano la stessa cosa.
Il problema è dettato da un piccolo bug della libreria, in teoria è già stato risolto.

lesto:
attenzione che non sono sicuro che /0 e 0 siano la stessa cosa.
Il problema è dettato da un piccolo bug della libreria, in teoria è già stato risolto.

Non credo. Io compilo gli ultimi sorgenti periodicamente e con la ultima versione che ho prelevato giorni fa c'è ancora.
Il messaggio esatto è:

call of overloaded 'write(int)' is ambiguous

il problema è che 0 in un int può sia voler dire "numero 0" che "puntatore alla cella 0" (nessun'altra costante tranne 0 è considerata un valido puntatore costante)

quindi se scrivi
Serial.write(0)

il compilatore non capisce se tu vuoi usare
Serial.write(byte)
oppure
Serial.write(byte*)

la soluzione sarebbe quella di non sfuttare l'autocast da int a byte ma specificare le vaire write overloadate. notare che anche la Wire e tutto ciò che si basa sulla classe Stream ha lo stesso problema.
ticket con soluzione: Google Code Archive - Long-term storage for Google Code Project Hosting.

Grazie lesto, probabilmente hai ragione, ma a me sembra un difetto.

Infatti, Massimo Banzi mi ha chiesto di inserirla nell'elenco dei suggerimenti (issue n° 1006):

http://code.google.com/p/arduino/issues/list

Ettore Massimo Albani

Ho dato il mio contributo confermando il problema su Arch Linux. :wink: