Estoy liado en un proyectillo. Este tiene una parte que contiene un protocolo de comunicación que consiste en asignar a arduino una direcció. Si recibedatos por el puerto serie que vayan destinados a el debe ejecutar unas ordenes concretas.
Digamos que el aspecto de los mensajes que envia y recibe por el puerto serie tiene el aspecto siguiente:
ORIGEN, DESTINO, COMANDOS
En consecuencia mi proyecto debe mirar si el DESTINO que recibe por el puerto serie concuerda con la variable interna de su dirección y ejecutar los comandos que sean. Hasta aquí claro ¿verdad?
Pues bién, recibo correctamente los datos y los meto en un objeto String. De este objeto String los 'descuartizo' a traves de la separación de las comas. Y por último convierto los sub-Strings obtenidos, en cadenas de caracateres dentro de un array, de manera que trama[0] contiene ORIGEN, trama[1] contiene DESTINO y trama[2] contiene los COMANDOS.
obtengo el mismo resultado: DESTINO
Que es lo que debe ser.
En cambio si ejecuto:
if (MI_DIRECCION==trama[1]) {Serial.print("Son iguales");}
No me reconoce que las dos cadenas sean iguales.
Ya he comprobado que no existan carácteres 'en blanco' (LF, CR,....) delante o detrás de las cadenas...
¿Alguién se le ocurre que puede causar que dos cadenas que son iguales, Arduino no las vea igual?
Si es así tienes que tener en cuenta que ese 1 de trama[1] lo tienes codificado en ASCII al ser un carácter, por lo que no es un 1, si no un 31, réstale 30 y ya podrás comprarlos.
curro92: me fué a la perfección. Y acabo de sacar una GRAN conclusión: no saco partido del C!!
chiva: no he entendido tu respuesta. Pero ya esta. La solución de curro me ha ido a las milñ maravillas.
Guau!! 10 carácteres para tener una dirección? Por qué no lo mandas en forma de byte (no ascii), y puedes tener hasta 255 diferentes dispositivos y solamente usando 1 byte??
Es decir, cada dispositivo le corresponde un número (del 0 a 255).
Para mandar por puerto serie es Serial.print(direccion,BYTE) dónde dirección es tu número de dispositivo.
Cuando lo recibas es tan sencillo como comparar dos números....
Por cierto, usando la consola serie que viene con Arduino, siempre verás el cáracter (ASCII) que le corresponde al número que has enviado. Ésto puede llegar a ser muy confuso.... Te recomiendo usar RealTerm.
Bueno, todo esto es asumiendo que estas creando el protocolo tu mismo y no estas usando algo que ya te viene así.....
Gracias de todas maneras Igor por la colaboración.
chiva: Ya me lo he imaginado, pero no... Con trama[1] unicamente hago referencia al primer elemento del array trama, donde trama son diferentes cadenas, que se transmien y reciben en serie como una unica cadena.