Cambio de pin de entrada digital a PA10
Dependencies: BufferedSerial PinDetect mbed
Fork of DTK-MEGAPACA_NUCLEO by
main.cpp
- Committer:
- fmanzano_dtk
- Date:
- 2018-01-19
- Revision:
- 7:0ec9cc5b9fe0
- Parent:
- 6:e0f528571367
- Child:
- 8:f71b44b139f6
File content as of revision 7:0ec9cc5b9fe0:
/* * - Proyecto: Apagado Temporizado MEGAPACA * - Lenguaje: ANSI C/C++ (mbed) * - Tarjeta: NUCLEO F303K8 * - Referencias: * - Fecha: 2017/Septiembre * - Autor(es): Felícito Manzano / Mario Vargas * - Compañia: V.S.R. de Centroamérica * - País: SV / CR */ #include "mbed.h" #include "BufferedSerial.h" #include "constantes.hpp" #include "funciones_basicas.h" /* CONFIGURACIÓN DE HARDWARE ************************************** */ BufferedSerial gv300(PA_9, PA_10); Serial pcusb(USBTX, USBRX); InterruptIn input(PB_5); DigitalOut myled(PB_3); // DECLARACIÓN DE VARIABLES //************************************** float tiempo_actual = 0.0; // Para almacenar el valor del temporizador int contador_tramas = 2; // Para contar las tramas enviadas a SKT300 int factor = 1; // Para multiplicar int i = 0; // Uso genérico int apagar = 0; char skytrack_frame[128]; // Salida de datos para SKT300 char buffered_frame[128]; // Salida temporal de datos // DECLARACIÓN DE TEMPORIZADORES //************************************** Timer funcionando; // Temporizador para generar el motivo por tiempo de lectura de la tarjeta NUCLEO Timer apagando_cp; // Temporizador para consultar el estatus de la puerta. void pressed_f() { apagar = 1; } int main() { // CONFIGURAR INTERFACES //*********************************** gv300.baud(115200); pcusb.baud(115200); input.fall(&pressed_f); wait(1.0); booting_gtdat(&gv300, &pcusb); // Inicio de temporizadores y RTC funcionando.start(); while(1) { myled = !myled; wait(0.5); // CONSULTAR SI SE HA PRESIONADO EL BOTÓN if (apagar) { pcusb.printf("\r\nBoton de panico presionado.\r\n"); pcusb.printf("Apagando en T-15\r\n"); apagar = 0; apagando_cp.start(); sprintf(skytrack_frame, "%s%s%04X%s\r\n", ALIVE, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER); gv300.printf("%s\r\n", skytrack_frame); pcusb.printf("Iniciando temporizador 15 min.\r\n"); memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame incrementar_trama(&contador_tramas); } // VALIDAR SI SE DEBE ABORTAR // Leer puerto Serial i = leer_uart(&gv300, buffered_frame); if (i) { pcusb.printf("Trama recibida...\r\n"); i = procesar_trama(buffered_frame); if(i == 1) { // 1 = ABORTAR apagando_cp.stop(); apagando_cp.reset(); factor = 1; gv300.printf("%s\r\n", CANC_SHUTDOWN); pcusb.printf("Apagado por panico ABORTADO.\r\n"); } else if (i == 3){ // Nada por hacer por el OK } else { pcusb.printf("Trama DESCONOCIDA.\r\n"); } } // CONSULTAR SI SE DEBE APAGAR tiempo_actual = apagando_cp.read(); // Leer el temporizador de Heartbeat if (tiempo_actual >= (MINUTO * factor)) { pcusb.printf("Apagando en T-%d\r\n", (T_15 - factor)); factor++; } if (tiempo_actual >= TIME_SHUTDOWN) { pcusb.printf("Apangado en progreso...\r\n"); apagando_cp.stop(); apagando_cp.reset(); factor = 1; gv300.printf("%s\r\n", SHUTDOWN_TXT); wait_ms(T_TX); // Leer puerto Serial i = leer_uart(&gv300, buffered_frame); if (i) { // Confirmar resultado de Apagado i = procesar_trama(buffered_frame); if (i == 2) { // +ACK gv300.printf("%s\r\n", SHUTDOWN_DONE); pcusb.printf("Apagado remoto +EXITOSO!\r\n"); } else { gv300.printf("%s\r\n", SHUTDOWN_ERRO); pcusb.printf("Apagado remoto -FALLIDO!\r\n"); } } else { gv300.printf("%s\r\n", SHUTDOWN_ERRO); pcusb.printf("Apagado remoto -FALLIDO!\r\n"); } } // ENVIAR HEARTBEAT A SKYTRACK tiempo_actual = funcionando.read(); // Leer el temporizador de Heartbeat if (tiempo_actual >= TIME_HEARTBEAT) { pcusb.printf("\r\nMultipuertos estable.\r\n"); funcionando.reset(); sprintf(skytrack_frame, "%s%s%04X%s\r\n", ALIVE, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER); gv300.printf("%s\r\n", skytrack_frame); memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame incrementar_trama(&contador_tramas); } } }