Felícito Manzano / Mbed OS CCN_Control_Bahia_TFMiniPlus

Dependencies:   BufferedSerial

Committer:
fmanzano_dtk
Date:
Mon May 24 10:02:33 2021 -0600
Revision:
5:2530bd8d8f7d
Parent:
4:e0b1d06c5cc5
Child:
7:d11eb8f1a02e
Actualizacion general

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 5:2530bd8d8f7d 27 BufferedSerial rf_id(RF_ID_TX, RF_ID_RX);
fmanzano_dtk 5:2530bd8d8f7d 28 BufferedSerial lidar(LIDAR_TX, LIDAR_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 1:c7bcbf5eac28 73 /** TICKER DE MBED ***************************************** */
fmanzano_dtk 1:c7bcbf5eac28 74 Timer t_apagado;
fmanzano_dtk 1:c7bcbf5eac28 75 Timer t_ocupado;
fmanzano_dtk 1:c7bcbf5eac28 76 Ticker ticker_funcionando; // Ticker para hacer titilar un led
fmanzano_dtk 1:c7bcbf5eac28 77 Ticker ticker_heartbeat; // Ticker para transmitir a Skytrack
fmanzano_dtk 1:c7bcbf5eac28 78 Ticker ticker_minuto; // Ticker para contar un minuto
fmanzano_dtk 1:c7bcbf5eac28 79 Ticker ticker_query_LiDAR; // Ticker para Consultar LiDAR
fmanzano_dtk 1:c7bcbf5eac28 80
fmanzano_dtk 1:c7bcbf5eac28 81
fmanzano_dtk 1:c7bcbf5eac28 82 /** FUNCIONES GENERALES ***************************************** */
fmanzano_dtk 1:c7bcbf5eac28 83 void funcionando() {
fmanzano_dtk 1:c7bcbf5eac28 84 myled = !myled;
fmanzano_dtk 1:c7bcbf5eac28 85 }
fmanzano_dtk 1:c7bcbf5eac28 86
fmanzano_dtk 1:c7bcbf5eac28 87 void hearbeat_SKT() {
fmanzano_dtk 1:c7bcbf5eac28 88 tx_heartbeatSKT = true;
fmanzano_dtk 1:c7bcbf5eac28 89
fmanzano_dtk 1:c7bcbf5eac28 90 }
fmanzano_dtk 1:c7bcbf5eac28 91
fmanzano_dtk 1:c7bcbf5eac28 92 void minute_passed() {
fmanzano_dtk 1:c7bcbf5eac28 93 add_a_minute = true;
fmanzano_dtk 1:c7bcbf5eac28 94 }
fmanzano_dtk 1:c7bcbf5eac28 95
fmanzano_dtk 1:c7bcbf5eac28 96 void pressed() {
fmanzano_dtk 1:c7bcbf5eac28 97 do_test = true;
fmanzano_dtk 1:c7bcbf5eac28 98 }
fmanzano_dtk 1:c7bcbf5eac28 99
fmanzano_dtk 1:c7bcbf5eac28 100 void do_querryLIDAR(){
fmanzano_dtk 1:c7bcbf5eac28 101 queryLIDAR = true;
fmanzano_dtk 1:c7bcbf5eac28 102 }
fmanzano_dtk 0:3f87407d8640 103
fmanzano_dtk 0:3f87407d8640 104
fmanzano_dtk 0:3f87407d8640 105 int main()
fmanzano_dtk 0:3f87407d8640 106 {
fmanzano_dtk 1:c7bcbf5eac28 107 pcusb.baud(115200); // Configuracion de Baudrate para la interfaz serial para USB
fmanzano_dtk 1:c7bcbf5eac28 108 gv300.baud(115200); // Configuración de Baudrate para el cp gv300
fmanzano_dtk 1:c7bcbf5eac28 109 rf_id.baud(115200); // Configuración de Baudrate para el lector RFiD
fmanzano_dtk 1:c7bcbf5eac28 110 lidar.baud(115200); // Configuración de Baudrate para el LiDAR
fmanzano_dtk 1:c7bcbf5eac28 111
fmanzano_dtk 1:c7bcbf5eac28 112 torreLuz.write(COLOR_TORRE_LUZ[APAGADO_TL]); // Apagar Torre de Luz
fmanzano_dtk 1:c7bcbf5eac28 113 display_uM.write(DIGITOS[APAGADO_7S]); // Apagar display de unidades de minuto
fmanzano_dtk 1:c7bcbf5eac28 114 display_dM.write(DIGITOS[APAGADO_7S]); // Apagar display de decenas de minuto
fmanzano_dtk 1:c7bcbf5eac28 115 display_H.write(DIGITOS[APAGADO_7S]); // Apagar display de horas
fmanzano_dtk 1:c7bcbf5eac28 116
fmanzano_dtk 1:c7bcbf5eac28 117 memset(antena_trailerID_HEX, '\0', sizeof antena_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 118 memset(actual_trailerID_HEX, '\0', sizeof actual_trailerID_HEX);
fmanzano_dtk 1:c7bcbf5eac28 119 memset(buffer_antena_ID, '\0', sizeof buffer_antena_ID);
fmanzano_dtk 1:c7bcbf5eac28 120
fmanzano_dtk 1:c7bcbf5eac28 121 mybutton.fall(&pressed);
fmanzano_dtk 5:2530bd8d8f7d 122 ticker_funcionando.attach(&funcionando, 2.0);
fmanzano_dtk 1:c7bcbf5eac28 123 ticker_heartbeat.attach(&tx_skytrack, TIME_HEARTBEAT);
fmanzano_dtk 5:2530bd8d8f7d 124 ticker_query_LiDAR.attach(&do_querryLIDAR, 2.0);
fmanzano_dtk 5:2530bd8d8f7d 125
fmanzano_dtk 1:c7bcbf5eac28 126 booting_gtdat(&pcusb, &gv300); // Enviar notificación de inicio
fmanzano_dtk 1:c7bcbf5eac28 127 lidar.write(TFMINIPLUS_UPDATE_RATE,6);
fmanzano_dtk 1:c7bcbf5eac28 128 flush_uart_rx(&lidar);
fmanzano_dtk 1:c7bcbf5eac28 129
fmanzano_dtk 1:c7bcbf5eac28 130 /**
fmanzano_dtk 1:c7bcbf5eac28 131 * @brief INICIAR WATCHDOG
fmanzano_dtk 1:c7bcbf5eac28 132 * Se crea una instancia para el Watchdog, se define el pre-escaler
fmanzano_dtk 1:c7bcbf5eac28 133 * y el valor máximo en caso que no se actualice se genera el reinicio.
fmanzano_dtk 1:c7bcbf5eac28 134 */
fmanzano_dtk 1:c7bcbf5eac28 135 my_iwdg.Instance = IWDG;
fmanzano_dtk 1:c7bcbf5eac28 136 my_iwdg.Init.Prescaler = IWDG_PRESCALER_256;
fmanzano_dtk 1:c7bcbf5eac28 137 my_iwdg.Init.Reload = 0x0FFF;
fmanzano_dtk 1:c7bcbf5eac28 138 my_iwdg.Init.Window = IWDG_WINDOW_DISABLE;
fmanzano_dtk 1:c7bcbf5eac28 139 HAL_IWDG_Init(&my_iwdg);
fmanzano_dtk 3:bf6747585064 140 booting_gtdat(&pcusb, &gv300);
fmanzano_dtk 1:c7bcbf5eac28 141
fmanzano_dtk 0:3f87407d8640 142 while (true) {
fmanzano_dtk 1:c7bcbf5eac28 143 if (do_test) {
fmanzano_dtk 1:c7bcbf5eac28 144 do_test = false;
fmanzano_dtk 1:c7bcbf5eac28 145 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 1:c7bcbf5eac28 146 test_display7s();
fmanzano_dtk 1:c7bcbf5eac28 147 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 1:c7bcbf5eac28 148 }
fmanzano_dtk 1:c7bcbf5eac28 149
fmanzano_dtk 1:c7bcbf5eac28 150 if (add_a_minute) {
fmanzano_dtk 1:c7bcbf5eac28 151 add_a_minute = false;
fmanzano_dtk 4:e0b1d06c5cc5 152 actualizar_minuto();
fmanzano_dtk 1:c7bcbf5eac28 153 }
fmanzano_dtk 1:c7bcbf5eac28 154
fmanzano_dtk 1:c7bcbf5eac28 155 if (tx_heartbeatSKT) {
fmanzano_dtk 1:c7bcbf5eac28 156 tx_heartbeatSKT = false;
fmanzano_dtk 3:bf6747585064 157 memset(skytrack_frame, '\0', sizeof(skytrack_frame));
fmanzano_dtk 1:c7bcbf5eac28 158
fmanzano_dtk 1:c7bcbf5eac28 159 }
fmanzano_dtk 1:c7bcbf5eac28 160
fmanzano_dtk 1:c7bcbf5eac28 161 if (queryLIDAR) {
fmanzano_dtk 1:c7bcbf5eac28 162 queryLIDAR = false;
fmanzano_dtk 1:c7bcbf5eac28 163 exe_LIDAR();
fmanzano_dtk 1:c7bcbf5eac28 164 }
fmanzano_dtk 1:c7bcbf5eac28 165
fmanzano_dtk 1:c7bcbf5eac28 166 exe_RFiD();
fmanzano_dtk 4:e0b1d06c5cc5 167 memset(skytrack_frame, '\0', sizeof(skytrack_frame));
fmanzano_dtk 4:e0b1d06c5cc5 168 memset(antena_trailerID_HEX, '\0', sizeof(antena_trailerID_HEX));
fmanzano_dtk 1:c7bcbf5eac28 169
fmanzano_dtk 1:c7bcbf5eac28 170 //! Actualizar Watchdog
fmanzano_dtk 1:c7bcbf5eac28 171 HAL_IWDG_Refresh(&my_iwdg);
fmanzano_dtk 0:3f87407d8640 172 }
fmanzano_dtk 0:3f87407d8640 173 }