Guardando variable desde bluetooth

Hola a todos, como les va?

Tengo un problema simple creo yo, estoy enviando un carácter desde una App Android a un bluetooth (HC-06) conectado al arduino y lo que no termino de entender muy bien es porque a la hora de guardar el carácter en un variable lo hace distinto a lo que yo veo que se imprime en la consola

|500x98

en la imagen se puede ver "tÿ4ÿ"

lo que yo envíe fue una 't' y un '4' pero lo que se guarda y se imprime es siempre 'ÿ'

Aquí el código que como verán es bastante simple.

#include    // Incluimos la librería  SoftwareSerial  
SoftwareSerial BT(10,11);    // Definimos los pines RX y TX del Arduino conectados al Bluetooth


 int led = 13;
 char recibido;
void setup()
{
  BT.begin(9600);       // Inicializamos el puerto serie BT (Para Modo AT 2)
  Serial.begin(9600);   // Inicializamos  el puerto serie 
  pinMode(13,OUTPUT);

  
}

void loop()
{
  if(BT.available())    // Si llega un dato por el puerto BT se envía al monitor serial
  {
    Serial.write(BT.read());
    
    
    recibido = BT.read();
    
    Serial.write(recibido);
    
  }
}

Alguno me puede decir porque envíe lo que envíe se muestra 'ÿ' ??

Saludos y gracias!

Tal vez es porque estás leyendo dos veces consecutivas el puerto. Prueba a quitar la línea Serial.write(BT.read());

if(BT.available())    // Si llega un dato por el puerto BT se envía al monitor serial
  {
    recibido = BT.read();
    Serial.write(recibido);
  }

Recuerda que cuando envias un caracter, tmb sueles enviar códigos de control como un line feed o carriege return. Debes verificar que eso no sea visible

noter: Tal vez es porque estás leyendo dos veces consecutivas el puerto. Prueba a quitar la línea Serial.write(BT.read());

Si tuviese dos .read() ¿El segundo no le devolvería un -1, noter?

Creo que es un problema de baudios. Si no es en la propia consola, empezaría a preguntar que baudios de comunicación ha configurado por medio de los comandos AT en sus módulos de bluetooth.

Si no recuerdo mal el valor de AT+UART o AT+BAUD (Según módulo) debe ser común entre el maestro y el esclavo.

También habría que ver que está enviando realmente porque si envía "hola mundo" en vez de "h", "o","l" ... también pasarán cosas raras.

Después hay que tener en cuenta si los caracteres no son de tipo \n \t (saltos de línea) etc.

Ah, y por supuesto una pequeña parada entre lecturas con un delay o un timer va ser más que necesario...

Si fuera un problema de BAUDIOS no veería ni de casualidad t y 4, vería todos caracteres raros e ilegibles porque no los puede interpretar.

En cambio acá si, los interpreta.

Arduinito: Si tuviese dos .read() ¿El segundo no le devolvería un -1, noter?

Responderé por noter: En efecto retorna -1; sin embargo, lo que write recibe por parámetro, es un byte u 8 bits SIN SIGNO. -1 en un tipo de dato sin signo, se considera un subdesbordamiento ("underflow"), lo cual lo lleva al valor máximo posible (y además por la forma que se codifica un número entero con signo cuando representa un -1: todos los bits en 1).

Viéndolo de esa forma, asignar -1 a una variable de 8 bits sin signo, es el equivalente a asignarle 255; y 255 en la tabla ASCII extendida, se representa por el caracter 'ÿ'. Ahora sí todo empieza a tener sentido... ¿verdad?

surbyte: Si fuera un problema de BAUDIOS no veería ni de casualidad t y 4, vería todos caracteres raros e ilegibles porque no los puede interpretar.

En cambio acá si, los interpreta.

Leí mal, es correcto, el resultado le da una T y un 4 normales, entre medio están los ÿ (Creí que el resto de caracteres estaba "acentuado" también). Ya ví además que es la representación del -1 que comenta Lucario448. Una cosa nueva que aprendo.