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

Dependencies:   BufferedSerial

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }