
Programa del TRABAJO PRACTICO PTC -- Mayo 2020
Dependencies: mbed tsi_sensor MMA8451Q
Diff: main.cpp
- Revision:
- 1:268507041816
- Parent:
- 0:da3f5e3d5442
- Child:
- 2:e970a9093797
--- a/main.cpp Tue May 12 18:46:22 2020 +0000 +++ b/main.cpp Tue Jun 23 08:14:19 2020 +0000 @@ -7,13 +7,18 @@ #define ELEC1 10 #define NO_ACTIVO 0 #define ACTIVO 1 -#define CUENTA_ACTIVO 200 -#define PERIODO_ACTIVO 1700 +#define TIEMPO_ACTIVO1 100 +#define TIEMPO_ACTIVO2 1700 #define PERIODO_INACTIVO 500 #define ANTIRREBOTE 40 #define EJES 250 -#define INICIO '$' -#define FIN '%' +#define INICIO '@' +#define FIN '#' +#define ENVIAR_EJE_X '1' +#define ENVIAR_EJE_Y '2' +#define ENVIAR_EJE_Z '3' +#define ENVIAR_ENTRADA_ANALOGICA '4' +#define ENVIAR_ENTRADA_DIGITAL '5' void Timer_Interrupt(); void UART_Interrupt(); @@ -27,12 +32,12 @@ bool Activo = 0; char Caracter = 0; bool Nuevo_Char = 0; -char Accion[2], Dato_a_Enviar[3]; +char Accion, Dato_a_Enviar[3]; Ticker ticker; //Inicializo un Timer DigitalIn InputRef(PTB9); -DigitalOut PWM(PTB1); +DigitalOut LED_EXTERNO(PTB1); DigitalOut ROJO(LED_RED); DigitalOut AZUL(LED_BLUE); DigitalOut VERDE(LED_GREEN); @@ -50,12 +55,20 @@ double Tactil = 0; bool Toque = 1, Rx_OK = 0, Leer_Ejes = 0; double EjeX = 0, EjeY = 0, EjeZ = 0; - char Signo = 0, Verif = 0; + char Signo = 0, Verif = 0, Etapa_Activo = 1; ROJO = 1; VERDE = 1; AZUL = 1; while(1) { Tactil = tsi.readPercentage(); + if(1 >= 3.3*Analog_Voltage){ + ROJO = 0; VERDE = 1; AZUL = 1; + }else if(2 < 3.3 * Analog_Voltage){ + ROJO = 1; VERDE = 1; AZUL = 0; + }else{ + ROJO = 1; VERDE = 0; AZUL = 1; + } + if(Cont_Ejes >= EJES){ Leer_Ejes = 1; Cont_Ejes = 0; @@ -80,13 +93,39 @@ } if(Activo){ - if(Cont_Blink < CUENTA_ACTIVO) PWM = 1; - else PWM = 0; - - if(Cont_Blink >= PERIODO_ACTIVO) Cont_Blink = 0; + switch(Etapa_Activo){ + case 1: + LED_EXTERNO = 1; + if(Cont_Blink >= TIEMPO_ACTIVO1){ + Etapa_Activo = 2; + Cont_Blink = 0; + } + break; + case 2: + LED_EXTERNO = 0; + if(Cont_Blink >= TIEMPO_ACTIVO1){ + Etapa_Activo = 3; + Cont_Blink = 0; + } + break; + case 3: + LED_EXTERNO = 1; + if(Cont_Blink >= TIEMPO_ACTIVO1){ + Etapa_Activo = 4; + Cont_Blink = 0; + } + break; + case 4: + LED_EXTERNO = 0; + if(Cont_Blink >= TIEMPO_ACTIVO2){ + Etapa_Activo = 1; + Cont_Blink = 0; + } + break; + } }else{ - if(Cont_Blink < PERIODO_INACTIVO/2) PWM = 1; - else PWM = 0; + if(Cont_Blink < PERIODO_INACTIVO/2) LED_EXTERNO = 1; + else LED_EXTERNO = 0; if(Cont_Blink >= PERIODO_INACTIVO) Cont_Blink = 0; } @@ -98,7 +137,7 @@ if(Rx_OK){ - if(Accion[0] == 'A' && Accion[1] == 'X'){ + if(Accion == ENVIAR_EJE_X){ if(EjeX < 0){ EjeX = EjeX * -1; Signo = '-'; @@ -107,7 +146,7 @@ Verif = '$' ^ 'A'^ 'X' ^ Signo ^ Dato_a_Enviar[2] ^ Dato_a_Enviar[1] ^ Dato_a_Enviar[0]; printf("$AX%c%c%c%c%x%x%c\r\n",Signo, Dato_a_Enviar[2], Dato_a_Enviar[1], Dato_a_Enviar[0],(Verif & 0xF0) >> 4, Verif & 0x0F, '%'); } - if(Accion[0] == 'A' && Accion[1] == 'Y'){ + if(Accion == ENVIAR_EJE_Y){ if(EjeY < 0){ EjeY = EjeY * -1; Signo = '-'; @@ -116,7 +155,7 @@ Verif = '$' ^ 'A' ^ 'Y' ^ Signo ^ Dato_a_Enviar[2] ^ Dato_a_Enviar[1] ^ Dato_a_Enviar[0]; printf("$AY%c%c%c%c%x%x%c\r\n",Signo, Dato_a_Enviar[2], Dato_a_Enviar[1], Dato_a_Enviar[0],(Verif & 0xF0) >> 4, Verif & 0x0F, '%'); } - if(Accion[0] == 'A' && Accion[1] == 'Z'){ + if(Accion == ENVIAR_EJE_Z){ if(EjeZ < 0){ EjeZ = EjeZ * -1; Signo = '-'; @@ -125,12 +164,12 @@ Verif = '$' ^ 'A' ^ 'Z' ^ Signo ^ Dato_a_Enviar[2] ^ Dato_a_Enviar[1] ^ Dato_a_Enviar[0]; printf("$AZ%c%c%c%c%x%x%c\r\n",Signo, Dato_a_Enviar[2], Dato_a_Enviar[1], Dato_a_Enviar[0],(Verif & 0xF0) >> 4, Verif & 0x0F, '%'); } - if(Accion[0] == 'V' && Accion[1] == '1'){ + if(Accion == ENVIAR_ENTRADA_ANALOGICA){ Dato_Enviar(Analog_Voltage*3.3); Verif = '$' ^ 'V'^ '1' ^ Dato_a_Enviar[2] ^ Dato_a_Enviar[1] ^ Dato_a_Enviar[0]; printf("$V1%c%c%c%x%x%c\r\n", Dato_a_Enviar[2], Dato_a_Enviar[1], Dato_a_Enviar[0],(Verif & 0xF0) >> 4, Verif & 0x0F, '%'); } - if(Accion[0] == 'D' && Accion[1] == '1'){ + if(Accion == ENVIAR_ENTRADA_DIGITAL){ Verif = '$' ^ 'D'^ '1' ^ (InputRef + 48); printf("$D1%c%x%x%c\r\n", InputRef + 48,(Verif & 0xF0) >> 4, Verif & 0x0F, '%'); } @@ -160,17 +199,12 @@ Estado = 1; break; case(1): - Accion[0] = Dato; + Accion = Dato; Estado = 2; break; case(2): - Accion[1] = Dato; - Estado = 3; - break; - case(3): if(Dato != FIN){ - Accion[0] = 0; - Accion[1] = 0; + Accion = 0; }else Ok = 1; Estado = 0;