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 Mar 23 02:09:31 2018 -0600
Revision:
13:e3a1657843c0
Parent:
12:35db44c28845
Child:
14:249826741896
Actualizacion a funcion PIN DETECT para conteo de pulsos

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 13:e3a1657843c0 17 #include "PinDetect.h"
fmanzano_dtk 13:e3a1657843c0 18
fmanzano_dtk 13:e3a1657843c0 19 #define APAGAR_PULSOS 2
fmanzano_dtk 6:e0f528571367 20
fmanzano_dtk 6:e0f528571367 21 /* CONFIGURACIÓN DE HARDWARE
fmanzano_dtk 6:e0f528571367 22 ************************************** */
fmanzano_dtk 9:04f9da6bc784 23 BufferedSerial gv300(USBTX, USBRX);
fmanzano_dtk 13:e3a1657843c0 24 PinDetect input(PA_9); //PC_13
fmanzano_dtk 13:e3a1657843c0 25 DigitalOut myled(LED1);
fmanzano_dtk 6:e0f528571367 26
fmanzano_dtk 6:e0f528571367 27 // DECLARACIÓN DE VARIABLES
fmanzano_dtk 6:e0f528571367 28 //**************************************
fmanzano_dtk 6:e0f528571367 29 float tiempo_actual = 0.0; // Para almacenar el valor del temporizador
fmanzano_dtk 6:e0f528571367 30 int contador_tramas = 2; // Para contar las tramas enviadas a SKT300
fmanzano_dtk 6:e0f528571367 31 int factor = 1; // Para multiplicar
fmanzano_dtk 6:e0f528571367 32 int i = 0; // Uso genérico
fmanzano_dtk 12:35db44c28845 33 int contador_pulsos = 0;
fmanzano_dtk 12:35db44c28845 34 bool apagar = false;
fmanzano_dtk 6:e0f528571367 35 char skytrack_frame[128]; // Salida de datos para SKT300
fmanzano_dtk 6:e0f528571367 36 char buffered_frame[128]; // Salida temporal de datos
fmanzano_dtk 6:e0f528571367 37
fmanzano_dtk 11:780b02b6a035 38
fmanzano_dtk 6:e0f528571367 39 // DECLARACIÓN DE TEMPORIZADORES
fmanzano_dtk 6:e0f528571367 40 //**************************************
fmanzano_dtk 13:e3a1657843c0 41 Timer funcionando; // Temporizador para generar el motivo por tiempo de lectura de la tarjeta NUCLEO
fmanzano_dtk 6:e0f528571367 42 Timer apagando_cp; // Temporizador para consultar el estatus de la puerta.
fmanzano_dtk 13:e3a1657843c0 43 Ticker ticker_titilar; // Ticker para hacer blick de LED1
fmanzano_dtk 6:e0f528571367 44
fmanzano_dtk 13:e3a1657843c0 45 // Funciones de Ticker
fmanzano_dtk 13:e3a1657843c0 46 void titilar_led() {
fmanzano_dtk 13:e3a1657843c0 47 myled = !myled;
fmanzano_dtk 13:e3a1657843c0 48 }
fmanzano_dtk 6:e0f528571367 49
fmanzano_dtk 13:e3a1657843c0 50 // Funciones de Interrupción
fmanzano_dtk 13:e3a1657843c0 51 void flanco_negativo_SKT300N() {
fmanzano_dtk 12:35db44c28845 52 contador_pulsos++;
fmanzano_dtk 6:e0f528571367 53 }
fmanzano_dtk 6:e0f528571367 54
hudakz 0:d81be2ce0c05 55 int main() {
fmanzano_dtk 6:e0f528571367 56 // CONFIGURAR INTERFACES
fmanzano_dtk 6:e0f528571367 57 //***********************************
fmanzano_dtk 6:e0f528571367 58 gv300.baud(115200);
fmanzano_dtk 9:04f9da6bc784 59 //pcusb.baud(115200);
fmanzano_dtk 9:04f9da6bc784 60 input.mode(PullUp);
fmanzano_dtk 13:e3a1657843c0 61 input.attach_asserted(&flanco_negativo_SKT300N);
fmanzano_dtk 13:e3a1657843c0 62 input.setSampleFrequency(50000);
fmanzano_dtk 6:e0f528571367 63 wait(1.0);
fmanzano_dtk 9:04f9da6bc784 64 iniciando(&gv300);
hudakz 3:98990a014463 65
fmanzano_dtk 6:e0f528571367 66 // Inicio de temporizadores y RTC
fmanzano_dtk 6:e0f528571367 67 funcionando.start();
fmanzano_dtk 13:e3a1657843c0 68 //ticker_titilar.attach(&titilar_led, 1.0);
hudakz 3:98990a014463 69
hudakz 0:d81be2ce0c05 70 while(1) {
fmanzano_dtk 12:35db44c28845 71 //myled = !myled;
fmanzano_dtk 12:35db44c28845 72 //wait(0.5);
fmanzano_dtk 6:e0f528571367 73
fmanzano_dtk 11:780b02b6a035 74 // Validar puslsos.
fmanzano_dtk 12:35db44c28845 75 if (contador_pulsos >= 1) {
fmanzano_dtk 12:35db44c28845 76 myled = 1;
fmanzano_dtk 12:35db44c28845 77 wait(5.0);
fmanzano_dtk 12:35db44c28845 78 if (contador_pulsos == PULSOS_APAGAR) {
fmanzano_dtk 12:35db44c28845 79 apagar = true;
fmanzano_dtk 11:780b02b6a035 80 } else {
fmanzano_dtk 12:35db44c28845 81 apagar = false;
fmanzano_dtk 11:780b02b6a035 82 }
fmanzano_dtk 12:35db44c28845 83 contador_pulsos = 0;
fmanzano_dtk 12:35db44c28845 84 myled = 0;
fmanzano_dtk 11:780b02b6a035 85 }
fmanzano_dtk 11:780b02b6a035 86
fmanzano_dtk 11:780b02b6a035 87
fmanzano_dtk 6:e0f528571367 88 // CONSULTAR SI SE HA PRESIONADO EL BOTÓN
fmanzano_dtk 12:35db44c28845 89 if ((apagar) && (apagando_cp.read() < 0.5)) {
fmanzano_dtk 9:04f9da6bc784 90 //pcusb.printf("\r\nBoton de panico presionado.\r\n");
fmanzano_dtk 9:04f9da6bc784 91 //pcusb.printf("Apagando en T-15\r\n");
fmanzano_dtk 12:35db44c28845 92 apagar = false;
fmanzano_dtk 6:e0f528571367 93 apagando_cp.start();
fmanzano_dtk 8:f71b44b139f6 94 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 95 CABECERA_TX, CODIGO_INT, INIT_SHUTDOWN,
fmanzano_dtk 8:f71b44b139f6 96 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 6:e0f528571367 97 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 6:e0f528571367 98 memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame
fmanzano_dtk 6:e0f528571367 99 incrementar_trama(&contador_tramas);
fmanzano_dtk 6:e0f528571367 100
fmanzano_dtk 6:e0f528571367 101 }
fmanzano_dtk 6:e0f528571367 102
fmanzano_dtk 6:e0f528571367 103 // VALIDAR SI SE DEBE ABORTAR
fmanzano_dtk 6:e0f528571367 104 // Leer puerto Serial
fmanzano_dtk 9:04f9da6bc784 105 if (leer_uart(&gv300, buffered_frame)) {
fmanzano_dtk 9:04f9da6bc784 106 //pcusb.printf("Trama recibida...\r\n");
fmanzano_dtk 6:e0f528571367 107 i = procesar_trama(buffered_frame);
fmanzano_dtk 6:e0f528571367 108 if(i == 1) { // 1 = ABORTAR
fmanzano_dtk 8:f71b44b139f6 109 apagar = 0;
fmanzano_dtk 8:f71b44b139f6 110 factor = 1;
fmanzano_dtk 6:e0f528571367 111 apagando_cp.stop();
fmanzano_dtk 6:e0f528571367 112 apagando_cp.reset();
fmanzano_dtk 8:f71b44b139f6 113 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 114 CABECERA_TX, CODIGO_INT, CANC_SHUTDOWN,
fmanzano_dtk 8:f71b44b139f6 115 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 8:f71b44b139f6 116 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 9:04f9da6bc784 117 //pcusb.printf("Apagado por panico ABORTADO.\r\n");
fmanzano_dtk 7:0ec9cc5b9fe0 118 } else if (i == 3){
fmanzano_dtk 7:0ec9cc5b9fe0 119 // Nada por hacer por el OK
fmanzano_dtk 6:e0f528571367 120 } else {
fmanzano_dtk 9:04f9da6bc784 121 // pcusb.printf("Trama DESCONOCIDA.\r\n");
fmanzano_dtk 6:e0f528571367 122 }
fmanzano_dtk 6:e0f528571367 123 }
fmanzano_dtk 6:e0f528571367 124
fmanzano_dtk 6:e0f528571367 125 // CONSULTAR SI SE DEBE APAGAR
fmanzano_dtk 6:e0f528571367 126 tiempo_actual = apagando_cp.read(); // Leer el temporizador de Heartbeat
fmanzano_dtk 6:e0f528571367 127 if (tiempo_actual >= (MINUTO * factor)) {
fmanzano_dtk 9:04f9da6bc784 128 //pcusb.printf("Apagando en T-%d\r\n", (T_15 - factor));
fmanzano_dtk 6:e0f528571367 129 factor++;
fmanzano_dtk 6:e0f528571367 130 }
fmanzano_dtk 6:e0f528571367 131
fmanzano_dtk 6:e0f528571367 132 if (tiempo_actual >= TIME_SHUTDOWN) {
fmanzano_dtk 9:04f9da6bc784 133 //pcusb.printf("Apangado en progreso...\r\n");
fmanzano_dtk 6:e0f528571367 134 apagando_cp.stop();
fmanzano_dtk 6:e0f528571367 135 apagando_cp.reset();
fmanzano_dtk 8:f71b44b139f6 136 apagar = 0;
fmanzano_dtk 6:e0f528571367 137 factor = 1;
fmanzano_dtk 6:e0f528571367 138 gv300.printf("%s\r\n", SHUTDOWN_TXT);
fmanzano_dtk 6:e0f528571367 139 wait_ms(T_TX);
fmanzano_dtk 6:e0f528571367 140 // Leer puerto Serial
fmanzano_dtk 6:e0f528571367 141 i = leer_uart(&gv300, buffered_frame);
fmanzano_dtk 6:e0f528571367 142 if (i) {
fmanzano_dtk 6:e0f528571367 143 // Confirmar resultado de Apagado
fmanzano_dtk 6:e0f528571367 144 i = procesar_trama(buffered_frame);
fmanzano_dtk 6:e0f528571367 145 if (i == 2) { // +ACK
fmanzano_dtk 8:f71b44b139f6 146 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 147 CABECERA_TX, CODIGO_INT, SHUTDOWN_DONE,
fmanzano_dtk 8:f71b44b139f6 148 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 8:f71b44b139f6 149 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 9:04f9da6bc784 150 //pcusb.printf("Apagado remoto +EXITOSO!\r\n");
fmanzano_dtk 6:e0f528571367 151 } else {
fmanzano_dtk 8:f71b44b139f6 152 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 8:f71b44b139f6 153 CABECERA_TX, CODIGO_INT, SHUTDOWN_ERRO,
fmanzano_dtk 8:f71b44b139f6 154 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 8:f71b44b139f6 155 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 9:04f9da6bc784 156 //pcusb.printf("Apagado remoto -FALLIDO!\r\n");
fmanzano_dtk 6:e0f528571367 157 }
fmanzano_dtk 6:e0f528571367 158 } else {
fmanzano_dtk 12:35db44c28845 159 sprintf(skytrack_frame,"%s%s%s%s%04X%s",
fmanzano_dtk 12:35db44c28845 160 CABECERA_TX, CODIGO_INT, SHUTDOWN_ERRO,
fmanzano_dtk 12:35db44c28845 161 FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 12:35db44c28845 162 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 9:04f9da6bc784 163 //pcusb.printf("Apagado remoto -FALLIDO!\r\n");
fmanzano_dtk 6:e0f528571367 164 }
fmanzano_dtk 6:e0f528571367 165 }
fmanzano_dtk 6:e0f528571367 166
fmanzano_dtk 6:e0f528571367 167 // ENVIAR HEARTBEAT A SKYTRACK
fmanzano_dtk 6:e0f528571367 168 tiempo_actual = funcionando.read(); // Leer el temporizador de Heartbeat
fmanzano_dtk 6:e0f528571367 169 if (tiempo_actual >= TIME_HEARTBEAT) {
fmanzano_dtk 9:04f9da6bc784 170 //pcusb.printf("\r\nMultipuertos estable.\r\n");
fmanzano_dtk 6:e0f528571367 171 funcionando.reset();
fmanzano_dtk 6:e0f528571367 172 sprintf(skytrack_frame, "%s%s%04X%s\r\n",
fmanzano_dtk 6:e0f528571367 173 ALIVE, FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
fmanzano_dtk 6:e0f528571367 174 gv300.printf("%s\r\n", skytrack_frame);
fmanzano_dtk 6:e0f528571367 175 memset(skytrack_frame, '\0', sizeof(skytrack_frame)); // Vaciar el buffer de Skytrack Frame
fmanzano_dtk 6:e0f528571367 176 incrementar_trama(&contador_tramas);
fmanzano_dtk 6:e0f528571367 177 }
hudakz 0:d81be2ce0c05 178 }
fmanzano_dtk 6:e0f528571367 179 }