Autor Tema: ¿Por qué se ejecuta el else  (Leído 1954 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado JhinDeJonia

  • PIC10
  • *
  • Mensajes: 2
¿Por qué se ejecuta el else
« en: 10 de Abril de 2019, 13:34:16 »
Saludos. Estoy usando una librería para el uso del módulo RC522 con el pic16f887. El código que encontré compara una variable dentro del if como se muestra abajo. Dentro del else agregue  que cuando no detecte algún tag encienda un LED pero el else se ejecuta aun cuando el if se cumple. ¿Qué estoy haciendo mal?
Código: CSS
  1. while(TRUE)
  2.    {      
  3.      //  Check to see if a Tag was detected
  4.      // If yes, then the variable FoundTag will contain "MI_OK"
  5.     FoundTag = requestTag(MF1_REQIDL, TagData);
  6.     lcd_gotoxy(1,1);
  7.     printf(lcd_putc,"Checking for Tag \r\n");      
  8.    
  9.      if (FoundTag == MI_OK)
  10.      {
  11.         lcd_gotoxy(1,2);      
  12.         printf(lcd_putc,"Encontrado       ");
  13.         delay_ms(1000);
  14.         lcd_putc('\f');
  15.         Get_UID();
  16.         Search_for_matching_Tag();
  17.         delay_ms(1000);
  18.      }
  19.      
  20.      else
  21.          {
  22.          
  23.          lcd_gotoxy(1,2);          
  24.          printf(lcd_putc,"No encontrado    ");
  25.          output_high(E);
  26.          delay_ms(1000);
  27.          output_low(E);
  28.          }
  29.    }
« Última modificación: 10 de Abril de 2019, 14:18:08 por JhinDeJonia »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Por qué se ejecuta el else
« Respuesta #1 en: 10 de Abril de 2019, 14:52:01 »
EDITO...

BYTE es una palabra reservada en CCS, no podes usarla asi. usa un int para eso... No se si eso es el error o no... Pero vos estas seguro que de ahi puede salir otra cosa que no sea un 0 ?
« Última modificación: 10 de Abril de 2019, 15:25:55 por KILLERJC »

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:¿Por qué se ejecuta el else
« Respuesta #2 en: 10 de Abril de 2019, 15:42:52 »
... El código que encontré compara una variable dentro del if como se muestra abajo. Dentro del else agregue  que cuando no detecte algún tag encienda un LED pero el else se ejecuta aun cuando el if se cumple. ¿Qué estoy haciendo mal?...

Ahi lo único "raro" que se ve es que después de ejecutar el cumplimiento del if , inmediatamente vuelve a ejecutar: FoundTag = requestTag(MF1_REQIDL, TagData);  y si este nuevo valor no es MI_OK ejecutará el else.   Eso se percibirá como que siempre lo ejecuta.

Desconectado JhinDeJonia

  • PIC10
  • *
  • Mensajes: 2
Re:¿Por qué se ejecuta el else
« Respuesta #3 en: 10 de Abril de 2019, 16:43:44 »
Cuando lo vi pensé lo mismo pero viendo el codigo de MFRC522_Driver.h el creador del código definió MI_OK igual a 0. Lo que veo que sucede es que la primera lectura cuando se tiene una tarjeta sobre el lector el programa funciona correctamente pero al hacer la segunda lectura manda el valor MI_ERR que es el otro valor que puede tomar la variable status lo cual debería de estar mal ya que el módulo RC522 si esta detectando una tarjeta y por lo tanto ejecuta el else a pesar de que si hay una tarjeta. La tercera lectura la marca bien, status = MI_OK. Cada tres iteraciones regresa MI_OK a pesar de que si hay una tarjeta en el rango del lector. He leído e investigado acerca del funcionamiento del código pero mis conocimientos en cuanto a programación son pocos así que agradecería si pudieran ayudarme brindando el nombre de una pagina o libro para mejorar mis conocimientos. Les dejo la parte del código de la librería MFRC522_Driver.h  que se encargar de detectar si hay o no una tarjeta cerca del lector. 

Código: CSS
  1. int requestTag(byte mode, byte *data) {
  2. int status, len;
  3. writeToRegister(BitFramingReg, 0x07); // TxLastBists = BitFramingReg[2..0]
  4. data[0] = mode;
  5. status = commandTag(MFRC522_TRANSCEIVE, data, 1, data, &len);
  6. if ((status != MI_OK) || (len != 0x10)) {
  7. status = MI_ERR;
  8. }
  9. return status;
  10. }


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Por qué se ejecuta el else
« Respuesta #4 en: 10 de Abril de 2019, 17:04:22 »
Si luego lo vi, por eso habia editado el mensaje.....

Podes probar algunas cosas, como:

- poner a FoundTag como volatile
- ver que devuelve commandTag


 

anything