![](/media/cache/profiles/Felicito_-_New_Avatar.jpg.50x50_q85.jpg)
Actualizacion General del codigo para CCN con el objetivo de proveer mantenimiento estable.
exe_rfid.cpp
- Committer:
- fmanzano_dtk
- Date:
- 2021-05-24
- Revision:
- 3:bf6747585064
- Parent:
- 1:c7bcbf5eac28
- Child:
- 4:e0b1d06c5cc5
File content as of revision 3:bf6747585064:
/** * @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 "BufferedSerial.h" #include "constantes.hpp" #include "f_basicas.hpp" #include "exe_rfid.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 rf_id; 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); } }