TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 15 de Octubre de 2009, 17:16:18
-
Hola, estoy tratando de hacer una comparacion de una cadenas de caracteres recibidos a traves del Uart desde una PC, el problema es el siguiente:
Recibo correctamente los caracteres pero cuando trato de hacer la comparacion usando la siguiente rutina todas las condiciones se ejecutan a pesar de que solo uno de los tres condiciones se cumple, alguien me podria decir cual es mi error.
void Test_SMS_RX(){
if ((cbuff[10]=='R')&& (cbuff[11]=='E') && (cbuff[12]=='L') && (cbuff[13]=='A')&& (cbuff[14]=='Y')&& (cbuff[15]=='-') && (cbuff[16]=='O') && (cbuff[17]=='N')){
delay_ms(100);
ON(RELAY);
break;
}
if ((cbuff[10]=='R')&& (cbuff[11]=='R') && (cbuff[12]=='L') && (cbuff[13]=='A')&& (cbuff[14]=='Y')&& (cbuff[15]=='-') && (cbuff[16]=='O') && (cbuff[17]=='F')&& (cbuff[18]=='F')){
delay_ms(100);
OFF(RELAY);
break;
}
if ((cbuff[10]=='T')&& (cbuff[11]=='I') && (cbuff[12]=='M') && (cbuff[13]=='E')&& (cbuff[14]=='R')&& (cbuff[15]=='-') && (cbuff[16]=='O') && (cbuff[17]=='N')){
delay_ms(100);
ON (TIMER);
break;
}
}
-
Hola.
Para que se te cumpla solo una:
if(Condition1)
{
//Code
}
else if (Condition2)
{
}
else if(Condition3)
{
}
Para comparar cadenas es mejor usar strncmp();
Saludos
-
Tres detalles:
- La segunda letra del comando relay Off está mal puesta.
- break solo se usa para terminar la ejecución del if pero no la de la función, reemplázala con return que termina la función.
- ¿Cada cuándo llamas la función Test_SMS_RX()? Si la llamas muy tarde mientras la cadena se está actualizando podrías tener resultados inesperados como la ejecución de los 3 IF's
-
Gracias por la aclaracion :mrgreen: