Actualizacion General del codigo para CCN con el objetivo de proveer mantenimiento estable.

Dependencies:   BufferedSerial

Committer:
fmanzano_dtk
Date:
Mon May 24 13:37:53 2021 +0000
Revision:
3:bf6747585064
Parent:
1:c7bcbf5eac28
Child:
4:e0b1d06c5cc5
Codigo en revision para correccion de typos;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 1:c7bcbf5eac28 1 /**
fmanzano_dtk 1:c7bcbf5eac28 2 * @file exe_rfid.cpp
fmanzano_dtk 1:c7bcbf5eac28 3 * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
fmanzano_dtk 1:c7bcbf5eac28 4 * @brief
fmanzano_dtk 1:c7bcbf5eac28 5 * @version 0.1
fmanzano_dtk 1:c7bcbf5eac28 6 * @date 2021-05-23
fmanzano_dtk 1:c7bcbf5eac28 7 *
fmanzano_dtk 1:c7bcbf5eac28 8 * @copyright Copyright (c) 2021
fmanzano_dtk 1:c7bcbf5eac28 9 *
fmanzano_dtk 1:c7bcbf5eac28 10 */
fmanzano_dtk 1:c7bcbf5eac28 11
fmanzano_dtk 1:c7bcbf5eac28 12
fmanzano_dtk 3:bf6747585064 13 #include "BufferedSerial.h"
fmanzano_dtk 1:c7bcbf5eac28 14 #include "constantes.hpp"
fmanzano_dtk 1:c7bcbf5eac28 15 #include "f_basicas.hpp"
fmanzano_dtk 3:bf6747585064 16 #include "exe_rfid.hpp"
fmanzano_dtk 1:c7bcbf5eac28 17
fmanzano_dtk 1:c7bcbf5eac28 18
fmanzano_dtk 1:c7bcbf5eac28 19 int leer_rfid(BufferedSerial *puerto_data, char id[256])
fmanzano_dtk 1:c7bcbf5eac28 20 {
fmanzano_dtk 1:c7bcbf5eac28 21 /* Esta función se encarga de leer el puerto serial y
fmanzano_dtk 1:c7bcbf5eac28 22 almacenar la respuesta en un buffer de datos de entrada.
fmanzano_dtk 1:c7bcbf5eac28 23 Esta función retorna la cantidad de caracteres leidos*/
fmanzano_dtk 1:c7bcbf5eac28 24 int i = 0;
fmanzano_dtk 1:c7bcbf5eac28 25
fmanzano_dtk 1:c7bcbf5eac28 26 while (puerto_data -> readable()) {// || (i < 19)) {
fmanzano_dtk 1:c7bcbf5eac28 27 int incoming_char = puerto_data -> getc();
fmanzano_dtk 1:c7bcbf5eac28 28 id[i] = incoming_char;
fmanzano_dtk 1:c7bcbf5eac28 29 i++;
fmanzano_dtk 1:c7bcbf5eac28 30 }
fmanzano_dtk 1:c7bcbf5eac28 31 id[i] = '\0'; //strcpy(id, tmp_buff);
fmanzano_dtk 1:c7bcbf5eac28 32
fmanzano_dtk 1:c7bcbf5eac28 33 return(i);
fmanzano_dtk 1:c7bcbf5eac28 34 }
fmanzano_dtk 1:c7bcbf5eac28 35
fmanzano_dtk 1:c7bcbf5eac28 36
fmanzano_dtk 3:bf6747585064 37 extern BufferedSerial rf_id;
fmanzano_dtk 1:c7bcbf5eac28 38 extern DigitalOut display_DP;
fmanzano_dtk 1:c7bcbf5eac28 39 extern BusOut display_H;
fmanzano_dtk 1:c7bcbf5eac28 40 extern BusOut display_dM;
fmanzano_dtk 1:c7bcbf5eac28 41 extern BusOut display_uM;
fmanzano_dtk 1:c7bcbf5eac28 42 extern Serial pcsusb;
fmanzano_dtk 1:c7bcbf5eac28 43 extern Ticker ticker_minuto;
fmanzano_dtk 1:c7bcbf5eac28 44 extern Timer t_apagado;
fmanzano_dtk 1:c7bcbf5eac28 45 extern bool mostrar_tiempo;
fmanzano_dtk 1:c7bcbf5eac28 46 extern char buffer_antena_ID[];
fmanzano_dtk 1:c7bcbf5eac28 47 extern char antena_trailerID_HEX[];
fmanzano_dtk 1:c7bcbf5eac28 48 extern char actual_trailerID_HEX[];
fmanzano_dtk 1:c7bcbf5eac28 49 extern char skytrack_frame[];
fmanzano_dtk 1:c7bcbf5eac28 50 extern int rfid_respuesta;
fmanzano_dtk 1:c7bcbf5eac28 51 extern int bahia_vacia;
fmanzano_dtk 1:c7bcbf5eac28 52 extern int lidar_vacio;
fmanzano_dtk 1:c7bcbf5eac28 53 extern int comparacion;
fmanzano_dtk 1:c7bcbf5eac28 54 extern int contador_diferentes;
fmanzano_dtk 1:c7bcbf5eac28 55 extern int contador_tramas;
fmanzano_dtk 1:c7bcbf5eac28 56 extern int horas;
fmanzano_dtk 1:c7bcbf5eac28 57 extern int dminutos;
fmanzano_dtk 1:c7bcbf5eac28 58 extern int uminutos;
fmanzano_dtk 1:c7bcbf5eac28 59 extern int tiempo_luz_amarilla;
fmanzano_dtk 1:c7bcbf5eac28 60 extern int tiempo_luz_roja;
fmanzano_dtk 1:c7bcbf5eac28 61
fmanzano_dtk 1:c7bcbf5eac28 62 void exe_RFiD() {
fmanzano_dtk 1:c7bcbf5eac28 63 rfid_respuesta = leer_rfid(&rf_id, buffer_antena_ID);
fmanzano_dtk 1:c7bcbf5eac28 64 if (rfid_respuesta == 0) { // En caso que no se recibe información
fmanzano_dtk 1:c7bcbf5eac28 65 bahia_vacia++;
fmanzano_dtk 1:c7bcbf5eac28 66 if (bahia_vacia == DECLARAR_VACIO) { // Si ha pasado tiempo sin recibir datos de la antena RFiD
fmanzano_dtk 1:c7bcbf5eac28 67 bahia_vacia = 0; // Para dar más tiempo a que responda la antena.
fmanzano_dtk 1:c7bcbf5eac28 68 }
fmanzano_dtk 1:c7bcbf5eac28 69 } else if ((rfid_respuesta > 16) && (rfid_respuesta <= 20)) { // En caso se recibió información del lector RFiD
fmanzano_dtk 1:c7bcbf5eac28 70 bahia_vacia = lidar_vacio = 0; // Reiniciar el contador de vacio
fmanzano_dtk 1:c7bcbf5eac28 71 convertir_id(buffer_antena_ID, antena_trailerID_HEX, &rfid_respuesta);
fmanzano_dtk 1:c7bcbf5eac28 72 pcusb.printf("\r\nRFiD[%d]: %s", rfid_respuesta, antena_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 73
fmanzano_dtk 1:c7bcbf5eac28 74 comparacion = strcmp(actual_trailerID_HEX, antena_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 75 if (comparacion == 0) { // Comparar si se ha recuperado el anterior
fmanzano_dtk 1:c7bcbf5eac28 76 if (!mostrar_tiempo) {
fmanzano_dtk 1:c7bcbf5eac28 77 mostrar_tiempo = true;
fmanzano_dtk 1:c7bcbf5eac28 78 pcusb.printf("\r\nReanudar conteo previo...");
fmanzano_dtk 1:c7bcbf5eac28 79 t_apagado.stop();
fmanzano_dtk 1:c7bcbf5eac28 80 t_apagado.reset();
fmanzano_dtk 1:c7bcbf5eac28 81 display_DP = 1;
fmanzano_dtk 1:c7bcbf5eac28 82 presentar_torre(&VERDE, &torreLuz); // Cambiar a luz verde
fmanzano_dtk 1:c7bcbf5eac28 83 presentar_tiempo(&horas, &dminutos, &uminutos, &display_H, &display_dM, &display_uM); // Configurar a 0 el cronometro
fmanzano_dtk 1:c7bcbf5eac28 84 }
fmanzano_dtk 1:c7bcbf5eac28 85 contador_diferentes = 0;
fmanzano_dtk 1:c7bcbf5eac28 86 } else { // Comparar si es un nuevo cabezal
fmanzano_dtk 1:c7bcbf5eac28 87 contador_diferentes++; // Incrementar contador de diferentes
fmanzano_dtk 1:c7bcbf5eac28 88 pcusb.printf("\r\nDiferentes: %d", contador_diferentes);
fmanzano_dtk 1:c7bcbf5eac28 89
fmanzano_dtk 1:c7bcbf5eac28 90 if (contador_diferentes == DELTA_ID) {
fmanzano_dtk 1:c7bcbf5eac28 91 pcusb.printf("\r\nNuevo ID de cabezal...\r\n");
fmanzano_dtk 1:c7bcbf5eac28 92 mostrar_tiempo = true;
fmanzano_dtk 1:c7bcbf5eac28 93 ticker_minuto.detach();
fmanzano_dtk 1:c7bcbf5eac28 94 t_ocupado.reset(); t_ocupado.start();
fmanzano_dtk 1:c7bcbf5eac28 95 t_apagado.stop();
fmanzano_dtk 1:c7bcbf5eac28 96 ticker_minuto.attach(&actualizar_minuto, 60.0);
fmanzano_dtk 1:c7bcbf5eac28 97 horas = dminutos = uminutos = 0; // Reset las variables del cronometro
fmanzano_dtk 1:c7bcbf5eac28 98 strcpy(actual_trailerID_HEX, antena_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 99 presentar_torre(&VERDE, &torreLuz); // Cambiar a luz verde
fmanzano_dtk 1:c7bcbf5eac28 100 presentar_tiempo(&horas, &dminutos, &uminutos, &display_H, &display_dM, &display_uM); // Configurar a 0 el cronometro
fmanzano_dtk 1:c7bcbf5eac28 101 display_DP = 1;
fmanzano_dtk 1:c7bcbf5eac28 102 contador_diferentes = 0;
fmanzano_dtk 1:c7bcbf5eac28 103
fmanzano_dtk 1:c7bcbf5eac28 104 pcusb.printf("\r\nSemaforo VERDE...");
fmanzano_dtk 1:c7bcbf5eac28 105 pcusb.printf("\r\nTiempo inicia en [0:00]");
fmanzano_dtk 1:c7bcbf5eac28 106 w = tiempo_asignado(actual_trailerID_HEX, &tiempo_luz_amarilla, &tiempo_luz_roja); // Cargar los tiempos de la torre de luz
fmanzano_dtk 1:c7bcbf5eac28 107 if (w == 0) {
fmanzano_dtk 1:c7bcbf5eac28 108 pcusb.printf("\r\nSin tiempo predeterminado\r\n\r\n");
fmanzano_dtk 1:c7bcbf5eac28 109 } else {
fmanzano_dtk 1:c7bcbf5eac28 110 pcusb.printf("\r\nSemaforo - Amarillo:%d Rojo:%d\r\n\r\n", tiempo_luz_amarilla, tiempo_luz_roja);
fmanzano_dtk 1:c7bcbf5eac28 111 }
fmanzano_dtk 1:c7bcbf5eac28 112
fmanzano_dtk 1:c7bcbf5eac28 113 memset(skytrack_frame, '\0', sizeof skytrack_frame); // Limpiar última trama
fmanzano_dtk 1:c7bcbf5eac28 114 sprintf(skytrack_frame, "%s%s%s%s%s%04X%s",
fmanzano_dtk 1:c7bcbf5eac28 115 CABECERA_TX, CODIGO_INT, BAY_NEWID, actual_trailerID_HEX, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 1:c7bcbf5eac28 116 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 1:c7bcbf5eac28 117 wait_ms(300);
fmanzano_dtk 1:c7bcbf5eac28 118 }
fmanzano_dtk 1:c7bcbf5eac28 119 }
fmanzano_dtk 1:c7bcbf5eac28 120 } else {
fmanzano_dtk 1:c7bcbf5eac28 121 bahia_vacia = lidar_vacio = 0;
fmanzano_dtk 1:c7bcbf5eac28 122 pcusb.printf("\r\nDescartados %d", rfid_respuesta);
fmanzano_dtk 1:c7bcbf5eac28 123 memset(antena_trailerID_HEX, '\0', sizeof antena_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 124 }
fmanzano_dtk 1:c7bcbf5eac28 125 }