Bluetooth y Serial.Read

Hola amigos!
Escribo para hacerles una consulta sobre el serial.read. La pregunta es, cómo lee el serial.read los datos que escribimos en el monitor serial o envíamos por bluetooth? De otra manera, cuándo le envio el 186, en donde dato = Serial.read(); yo sólo visualizo el último dígito, es decir, el 6. Porqué pasa? En otras palabras, porque dato no es igual a 186?
Gracias!!

Returns

the first byte of incoming serial data available (or -1 if no data is available) - int

Esto quiere decir que lee el primer dato (Byte) disponible. En tu ejemplo leera primero 1, luego 8 y luego 6.

Debido a como sea tu codigo, que no pones pero supongo, tu solo alcanzaras a ver lo que queda en la ultima pasada.

Tienes algunas soluciones.

Una es ir sumando en un string lo que lees, de manera de que al final puedas leer el sting entero.

Otra dependiendo de cuales sean los limites de lo que quieres mandar, no mandes 186, manda el caracter en codigo ASCCI que tiene ese valor. En este caso "║". Si mandases ese caracter al leerlo en ASCII leerias 186 y lo harias mandando un solo byte.

Tienes que entender que con la forma que usas no estas mandando "186" si no tres bytes que son "1","8" y"6".

Espero haberte ayudado.

Buenos días,
Si muchas gracias por su atención y ayuda.
Me ha sido muy útil. Muy bien explicado.
Luego, otra cosa que no le veo la necesidad es qué para sumar el string se utiliza un delay en lo siguiente:

While(serial.avaiable()){
delay(5);
If (serial.avaiable()){
delay(5);
If(serial.avaiable()>0){
dato = serial.read();
palabra = palabra + dato;
}}

Porqué necesitamos un delay??
Gracias,
JR

Yo tampoco le veo necesidad. Delay detiene TODO el programa. A veces si el codigo es sencillo se usa por practicidad, pero en la mayoria de los casos y sobre todo cuando los codigos crecen dan problemas porque, lo dicho, detiene TODO el programa. (El codigo puede no detectar cosas que pasen en otras lineas por estar detenido el programa).

Pero bueno, ese codigo lo habras sacado de algun lado, tendra mas partes y si no se ven no se puede decir nada.

En la parte del codigo que has puesto (y desconociendo el resto) para mi sobran tres cosas. El delay, el while y el primer IF.

Con este IF es suficiente:

If(serial.avaiable()>0)

Es decir, hara algo siempre y cuando haya algun dato en la puerta de entrada.

Que sentido tiene el While??? Mientras el IF que te digo este en el loop lo que no haga en la primer pasada lo hara en la siguiente:

 If(serial.avaiable()>0){
   dato = serial.read();
   palabra = palabra + dato;
}

En lo que hace a la parte del codigo que has puesto, lo anterior, hace exactamente lo mismo que lo que tu has puesto. Puesde poner despues del IF un Serial.Print(palabra); y verlo en el monitor.