Cambio de pin de entrada digital a PA10

Dependencies:   BufferedSerial PinDetect mbed

Fork of DTK-MEGAPACA_NUCLEO by Felícito Manzano

Committer:
fmanzano_dtk
Date:
Fri Jan 19 19:08:06 2018 +0000
Revision:
8:f71b44b139f6
Parent:
7:0ec9cc5b9fe0
Child:
9:04f9da6bc784
Correccion en mal formacion de mensajes hacia el SKT300 con AT+GTDAT

Who changed what in which revision?

UserRevisionLine numberNew 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 8:f71b44b139f6 68 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 69 CABECERA_TX, CODIGO_INT, INIT_SHUTDOWN,
fmanzano_dtk 8:f71b44b139f6 70 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 6:e0f528571367 71 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 6:e0f528571367 72 pcusb.printf("Iniciando temporizador 15 min.\r\n");
fmanzano_dtk 6:e0f528571367 73 memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame
fmanzano_dtk 6:e0f528571367 74 incrementar_trama(&contador_tramas);
fmanzano_dtk 6:e0f528571367 75
fmanzano_dtk 6:e0f528571367 76 }
fmanzano_dtk 6:e0f528571367 77
fmanzano_dtk 6:e0f528571367 78 // VALIDAR SI SE DEBE ABORTAR
fmanzano_dtk 6:e0f528571367 79 // Leer puerto Serial
fmanzano_dtk 6:e0f528571367 80 i = leer_uart(&gv300, buffered_frame);
fmanzano_dtk 6:e0f528571367 81 if (i) {
fmanzano_dtk 6:e0f528571367 82 pcusb.printf("Trama recibida...\r\n");
fmanzano_dtk 6:e0f528571367 83 i = procesar_trama(buffered_frame);
fmanzano_dtk 6:e0f528571367 84 if(i == 1) { // 1 = ABORTAR
fmanzano_dtk 8:f71b44b139f6 85 apagar = 0;
fmanzano_dtk 8:f71b44b139f6 86 factor = 1;
fmanzano_dtk 6:e0f528571367 87 apagando_cp.stop();
fmanzano_dtk 6:e0f528571367 88 apagando_cp.reset();
fmanzano_dtk 8:f71b44b139f6 89 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 90 CABECERA_TX, CODIGO_INT, CANC_SHUTDOWN,
fmanzano_dtk 8:f71b44b139f6 91 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 8:f71b44b139f6 92 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 6:e0f528571367 93 pcusb.printf("Apagado por panico ABORTADO.\r\n");
fmanzano_dtk 7:0ec9cc5b9fe0 94 } else if (i == 3){
fmanzano_dtk 7:0ec9cc5b9fe0 95 // Nada por hacer por el OK
fmanzano_dtk 6:e0f528571367 96 } else {
fmanzano_dtk 6:e0f528571367 97 pcusb.printf("Trama DESCONOCIDA.\r\n");
fmanzano_dtk 6:e0f528571367 98 }
fmanzano_dtk 6:e0f528571367 99 }
fmanzano_dtk 6:e0f528571367 100
fmanzano_dtk 6:e0f528571367 101 // CONSULTAR SI SE DEBE APAGAR
fmanzano_dtk 6:e0f528571367 102 tiempo_actual = apagando_cp.read(); // Leer el temporizador de Heartbeat
fmanzano_dtk 6:e0f528571367 103 if (tiempo_actual >= (MINUTO * factor)) {
fmanzano_dtk 6:e0f528571367 104 pcusb.printf("Apagando en T-%d\r\n", (T_15 - factor));
fmanzano_dtk 6:e0f528571367 105 factor++;
fmanzano_dtk 6:e0f528571367 106 }
fmanzano_dtk 6:e0f528571367 107
fmanzano_dtk 6:e0f528571367 108 if (tiempo_actual >= TIME_SHUTDOWN) {
fmanzano_dtk 6:e0f528571367 109 pcusb.printf("Apangado en progreso...\r\n");
fmanzano_dtk 6:e0f528571367 110 apagando_cp.stop();
fmanzano_dtk 6:e0f528571367 111 apagando_cp.reset();
fmanzano_dtk 8:f71b44b139f6 112 apagar = 0;
fmanzano_dtk 6:e0f528571367 113 factor = 1;
fmanzano_dtk 6:e0f528571367 114 gv300.printf("%s\r\n", SHUTDOWN_TXT);
fmanzano_dtk 6:e0f528571367 115 wait_ms(T_TX);
fmanzano_dtk 6:e0f528571367 116 // Leer puerto Serial
fmanzano_dtk 6:e0f528571367 117 i = leer_uart(&gv300, buffered_frame);
fmanzano_dtk 6:e0f528571367 118 if (i) {
fmanzano_dtk 6:e0f528571367 119 // Confirmar resultado de Apagado
fmanzano_dtk 6:e0f528571367 120 i = procesar_trama(buffered_frame);
fmanzano_dtk 6:e0f528571367 121 if (i == 2) { // +ACK
fmanzano_dtk 8:f71b44b139f6 122 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 123 CABECERA_TX, CODIGO_INT, SHUTDOWN_DONE,
fmanzano_dtk 8:f71b44b139f6 124 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 8:f71b44b139f6 125 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 6:e0f528571367 126 pcusb.printf("Apagado remoto +EXITOSO!\r\n");
fmanzano_dtk 6:e0f528571367 127 } else {
fmanzano_dtk 8:f71b44b139f6 128 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 129 CABECERA_TX, CODIGO_INT, SHUTDOWN_ERRO,
fmanzano_dtk 8:f71b44b139f6 130 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 8:f71b44b139f6 131 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 6:e0f528571367 132 pcusb.printf("Apagado remoto -FALLIDO!\r\n");
fmanzano_dtk 6:e0f528571367 133 }
fmanzano_dtk 6:e0f528571367 134 } else {
fmanzano_dtk 6:e0f528571367 135 gv300.printf("%s\r\n", SHUTDOWN_ERRO);
fmanzano_dtk 6:e0f528571367 136 pcusb.printf("Apagado remoto -FALLIDO!\r\n");
fmanzano_dtk 6:e0f528571367 137 }
fmanzano_dtk 6:e0f528571367 138 }
fmanzano_dtk 6:e0f528571367 139
fmanzano_dtk 6:e0f528571367 140 // ENVIAR HEARTBEAT A SKYTRACK
fmanzano_dtk 6:e0f528571367 141 tiempo_actual = funcionando.read(); // Leer el temporizador de Heartbeat
fmanzano_dtk 6:e0f528571367 142 if (tiempo_actual >= TIME_HEARTBEAT) {
fmanzano_dtk 6:e0f528571367 143 pcusb.printf("\r\nMultipuertos estable.\r\n");
fmanzano_dtk 6:e0f528571367 144 funcionando.reset();
fmanzano_dtk 6:e0f528571367 145 sprintf(skytrack_frame, "%s%s%04X%s\r\n",
fmanzano_dtk 6:e0f528571367 146 ALIVE, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 6:e0f528571367 147 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 6:e0f528571367 148 memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame
fmanzano_dtk 6:e0f528571367 149 incrementar_trama(&contador_tramas);
fmanzano_dtk 6:e0f528571367 150 }
hudakz 0:d81be2ce0c05 151 }
fmanzano_dtk 6:e0f528571367 152 }