Originariamente inviato da veddai
Qualcuno sa dirmi il perché questo succede e cosa dovrei fare per risolvere il mio problema?
Mah .... di problemi nel tuo codice ne vedo diversi.

Innanzitutto trasformi le stringhe in sequenze di bytes. Quando si fanno queste conversioni String<-->byte[] bisogna sempre prestare attenzione al charset utilizzato. getBytes() usa il charset di "default" della piattaforma. Quale che sia dipende appunto .... dalla piattaforma e potrebbe anche darsi che non sia quello più appropriato per l'invio di questi dati.
Ora ... non ho a portata di mano le specifiche o della documentazione sui comandi AT per i cellulari. Bisognerebbe verificare quale charset è possibile/più appropriato.

Comunque invece di preoccuparti tu di fare la conversione in byte (che rende lungo e poco leggibile il codice), puoi molto più semplicemente usare un Writer. Fai il "wrap" del tuo OutputStream in un OutputStreamWriter (a cui puoi specificare anche un charset) e a quel punto puoi scrivere comodamente char e String!!!

La seconda questione è che fai String.valueOf(invio), suppongo con l'intento di mettere nella stringa un "carriage return". Il problema è che valueOf() ritorna la rappresentazione testuale del numero, nel tuo caso ritorna "13", cioè proprio i caratteri '1' e '3'.
E non è sicuramente quello che volevi!!
Se vuoi mettere un carriage return, metti nella stringa semplicemente \r che è la sequenza di escape per il carriage return.

Idem per gli altri valueOf() che hai usato.