Cambio de pin de entrada digital a PA10
Dependencies: BufferedSerial PinDetect mbed
Fork of DTK-MEGAPACA_NUCLEO by
main.cpp@7:0ec9cc5b9fe0, 2018-01-19 (annotated)
- Committer:
- fmanzano_dtk
- Date:
- Fri Jan 19 18:43:47 2018 +0000
- Revision:
- 7:0ec9cc5b9fe0
- Parent:
- 6:e0f528571367
- Child:
- 8:f71b44b139f6
Se agrega filtrado de OK enviados constantemente por el GV300. Se elimina libreria para maple mini que no es necesaria en el nucleo. Se cambio pin de MYLED
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fmanzano_dtk | 6:e0f528571367 | 1 | /* |
fmanzano_dtk | 6:e0f528571367 | 2 | * - Proyecto: Apagado Temporizado MEGAPACA |
fmanzano_dtk | 6:e0f528571367 | 3 | * - Lenguaje: ANSI C/C++ (mbed) |
fmanzano_dtk | 6:e0f528571367 | 4 | * - Tarjeta: NUCLEO F303K8 |
fmanzano_dtk | 6:e0f528571367 | 5 | * - Referencias: |
fmanzano_dtk | 6:e0f528571367 | 6 | * - Fecha: 2017/Septiembre |
fmanzano_dtk | 6:e0f528571367 | 7 | * - Autor(es): Felícito Manzano / |
fmanzano_dtk | 6:e0f528571367 | 8 | Mario Vargas |
fmanzano_dtk | 6:e0f528571367 | 9 | * - Compañia: V.S.R. de Centroamérica |
fmanzano_dtk | 6:e0f528571367 | 10 | * - País: SV / CR |
fmanzano_dtk | 6:e0f528571367 | 11 | */ |
fmanzano_dtk | 6:e0f528571367 | 12 | |
hudakz | 0:d81be2ce0c05 | 13 | #include "mbed.h" |
fmanzano_dtk | 6:e0f528571367 | 14 | #include "BufferedSerial.h" |
fmanzano_dtk | 6:e0f528571367 | 15 | #include "constantes.hpp" |
fmanzano_dtk | 6:e0f528571367 | 16 | #include "funciones_basicas.h" |
fmanzano_dtk | 6:e0f528571367 | 17 | |
fmanzano_dtk | 6:e0f528571367 | 18 | /* CONFIGURACIÓN DE HARDWARE |
fmanzano_dtk | 6:e0f528571367 | 19 | ************************************** */ |
fmanzano_dtk | 6:e0f528571367 | 20 | BufferedSerial gv300(PA_9, PA_10); |
fmanzano_dtk | 6:e0f528571367 | 21 | Serial pcusb(USBTX, USBRX); |
fmanzano_dtk | 6:e0f528571367 | 22 | InterruptIn input(PB_5); |
fmanzano_dtk | 7:0ec9cc5b9fe0 | 23 | DigitalOut myled(PB_3); |
fmanzano_dtk | 6:e0f528571367 | 24 | |
fmanzano_dtk | 6:e0f528571367 | 25 | // DECLARACIÓN DE VARIABLES |
fmanzano_dtk | 6:e0f528571367 | 26 | //************************************** |
fmanzano_dtk | 6:e0f528571367 | 27 | float tiempo_actual = 0.0; // Para almacenar el valor del temporizador |
fmanzano_dtk | 6:e0f528571367 | 28 | int contador_tramas = 2; // Para contar las tramas enviadas a SKT300 |
fmanzano_dtk | 6:e0f528571367 | 29 | int factor = 1; // Para multiplicar |
fmanzano_dtk | 6:e0f528571367 | 30 | int i = 0; // Uso genérico |
fmanzano_dtk | 6:e0f528571367 | 31 | int apagar = 0; |
fmanzano_dtk | 6:e0f528571367 | 32 | char skytrack_frame[128]; // Salida de datos para SKT300 |
fmanzano_dtk | 6:e0f528571367 | 33 | char buffered_frame[128]; // Salida temporal de datos |
fmanzano_dtk | 6:e0f528571367 | 34 | |
fmanzano_dtk | 6:e0f528571367 | 35 | // DECLARACIÓN DE TEMPORIZADORES |
fmanzano_dtk | 6:e0f528571367 | 36 | //************************************** |
fmanzano_dtk | 6:e0f528571367 | 37 | Timer funcionando; // Temporizador para generar el motivo por tiempo de lectura de la tarjeta NUCLEO |
fmanzano_dtk | 6:e0f528571367 | 38 | Timer apagando_cp; // Temporizador para consultar el estatus de la puerta. |
fmanzano_dtk | 6:e0f528571367 | 39 | |
fmanzano_dtk | 6:e0f528571367 | 40 | |
fmanzano_dtk | 6:e0f528571367 | 41 | void pressed_f() |
fmanzano_dtk | 6:e0f528571367 | 42 | { |
fmanzano_dtk | 6:e0f528571367 | 43 | apagar = 1; |
fmanzano_dtk | 6:e0f528571367 | 44 | } |
fmanzano_dtk | 6:e0f528571367 | 45 | |
hudakz | 0:d81be2ce0c05 | 46 | int main() { |
fmanzano_dtk | 6:e0f528571367 | 47 | // CONFIGURAR INTERFACES |
fmanzano_dtk | 6:e0f528571367 | 48 | //*********************************** |
fmanzano_dtk | 6:e0f528571367 | 49 | gv300.baud(115200); |
fmanzano_dtk | 6:e0f528571367 | 50 | pcusb.baud(115200); |
fmanzano_dtk | 6:e0f528571367 | 51 | input.fall(&pressed_f); |
fmanzano_dtk | 6:e0f528571367 | 52 | wait(1.0); |
fmanzano_dtk | 6:e0f528571367 | 53 | booting_gtdat(&gv300, &pcusb); |
hudakz | 3:98990a014463 | 54 | |
fmanzano_dtk | 6:e0f528571367 | 55 | // Inicio de temporizadores y RTC |
fmanzano_dtk | 6:e0f528571367 | 56 | funcionando.start(); |
hudakz | 3:98990a014463 | 57 | |
hudakz | 0:d81be2ce0c05 | 58 | while(1) { |
fmanzano_dtk | 6:e0f528571367 | 59 | myled = !myled; |
fmanzano_dtk | 6:e0f528571367 | 60 | wait(0.5); |
fmanzano_dtk | 6:e0f528571367 | 61 | |
fmanzano_dtk | 6:e0f528571367 | 62 | // CONSULTAR SI SE HA PRESIONADO EL BOTÓN |
fmanzano_dtk | 6:e0f528571367 | 63 | if (apagar) { |
fmanzano_dtk | 6:e0f528571367 | 64 | pcusb.printf("\r\nBoton de panico presionado.\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 65 | pcusb.printf("Apagando en T-15\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 66 | apagar = 0; |
fmanzano_dtk | 6:e0f528571367 | 67 | apagando_cp.start(); |
fmanzano_dtk | 6:e0f528571367 | 68 | sprintf(skytrack_frame, "%s%s%04X%s\r\n", |
fmanzano_dtk | 6:e0f528571367 | 69 | ALIVE, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER); |
fmanzano_dtk | 6:e0f528571367 | 70 | gv300.printf("%s\r\n", skytrack_frame); |
fmanzano_dtk | 6:e0f528571367 | 71 | pcusb.printf("Iniciando temporizador 15 min.\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 72 | memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame |
fmanzano_dtk | 6:e0f528571367 | 73 | incrementar_trama(&contador_tramas); |
fmanzano_dtk | 6:e0f528571367 | 74 | |
fmanzano_dtk | 6:e0f528571367 | 75 | } |
fmanzano_dtk | 6:e0f528571367 | 76 | |
fmanzano_dtk | 6:e0f528571367 | 77 | // VALIDAR SI SE DEBE ABORTAR |
fmanzano_dtk | 6:e0f528571367 | 78 | // Leer puerto Serial |
fmanzano_dtk | 6:e0f528571367 | 79 | i = leer_uart(&gv300, buffered_frame); |
fmanzano_dtk | 6:e0f528571367 | 80 | if (i) { |
fmanzano_dtk | 6:e0f528571367 | 81 | pcusb.printf("Trama recibida...\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 82 | i = procesar_trama(buffered_frame); |
fmanzano_dtk | 6:e0f528571367 | 83 | if(i == 1) { // 1 = ABORTAR |
fmanzano_dtk | 6:e0f528571367 | 84 | apagando_cp.stop(); |
fmanzano_dtk | 6:e0f528571367 | 85 | apagando_cp.reset(); |
fmanzano_dtk | 6:e0f528571367 | 86 | factor = 1; |
fmanzano_dtk | 6:e0f528571367 | 87 | gv300.printf("%s\r\n", CANC_SHUTDOWN); |
fmanzano_dtk | 6:e0f528571367 | 88 | pcusb.printf("Apagado por panico ABORTADO.\r\n"); |
fmanzano_dtk | 7:0ec9cc5b9fe0 | 89 | } else if (i == 3){ |
fmanzano_dtk | 7:0ec9cc5b9fe0 | 90 | // Nada por hacer por el OK |
fmanzano_dtk | 6:e0f528571367 | 91 | } else { |
fmanzano_dtk | 6:e0f528571367 | 92 | pcusb.printf("Trama DESCONOCIDA.\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 93 | } |
fmanzano_dtk | 6:e0f528571367 | 94 | } |
fmanzano_dtk | 6:e0f528571367 | 95 | |
fmanzano_dtk | 6:e0f528571367 | 96 | // CONSULTAR SI SE DEBE APAGAR |
fmanzano_dtk | 6:e0f528571367 | 97 | tiempo_actual = apagando_cp.read(); // Leer el temporizador de Heartbeat |
fmanzano_dtk | 6:e0f528571367 | 98 | if (tiempo_actual >= (MINUTO * factor)) { |
fmanzano_dtk | 6:e0f528571367 | 99 | pcusb.printf("Apagando en T-%d\r\n", (T_15 - factor)); |
fmanzano_dtk | 6:e0f528571367 | 100 | factor++; |
fmanzano_dtk | 6:e0f528571367 | 101 | } |
fmanzano_dtk | 6:e0f528571367 | 102 | |
fmanzano_dtk | 6:e0f528571367 | 103 | if (tiempo_actual >= TIME_SHUTDOWN) { |
fmanzano_dtk | 6:e0f528571367 | 104 | pcusb.printf("Apangado en progreso...\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 105 | apagando_cp.stop(); |
fmanzano_dtk | 6:e0f528571367 | 106 | apagando_cp.reset(); |
fmanzano_dtk | 6:e0f528571367 | 107 | factor = 1; |
fmanzano_dtk | 6:e0f528571367 | 108 | gv300.printf("%s\r\n", SHUTDOWN_TXT); |
fmanzano_dtk | 6:e0f528571367 | 109 | wait_ms(T_TX); |
fmanzano_dtk | 6:e0f528571367 | 110 | // Leer puerto Serial |
fmanzano_dtk | 6:e0f528571367 | 111 | i = leer_uart(&gv300, buffered_frame); |
fmanzano_dtk | 6:e0f528571367 | 112 | if (i) { |
fmanzano_dtk | 6:e0f528571367 | 113 | // Confirmar resultado de Apagado |
fmanzano_dtk | 6:e0f528571367 | 114 | i = procesar_trama(buffered_frame); |
fmanzano_dtk | 6:e0f528571367 | 115 | if (i == 2) { // +ACK |
fmanzano_dtk | 6:e0f528571367 | 116 | gv300.printf("%s\r\n", SHUTDOWN_DONE); |
fmanzano_dtk | 6:e0f528571367 | 117 | pcusb.printf("Apagado remoto +EXITOSO!\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 118 | } else { |
fmanzano_dtk | 6:e0f528571367 | 119 | gv300.printf("%s\r\n", SHUTDOWN_ERRO); |
fmanzano_dtk | 6:e0f528571367 | 120 | pcusb.printf("Apagado remoto -FALLIDO!\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 121 | } |
fmanzano_dtk | 6:e0f528571367 | 122 | } else { |
fmanzano_dtk | 6:e0f528571367 | 123 | gv300.printf("%s\r\n", SHUTDOWN_ERRO); |
fmanzano_dtk | 6:e0f528571367 | 124 | pcusb.printf("Apagado remoto -FALLIDO!\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 125 | } |
fmanzano_dtk | 6:e0f528571367 | 126 | } |
fmanzano_dtk | 6:e0f528571367 | 127 | |
fmanzano_dtk | 6:e0f528571367 | 128 | // ENVIAR HEARTBEAT A SKYTRACK |
fmanzano_dtk | 6:e0f528571367 | 129 | tiempo_actual = funcionando.read(); // Leer el temporizador de Heartbeat |
fmanzano_dtk | 6:e0f528571367 | 130 | if (tiempo_actual >= TIME_HEARTBEAT) { |
fmanzano_dtk | 6:e0f528571367 | 131 | pcusb.printf("\r\nMultipuertos estable.\r\n"); |
fmanzano_dtk | 6:e0f528571367 | 132 | funcionando.reset(); |
fmanzano_dtk | 6:e0f528571367 | 133 | sprintf(skytrack_frame, "%s%s%04X%s\r\n", |
fmanzano_dtk | 6:e0f528571367 | 134 | ALIVE, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER); |
fmanzano_dtk | 6:e0f528571367 | 135 | gv300.printf("%s\r\n", skytrack_frame); |
fmanzano_dtk | 6:e0f528571367 | 136 | memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame |
fmanzano_dtk | 6:e0f528571367 | 137 | incrementar_trama(&contador_tramas); |
fmanzano_dtk | 6:e0f528571367 | 138 | } |
hudakz | 0:d81be2ce0c05 | 139 | } |
fmanzano_dtk | 6:e0f528571367 | 140 | } |