Programa del TRABAJO PRACTICO PTC -- Mayo 2020

Dependencies:   mbed tsi_sensor MMA8451Q

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;