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

Dependencies:   BufferedSerial

Committer:
fmanzano_dtk
Date:
Mon May 24 12:13:06 2021 -0600
Revision:
8:3fc41e5029f7
Parent:
7:d11eb8f1a02e
Cambio de puertos RFID y LIDAR

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 1:c7bcbf5eac28 1 /**
fmanzano_dtk 1:c7bcbf5eac28 2 * @file main.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 0:3f87407d8640 11
fmanzano_dtk 1:c7bcbf5eac28 12 #include "mbed.h"
fmanzano_dtk 5:2530bd8d8f7d 13 #include "stm32f0xx_hal_iwdg.h"
fmanzano_dtk 1:c7bcbf5eac28 14 #include "BufferedSerial.h"
fmanzano_dtk 1:c7bcbf5eac28 15 #include "myPinout.hpp"
fmanzano_dtk 1:c7bcbf5eac28 16 #include "f_basicas.hpp"
fmanzano_dtk 1:c7bcbf5eac28 17 #include "constantes.hpp"
fmanzano_dtk 1:c7bcbf5eac28 18 #include "testing.hpp"
fmanzano_dtk 1:c7bcbf5eac28 19 #include "tagid.hpp"
fmanzano_dtk 1:c7bcbf5eac28 20 #include "lidar_tfminiplus.hpp"
fmanzano_dtk 1:c7bcbf5eac28 21 #include "exe_lidar.hpp"
fmanzano_dtk 1:c7bcbf5eac28 22 #include "exe_rfid.hpp"
fmanzano_dtk 1:c7bcbf5eac28 23
fmanzano_dtk 1:c7bcbf5eac28 24 /** CONFIGURACIÓN DE INTERFACES ***************************************** */
fmanzano_dtk 1:c7bcbf5eac28 25 Serial pcusb(USBTX, USBRX);
fmanzano_dtk 1:c7bcbf5eac28 26 Serial gv300(GV300_TX, GV300_RX);
fmanzano_dtk 8:3fc41e5029f7 27 BufferedSerial rf_id(LIDAR_TX, LIDAR_RX));
fmanzano_dtk 8:3fc41e5029f7 28 BufferedSerial lidar(RF_ID_TX, RF_ID_RX);
fmanzano_dtk 1:c7bcbf5eac28 29 InterruptIn mybutton(USER_BUTTON);
fmanzano_dtk 1:c7bcbf5eac28 30 DigitalOut myled(LED1);
fmanzano_dtk 1:c7bcbf5eac28 31 BusOut display_H(A_HOUR, B_HOUR, C_HOUR, D_HOUR, E_HOUR, F_HOUR, G_HOUR);
fmanzano_dtk 1:c7bcbf5eac28 32 BusOut display_dM(A_DECE, B_DECE, C_DECE, D_DECE, E_DECE, F_DECE, G_DECE);
fmanzano_dtk 1:c7bcbf5eac28 33 BusOut display_uM(A_MINU, B_MINU, C_MINU, D_MINU, E_MINU, F_MINU, G_MINU);
fmanzano_dtk 1:c7bcbf5eac28 34 DigitalOut display_DP(DP_HOUR);
fmanzano_dtk 1:c7bcbf5eac28 35 BusOut torreLuz(SEMAFORO_V, SEMAFORO_A, SEMAFORO_R);
fmanzano_dtk 1:c7bcbf5eac28 36 static IWDG_HandleTypeDef my_iwdg; // HAL BASED
fmanzano_dtk 0:3f87407d8640 37
fmanzano_dtk 0:3f87407d8640 38
fmanzano_dtk 1:c7bcbf5eac28 39 /** BANDERAS/FLUJO DE CÓDIGO ***************************************** */
fmanzano_dtk 1:c7bcbf5eac28 40 bool queryLIDAR = false;
fmanzano_dtk 1:c7bcbf5eac28 41 bool tx_heartbeatSKT = false;
fmanzano_dtk 1:c7bcbf5eac28 42 bool add_a_minute = false;
fmanzano_dtk 1:c7bcbf5eac28 43 bool do_test = false;
fmanzano_dtk 1:c7bcbf5eac28 44
fmanzano_dtk 1:c7bcbf5eac28 45 /** VARIABLES ***************************************** */
fmanzano_dtk 1:c7bcbf5eac28 46 float tiempo_actual = 0.0; // Para almacenar el valor del temporizador
fmanzano_dtk 1:c7bcbf5eac28 47 bool lidar_respuesta = false; // Para determinar si el LiDAR respondió al External Trigar
fmanzano_dtk 1:c7bcbf5eac28 48 bool lidar_valido = false; // Para determinar si la respuesta LiDAR es valida
fmanzano_dtk 1:c7bcbf5eac28 49 bool mostrar_tiempo = false; // Para determinar si se encienden o apagan los Display de 7s
fmanzano_dtk 1:c7bcbf5eac28 50 char lidar_rx_frame[18]; // Para almacenar la trama de respuesta del LiDAR
fmanzano_dtk 1:c7bcbf5eac28 51 char skytrack_frame[128]; // Para almacenar la trama a enviar a Skytrack
fmanzano_dtk 1:c7bcbf5eac28 52 char buffer_antena_ID[256]; // Para almacenar el ID del cabezal ASCII-puro desde RFiD -19
fmanzano_dtk 1:c7bcbf5eac28 53 char actual_trailerID_HEX[15]; // Para almacenar el ID recibido del cabezal en formato HEX-ASCII -15
fmanzano_dtk 1:c7bcbf5eac28 54 char antena_trailerID_HEX[15]; // Para almacenar el ID del cabezal previo en formato HEX-ASCII
fmanzano_dtk 1:c7bcbf5eac28 55 int previo_semaforo = 0;
fmanzano_dtk 1:c7bcbf5eac28 56 int rfid_respuesta = 0; // Para almacenar los bytes recibidos de la antena RFiD
fmanzano_dtk 1:c7bcbf5eac28 57 int tiempo_luz_amarilla = 0; // Tiempo para encender la luz amarilla
fmanzano_dtk 1:c7bcbf5eac28 58 int tiempo_luz_roja = 0; // Tiempo para encender la luz roja
fmanzano_dtk 1:c7bcbf5eac28 59 int horas = 0; // Acumulador de horas
fmanzano_dtk 1:c7bcbf5eac28 60 int dminutos = 0; // Acumulador de decenas de minutos
fmanzano_dtk 1:c7bcbf5eac28 61 int uminutos = 0; // Acumulador de unidades de minutos
fmanzano_dtk 1:c7bcbf5eac28 62 int rtc_delta = 0; // Para hacer la comparación con los tiempos, y calcular el tiempo total en Bahia
fmanzano_dtk 1:c7bcbf5eac28 63 int bahia_vacia = 0; // Contador para determinar cuando una bahía está vacía, según RFiD
fmanzano_dtk 1:c7bcbf5eac28 64 int lidar_vacio = 0; // Contador para determinar cuando una bahía está vacía, según LiDAR
fmanzano_dtk 1:c7bcbf5eac28 65 int lidar_contador_no_ack = 0; // Contador para determinar cuantas veces no ha respondido el LiDAR
fmanzano_dtk 1:c7bcbf5eac28 66 int contador_diferentes = 0; // Para contar la cantidad de TAGiD Diferentes
fmanzano_dtk 1:c7bcbf5eac28 67 int comparacion = 0; // Para comparar cadenas cuando es diferente el RFiD
fmanzano_dtk 1:c7bcbf5eac28 68 int contador_tramas = 0; // Contador de tramas enviadas al CP
fmanzano_dtk 1:c7bcbf5eac28 69 int distancia = 0; // Almacenar lectura de distancia por LiDAR
fmanzano_dtk 1:c7bcbf5eac28 70 int w = 0; // Registro de trabajo de multiples usos
fmanzano_dtk 1:c7bcbf5eac28 71
fmanzano_dtk 1:c7bcbf5eac28 72
fmanzano_dtk 7:d11eb8f1a02e 73
fmanzano_dtk 7:d11eb8f1a02e 74
fmanzano_dtk 7:d11eb8f1a02e 75
fmanzano_dtk 1:c7bcbf5eac28 76 /** TICKER DE MBED ***************************************** */
fmanzano_dtk 1:c7bcbf5eac28 77 Timer t_apagado;
fmanzano_dtk 1:c7bcbf5eac28 78 Timer t_ocupado;
fmanzano_dtk 1:c7bcbf5eac28 79 Ticker ticker_funcionando; // Ticker para hacer titilar un led
fmanzano_dtk 1:c7bcbf5eac28 80 Ticker ticker_heartbeat; // Ticker para transmitir a Skytrack
fmanzano_dtk 1:c7bcbf5eac28 81 Ticker ticker_minuto; // Ticker para contar un minuto
fmanzano_dtk 1:c7bcbf5eac28 82 Ticker ticker_query_LiDAR; // Ticker para Consultar LiDAR
fmanzano_dtk 1:c7bcbf5eac28 83
fmanzano_dtk 1:c7bcbf5eac28 84
fmanzano_dtk 1:c7bcbf5eac28 85 /** FUNCIONES GENERALES ***************************************** */
fmanzano_dtk 1:c7bcbf5eac28 86 void funcionando() {
fmanzano_dtk 1:c7bcbf5eac28 87 myled = !myled;
fmanzano_dtk 1:c7bcbf5eac28 88 }
fmanzano_dtk 1:c7bcbf5eac28 89
fmanzano_dtk 1:c7bcbf5eac28 90 void hearbeat_SKT() {
fmanzano_dtk 1:c7bcbf5eac28 91 tx_heartbeatSKT = true;
fmanzano_dtk 1:c7bcbf5eac28 92
fmanzano_dtk 1:c7bcbf5eac28 93 }
fmanzano_dtk 1:c7bcbf5eac28 94
fmanzano_dtk 1:c7bcbf5eac28 95 void minute_passed() {
fmanzano_dtk 1:c7bcbf5eac28 96 add_a_minute = true;
fmanzano_dtk 1:c7bcbf5eac28 97 }
fmanzano_dtk 1:c7bcbf5eac28 98
fmanzano_dtk 1:c7bcbf5eac28 99 void pressed() {
fmanzano_dtk 1:c7bcbf5eac28 100 do_test = true;
fmanzano_dtk 1:c7bcbf5eac28 101 }
fmanzano_dtk 1:c7bcbf5eac28 102
fmanzano_dtk 1:c7bcbf5eac28 103 void do_querryLIDAR(){
fmanzano_dtk 1:c7bcbf5eac28 104 queryLIDAR = true;
fmanzano_dtk 1:c7bcbf5eac28 105 }
fmanzano_dtk 0:3f87407d8640 106
fmanzano_dtk 0:3f87407d8640 107
fmanzano_dtk 0:3f87407d8640 108 int main()
fmanzano_dtk 0:3f87407d8640 109 {
fmanzano_dtk 1:c7bcbf5eac28 110 pcusb.baud(115200); // Configuracion de Baudrate para la interfaz serial para USB
fmanzano_dtk 1:c7bcbf5eac28 111 gv300.baud(115200); // Configuración de Baudrate para el cp gv300
fmanzano_dtk 1:c7bcbf5eac28 112 rf_id.baud(115200); // Configuración de Baudrate para el lector RFiD
fmanzano_dtk 1:c7bcbf5eac28 113 lidar.baud(115200); // Configuración de Baudrate para el LiDAR
fmanzano_dtk 1:c7bcbf5eac28 114
fmanzano_dtk 1:c7bcbf5eac28 115 torreLuz.write(COLOR_TORRE_LUZ[APAGADO_TL]); // Apagar Torre de Luz
fmanzano_dtk 1:c7bcbf5eac28 116 display_uM.write(DIGITOS[APAGADO_7S]); // Apagar display de unidades de minuto
fmanzano_dtk 1:c7bcbf5eac28 117 display_dM.write(DIGITOS[APAGADO_7S]); // Apagar display de decenas de minuto
fmanzano_dtk 1:c7bcbf5eac28 118 display_H.write(DIGITOS[APAGADO_7S]); // Apagar display de horas
fmanzano_dtk 1:c7bcbf5eac28 119
fmanzano_dtk 1:c7bcbf5eac28 120 memset(antena_trailerID_HEX, '\0', sizeof antena_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 121 memset(actual_trailerID_HEX, '\0', sizeof actual_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 122 memset(buffer_antena_ID, '\0', sizeof buffer_antena_ID);
fmanzano_dtk 1:c7bcbf5eac28 123
fmanzano_dtk 1:c7bcbf5eac28 124 mybutton.fall(&pressed);
fmanzano_dtk 5:2530bd8d8f7d 125 ticker_funcionando.attach(&funcionando, 2.0);
fmanzano_dtk 1:c7bcbf5eac28 126 ticker_heartbeat.attach(&tx_skytrack, TIME_HEARTBEAT);
fmanzano_dtk 5:2530bd8d8f7d 127 ticker_query_LiDAR.attach(&do_querryLIDAR, 2.0);
fmanzano_dtk 5:2530bd8d8f7d 128
fmanzano_dtk 1:c7bcbf5eac28 129 booting_gtdat(&pcusb, &gv300); // Enviar notificación de inicio
fmanzano_dtk 1:c7bcbf5eac28 130 lidar.write(TFMINIPLUS_UPDATE_RATE,6);
fmanzano_dtk 1:c7bcbf5eac28 131 flush_uart_rx(&lidar);
fmanzano_dtk 1:c7bcbf5eac28 132
fmanzano_dtk 1:c7bcbf5eac28 133 /**
fmanzano_dtk 1:c7bcbf5eac28 134 * @brief INICIAR WATCHDOG
fmanzano_dtk 1:c7bcbf5eac28 135 * Se crea una instancia para el Watchdog, se define el pre-escaler
fmanzano_dtk 1:c7bcbf5eac28 136 * y el valor máximo en caso que no se actualice se genera el reinicio.
fmanzano_dtk 1:c7bcbf5eac28 137 */
fmanzano_dtk 1:c7bcbf5eac28 138 my_iwdg.Instance = IWDG;
fmanzano_dtk 1:c7bcbf5eac28 139 my_iwdg.Init.Prescaler = IWDG_PRESCALER_256;
fmanzano_dtk 1:c7bcbf5eac28 140 my_iwdg.Init.Reload = 0x0FFF;
fmanzano_dtk 1:c7bcbf5eac28 141 my_iwdg.Init.Window = IWDG_WINDOW_DISABLE;
fmanzano_dtk 1:c7bcbf5eac28 142 HAL_IWDG_Init(&my_iwdg);
fmanzano_dtk 3:bf6747585064 143 booting_gtdat(&pcusb, &gv300);
fmanzano_dtk 1:c7bcbf5eac28 144
fmanzano_dtk 0:3f87407d8640 145 while (true) {
fmanzano_dtk 1:c7bcbf5eac28 146 if (do_test) {
fmanzano_dtk 1:c7bcbf5eac28 147 do_test = false;
fmanzano_dtk 1:c7bcbf5eac28 148 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 1:c7bcbf5eac28 149 test_display7s();
fmanzano_dtk 1:c7bcbf5eac28 150 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 1:c7bcbf5eac28 151 }
fmanzano_dtk 1:c7bcbf5eac28 152
fmanzano_dtk 1:c7bcbf5eac28 153 if (add_a_minute) {
fmanzano_dtk 1:c7bcbf5eac28 154 add_a_minute = false;
fmanzano_dtk 4:e0b1d06c5cc5 155 actualizar_minuto();
fmanzano_dtk 1:c7bcbf5eac28 156 }
fmanzano_dtk 1:c7bcbf5eac28 157
fmanzano_dtk 1:c7bcbf5eac28 158 if (tx_heartbeatSKT) {
fmanzano_dtk 1:c7bcbf5eac28 159 tx_heartbeatSKT = false;
fmanzano_dtk 3:bf6747585064 160 memset(skytrack_frame, '\0', sizeof(skytrack_frame));
fmanzano_dtk 1:c7bcbf5eac28 161
fmanzano_dtk 1:c7bcbf5eac28 162 }
fmanzano_dtk 1:c7bcbf5eac28 163
fmanzano_dtk 1:c7bcbf5eac28 164 if (queryLIDAR) {
fmanzano_dtk 1:c7bcbf5eac28 165 queryLIDAR = false;
fmanzano_dtk 1:c7bcbf5eac28 166 exe_LIDAR();
fmanzano_dtk 1:c7bcbf5eac28 167 }
fmanzano_dtk 1:c7bcbf5eac28 168
fmanzano_dtk 1:c7bcbf5eac28 169 exe_RFiD();
fmanzano_dtk 4:e0b1d06c5cc5 170 memset(skytrack_frame, '\0', sizeof(skytrack_frame));
fmanzano_dtk 4:e0b1d06c5cc5 171 memset(antena_trailerID_HEX, '\0', sizeof(antena_trailerID_HEX));
fmanzano_dtk 1:c7bcbf5eac28 172
fmanzano_dtk 1:c7bcbf5eac28 173 //! Actualizar Watchdog
fmanzano_dtk 1:c7bcbf5eac28 174 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 0:3f87407d8640 175 }
fmanzano_dtk 0:3f87407d8640 176 }