Felícito Manzano
/
CCN_Control_Bahia_TFMiniPlus
Actualizacion General del codigo para CCN con el objetivo de proveer mantenimiento estable.
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
Go to the documentation of this file.
00001 /** 00002 * @file main.cpp 00003 * @author Felícito Manzano (felicito.manzano@detektor.com.sv) 00004 * @brief 00005 * @version 0.1 00006 * @date 2021-05-23 00007 * 00008 * @copyright Copyright (c) 2021 00009 * 00010 */ 00011 00012 #include "mbed.h" 00013 #include "stm32f0xx_hal_iwdg.h" 00014 #include "BufferedSerial.h" 00015 #include "myPinout.hpp " 00016 #include "f_basicas.hpp " 00017 #include "constantes.hpp " 00018 #include "testing.hpp " 00019 #include "tagid.hpp " 00020 #include "lidar_tfminiplus.hpp " 00021 #include "exe_lidar.hpp " 00022 #include "exe_rfid.hpp " 00023 00024 /** CONFIGURACIÓN DE INTERFACES ***************************************** */ 00025 Serial pcusb(USBTX, USBRX); 00026 Serial gv300(GV300_TX, GV300_RX); 00027 BufferedSerial rf_id(LIDAR_TX, LIDAR_RX)); 00028 BufferedSerial lidar(RF_ID_TX, RF_ID_RX); 00029 InterruptIn mybutton(USER_BUTTON); 00030 DigitalOut myled(LED1); 00031 BusOut display_H(A_HOUR, B_HOUR, C_HOUR, D_HOUR, E_HOUR, F_HOUR, G_HOUR); 00032 BusOut display_dM(A_DECE, B_DECE, C_DECE, D_DECE, E_DECE, F_DECE, G_DECE); 00033 BusOut display_uM(A_MINU, B_MINU, C_MINU, D_MINU, E_MINU, F_MINU, G_MINU); 00034 DigitalOut display_DP(DP_HOUR); 00035 BusOut torreLuz(SEMAFORO_V, SEMAFORO_A, SEMAFORO_R); 00036 static IWDG_HandleTypeDef my_iwdg; // HAL BASED 00037 00038 00039 /** BANDERAS/FLUJO DE CÓDIGO ***************************************** */ 00040 bool queryLIDAR = false; 00041 bool tx_heartbeatSKT = false; 00042 bool add_a_minute = false; 00043 bool do_test = false; 00044 00045 /** VARIABLES ***************************************** */ 00046 float tiempo_actual = 0.0; // Para almacenar el valor del temporizador 00047 bool lidar_respuesta = false; // Para determinar si el LiDAR respondió al External Trigar 00048 bool lidar_valido = false; // Para determinar si la respuesta LiDAR es valida 00049 bool mostrar_tiempo = false; // Para determinar si se encienden o apagan los Display de 7s 00050 char lidar_rx_frame[18]; // Para almacenar la trama de respuesta del LiDAR 00051 char skytrack_frame[128]; // Para almacenar la trama a enviar a Skytrack 00052 char buffer_antena_ID[256]; // Para almacenar el ID del cabezal ASCII-puro desde RFiD -19 00053 char actual_trailerID_HEX[15]; // Para almacenar el ID recibido del cabezal en formato HEX-ASCII -15 00054 char antena_trailerID_HEX[15]; // Para almacenar el ID del cabezal previo en formato HEX-ASCII 00055 int previo_semaforo = 0; 00056 int rfid_respuesta = 0; // Para almacenar los bytes recibidos de la antena RFiD 00057 int tiempo_luz_amarilla = 0; // Tiempo para encender la luz amarilla 00058 int tiempo_luz_roja = 0; // Tiempo para encender la luz roja 00059 int horas = 0; // Acumulador de horas 00060 int dminutos = 0; // Acumulador de decenas de minutos 00061 int uminutos = 0; // Acumulador de unidades de minutos 00062 int rtc_delta = 0; // Para hacer la comparación con los tiempos, y calcular el tiempo total en Bahia 00063 int bahia_vacia = 0; // Contador para determinar cuando una bahía está vacía, según RFiD 00064 int lidar_vacio = 0; // Contador para determinar cuando una bahía está vacía, según LiDAR 00065 int lidar_contador_no_ack = 0; // Contador para determinar cuantas veces no ha respondido el LiDAR 00066 int contador_diferentes = 0; // Para contar la cantidad de TAGiD Diferentes 00067 int comparacion = 0; // Para comparar cadenas cuando es diferente el RFiD 00068 int contador_tramas = 0; // Contador de tramas enviadas al CP 00069 int distancia = 0; // Almacenar lectura de distancia por LiDAR 00070 int w = 0; // Registro de trabajo de multiples usos 00071 00072 00073 00074 00075 00076 /** TICKER DE MBED ***************************************** */ 00077 Timer t_apagado; 00078 Timer t_ocupado; 00079 Ticker ticker_funcionando; // Ticker para hacer titilar un led 00080 Ticker ticker_heartbeat; // Ticker para transmitir a Skytrack 00081 Ticker ticker_minuto; // Ticker para contar un minuto 00082 Ticker ticker_query_LiDAR; // Ticker para Consultar LiDAR 00083 00084 00085 /** FUNCIONES GENERALES ***************************************** */ 00086 void funcionando() { 00087 myled = !myled; 00088 } 00089 00090 void hearbeat_SKT() { 00091 tx_heartbeatSKT = true; 00092 00093 } 00094 00095 void minute_passed() { 00096 add_a_minute = true; 00097 } 00098 00099 void pressed() { 00100 do_test = true; 00101 } 00102 00103 void do_querryLIDAR(){ 00104 queryLIDAR = true; 00105 } 00106 00107 00108 int main () 00109 { 00110 pcusb.baud(115200); // Configuracion de Baudrate para la interfaz serial para USB 00111 gv300.baud(115200); // Configuración de Baudrate para el cp gv300 00112 rf_id.baud(115200); // Configuración de Baudrate para el lector RFiD 00113 lidar.baud(115200); // Configuración de Baudrate para el LiDAR 00114 00115 torreLuz.write(COLOR_TORRE_LUZ[APAGADO_TL]); // Apagar Torre de Luz 00116 display_uM.write(DIGITOS[APAGADO_7S]); // Apagar display de unidades de minuto 00117 display_dM.write(DIGITOS[APAGADO_7S]); // Apagar display de decenas de minuto 00118 display_H.write(DIGITOS[APAGADO_7S]); // Apagar display de horas 00119 00120 memset(antena_trailerID_HEX, '\0', sizeof antena_trailerID_HEX); 00121 memset(actual_trailerID_HEX, '\0', sizeof actual_trailerID_HEX); 00122 memset(buffer_antena_ID, '\0', sizeof buffer_antena_ID); 00123 00124 mybutton.fall(&pressed); 00125 ticker_funcionando.attach(&funcionando, 2.0); 00126 ticker_heartbeat.attach(&tx_skytrack, TIME_HEARTBEAT); 00127 ticker_query_LiDAR.attach(&do_querryLIDAR, 2.0); 00128 00129 booting_gtdat (&pcusb, &gv300); // Enviar notificación de inicio 00130 lidar.write(TFMINIPLUS_UPDATE_RATE,6); 00131 flush_uart_rx(&lidar); 00132 00133 /** 00134 * @brief INICIAR WATCHDOG 00135 * Se crea una instancia para el Watchdog, se define el pre-escaler 00136 * y el valor máximo en caso que no se actualice se genera el reinicio. 00137 */ 00138 my_iwdg.Instance = IWDG; 00139 my_iwdg.Init.Prescaler = IWDG_PRESCALER_256; 00140 my_iwdg.Init.Reload = 0x0FFF; 00141 my_iwdg.Init.Window = IWDG_WINDOW_DISABLE; 00142 HAL_IWDG_Init(&my_iwdg); 00143 booting_gtdat (&pcusb, &gv300); 00144 00145 while (true) { 00146 if (do_test) { 00147 do_test = false; 00148 HAL_IWDG_Refresh(&my_iwdg); 00149 test_display7s(); 00150 HAL_IWDG_Refresh(&my_iwdg); 00151 } 00152 00153 if (add_a_minute) { 00154 add_a_minute = false; 00155 actualizar_minuto(); 00156 } 00157 00158 if (tx_heartbeatSKT) { 00159 tx_heartbeatSKT = false; 00160 memset(skytrack_frame, '\0', sizeof(skytrack_frame)); 00161 00162 } 00163 00164 if (queryLIDAR) { 00165 queryLIDAR = false; 00166 exe_LIDAR(); 00167 } 00168 00169 exe_RFiD(); 00170 memset(skytrack_frame, '\0', sizeof(skytrack_frame)); 00171 memset(antena_trailerID_HEX, '\0', sizeof(antena_trailerID_HEX)); 00172 00173 //! Actualizar Watchdog 00174 HAL_IWDG_Refresh(&my_iwdg); 00175 } 00176 }
Generated on Wed Jul 13 2022 06:43:22 by 1.7.2