![](/media/cache/profiles/Felicito_-_New_Avatar.jpg.50x50_q85.jpg)
Actualizacion General del codigo para CCN con el objetivo de proveer mantenimiento estable.
Diff: exe_rfid.cpp
- Revision:
- 1:c7bcbf5eac28
- Child:
- 3:bf6747585064
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exe_rfid.cpp Mon May 24 01:42:28 2021 -0600 @@ -0,0 +1,125 @@ +/** + * @file exe_rfid.cpp + * @author Felícito Manzano (felicito.manzano@detektor.com.sv) + * @brief + * @version 0.1 + * @date 2021-05-23 + * + * @copyright Copyright (c) 2021 + * + */ + + +#include "exe_rfid.hpp" +#include "constantes.hpp" +#include "BufferedSerial.h" +#include "f_basicas.hpp" + + +int leer_rfid(BufferedSerial *puerto_data, char id[256]) +{ + /* Esta función se encarga de leer el puerto serial y + almacenar la respuesta en un buffer de datos de entrada. + Esta función retorna la cantidad de caracteres leidos*/ + int i = 0; + + while (puerto_data -> readable()) {// || (i < 19)) { + int incoming_char = puerto_data -> getc(); + id[i] = incoming_char; + i++; + } + id[i] = '\0'; //strcpy(id, tmp_buff); + + return(i); +} + + +extern BufferedSerial rfid; +extern DigitalOut display_DP; +extern BusOut display_H; +extern BusOut display_dM; +extern BusOut display_uM; +extern Serial pcsusb; +extern Ticker ticker_minuto; +extern Timer t_apagado; +extern bool mostrar_tiempo; +extern char buffer_antena_ID[]; +extern char antena_trailerID_HEX[]; +extern char actual_trailerID_HEX[]; +extern char skytrack_frame[]; +extern int rfid_respuesta; +extern int bahia_vacia; +extern int lidar_vacio; +extern int comparacion; +extern int contador_diferentes; +extern int contador_tramas; +extern int horas; +extern int dminutos; +extern int uminutos; +extern int tiempo_luz_amarilla; +extern int tiempo_luz_roja; + +void exe_RFiD() { + rfid_respuesta = leer_rfid(&rf_id, buffer_antena_ID); + if (rfid_respuesta == 0) { // En caso que no se recibe información + bahia_vacia++; + if (bahia_vacia == DECLARAR_VACIO) { // Si ha pasado tiempo sin recibir datos de la antena RFiD + bahia_vacia = 0; // Para dar más tiempo a que responda la antena. + } + } else if ((rfid_respuesta > 16) && (rfid_respuesta <= 20)) { // En caso se recibió información del lector RFiD + bahia_vacia = lidar_vacio = 0; // Reiniciar el contador de vacio + convertir_id(buffer_antena_ID, antena_trailerID_HEX, &rfid_respuesta); + pcusb.printf("\r\nRFiD[%d]: %s", rfid_respuesta, antena_trailerID_HEX); + + comparacion = strcmp(actual_trailerID_HEX, antena_trailerID_HEX); + if (comparacion == 0) { // Comparar si se ha recuperado el anterior + if (!mostrar_tiempo) { + mostrar_tiempo = true; + pcusb.printf("\r\nReanudar conteo previo..."); + t_apagado.stop(); + t_apagado.reset(); + display_DP = 1; + presentar_torre(&VERDE, &torreLuz); // Cambiar a luz verde + presentar_tiempo(&horas, &dminutos, &uminutos, &display_H, &display_dM, &display_uM); // Configurar a 0 el cronometro + } + contador_diferentes = 0; + } else { // Comparar si es un nuevo cabezal + contador_diferentes++; // Incrementar contador de diferentes + pcusb.printf("\r\nDiferentes: %d", contador_diferentes); + + if (contador_diferentes == DELTA_ID) { + pcusb.printf("\r\nNuevo ID de cabezal...\r\n"); + mostrar_tiempo = true; + ticker_minuto.detach(); + t_ocupado.reset(); t_ocupado.start(); + t_apagado.stop(); + ticker_minuto.attach(&actualizar_minuto, 60.0); + horas = dminutos = uminutos = 0; // Reset las variables del cronometro + strcpy(actual_trailerID_HEX, antena_trailerID_HEX); + presentar_torre(&VERDE, &torreLuz); // Cambiar a luz verde + presentar_tiempo(&horas, &dminutos, &uminutos, &display_H, &display_dM, &display_uM); // Configurar a 0 el cronometro + display_DP = 1; + contador_diferentes = 0; + + pcusb.printf("\r\nSemaforo VERDE..."); + pcusb.printf("\r\nTiempo inicia en [0:00]"); + w = tiempo_asignado(actual_trailerID_HEX, &tiempo_luz_amarilla, &tiempo_luz_roja); // Cargar los tiempos de la torre de luz + if (w == 0) { + pcusb.printf("\r\nSin tiempo predeterminado\r\n\r\n"); + } else { + pcusb.printf("\r\nSemaforo - Amarillo:%d Rojo:%d\r\n\r\n", tiempo_luz_amarilla, tiempo_luz_roja); + } + + memset(skytrack_frame, '\0', sizeof skytrack_frame); // Limpiar última trama + sprintf(skytrack_frame, "%s%s%s%s%s%04X%s", + CABECERA_TX, CODIGO_INT, BAY_NEWID, actual_trailerID_HEX, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER); + gv300.printf("%s\r\n", skytrack_frame); + wait_ms(300); + } + } + } else { + bahia_vacia = lidar_vacio = 0; + pcusb.printf("\r\nDescartados %d", rfid_respuesta); + memset(antena_trailerID_HEX, '\0', sizeof antena_trailerID_HEX); + } +} \ No newline at end of file