Je viens de monter la manip et le problème est là
lcd.print((char)rxbyte); //otherwise a plain char so we print it to lcd
Le sketch a été développé pour une version différente de l'IDE Arduino dans lequel la bibliothèque "Print" dont dérive "LiquidCrystal" avait une version différente de la fonction print()
Dans la version précédante print( byte ) était équivalente de print(char )
Alors que dans l'IDE 1.0, print( byte ) est devenu équivalent de print( int )
Donc le nouveau comportement est d'afficher la valeur de rxbyte plutot que le caractère représenté.
En ajoutant un cast (char)rxbyte on force l'affichage de rxbyte comme le caractère qu'il représente plutot que comme sa valeur (ie le code ASCII)
EDIT: Je viens de voir le nouveau code que tu as trouvé. Il utilise .write au lieu de .print
Or dans le code de Print.cpp, on trouve que print(char c) effectue un write(c)
C'est pour cela que le nouveau code marche aussi