Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@5:2530bd8d8f7d, 2021-05-24 (annotated)
- 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?
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 | 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 | } |