Felícito Manzano
/
CCN_Control_Bahia_TFMiniPlus
Actualizacion General del codigo para CCN con el objetivo de proveer mantenimiento estable.
main.cpp@8:3fc41e5029f7, 2021-05-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |