Proyecto completo del trabajo practico de Embebidos

Dependencies:   mbed tsi_sensor MMA8451Q

Revision:
0:7cc43619dcac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 21 08:22:05 2020 +0000
@@ -0,0 +1,332 @@
+#include "mbed.h"
+#include "MMA8451Q.h"
+#include "tsi_sensor.h"
+
+#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+#define ELEC0 9
+#define ELEC1 10
+#else
+#error TARGET NOT DEFINED
+#endif
+
+#if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+PinName const SDA = PTE25;
+PinName const SCL = PTE24;
+#else
+#error TARGET NOT DEFINED
+#endif
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+
+Serial pc(USBTX,USBRX);
+TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
+MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+
+enum{
+    INICIO,
+    ORDEN,
+    FIN
+};
+
+enum{
+    RESP_X,
+    RESP_Y,
+    RESP_Z,
+    RESP_A,
+    RESP_D
+};
+
+enum{
+    ROJO,
+    VERDE,
+    AZUL
+};
+
+enum{
+    HABILITADO,
+    DESHABILITADO
+};
+
+enum{
+    APAGADO,
+    ENCENDIDO
+};
+
+AnalogIn    Pote(A0);
+DigitalIn   Puls(D2);
+
+DigitalOut Led_Ext(D3);
+DigitalOut Led_R(LED_RED);
+DigitalOut Led_V(LED_GREEN);
+DigitalOut Led_A(LED_BLUE);
+
+unsigned int valor_ADC = 0, valor_ADC_xor = 0, Led_tout = 0, a_xor = 0;
+int a = 0, esp = 0, habilitacion = 0, j = 0, i = 0, p = 0, x = 0, y = 0, z = 0, X_xor = 0, Y_xor = 0, Z_xor = 0, A_xor = 0, D_xor = 0;
+float voltaje = 0, valor_tsi = 0;
+char byte = '\0', c = '\0';
+char Estado_Emision, Estado_Respuesta, Estado_Color, Estado_Led, Estado_tsi = DESHABILITADO; 
+bool newdata = false;
+
+void Emision();
+void Respuesta();
+void ADC();
+void Acelerometro();
+void Led_RGB();
+void Led_Habilitado();
+void Led_Deshabilitado();
+void init_mcu();
+void contador();
+int Pulsador();
+
+Ticker timer;
+
+void Byte_Reciver(){
+    
+    byte = pc.getc();
+    newdata = true;
+}
+
+int main (void){
+    
+    init_mcu();
+    pc.attach(&Byte_Reciver);
+    
+    while(true){
+        
+        valor_tsi = tsi.readPercentage();
+        
+        switch(Estado_tsi){
+        
+            case DESHABILITADO:
+                Led_Deshabilitado();
+                j = 0;
+                if(valor_tsi > 0 && j == 0){
+                    Estado_tsi = HABILITADO;
+                    valor_tsi = 0;
+                }
+            break;
+        
+            case HABILITADO:
+                Led_Habilitado();
+                j = 1;
+                if(newdata){
+                    Emision();
+                    }
+                    
+                if(valor_tsi > 0 && j == 1){
+                    Estado_tsi = DESHABILITADO;
+                    valor_tsi = 0;
+                }
+            break;
+        }
+    
+        Led_RGB();
+        
+        }
+    
+}
+
+void Emision(){
+    
+    switch(Estado_Emision){
+            
+        case INICIO:
+            if(byte == 64){
+                Estado_Emision = ORDEN;
+                newdata = false;
+            }else{
+                Estado_Emision = INICIO;
+            }   
+        break;
+            
+        case ORDEN:
+            if(byte >= 49 && byte <= 53){
+                    c = byte;
+                    Estado_Emision = FIN;
+                    newdata = false;
+            }else{
+                c = '\0';
+                Estado_Emision = ORDEN;
+                newdata = false;
+            }
+        break;
+        
+        case FIN:
+            if(byte == 35){
+                Estado_Emision = INICIO;
+                Respuesta();
+            }else{
+                c = '\0';
+                Estado_Emision = FIN;
+                newdata = false;
+            }
+        break;  
+    }
+    
+}
+
+void Respuesta(){
+    
+    ADC();
+    Acelerometro();
+    Pulsador();
+    
+        
+        if(c == 49) Estado_Respuesta = RESP_X;
+        if(c == 50) Estado_Respuesta = RESP_Y;
+        if(c == 51) Estado_Respuesta = RESP_Z;
+        if(c == 52) Estado_Respuesta = RESP_A;
+        if(c == 53) Estado_Respuesta = RESP_D;
+    
+        
+        switch(Estado_Respuesta){
+        
+            case RESP_X:
+                printf("  @ 1 %d %d #\n", x, X_xor );
+            break;
+        
+            case RESP_Y:
+                printf("  @ 2 %d %d #\n", y, Y_xor);
+            break;
+        
+            case RESP_Z:
+                printf("  @ 3 %d %d #\n", z, Z_xor);
+            break;
+        
+            case RESP_A:
+                printf("  @ 4 %d %d #\n", a, a_xor);
+            break;
+        
+            case RESP_D:
+                printf("  @ 5 %d %d #\n", p, 5 ^ p);
+            break;
+        }
+    
+}
+
+void Led_RGB(){
+    
+    ADC();
+    
+    if(voltaje <= 1.5)                      Estado_Color = ROJO;
+    if(voltaje > 1.5 && voltaje <= 2.5 )    Estado_Color = VERDE;
+    if(voltaje > 2.5)                       Estado_Color = AZUL;
+    
+    switch(Estado_Color){
+        
+        case ROJO:
+            Led_R = 0;
+            Led_V = 1;
+            Led_A = 1;
+        break;
+        
+        case VERDE:
+            Led_R = 1;
+            Led_V = 0;
+            Led_A = 1;
+        
+        break;
+        
+        case AZUL:
+            Led_R = 1;
+            Led_V = 1;
+            Led_A = 0;
+        
+        break;  
+        
+    }
+    
+}
+
+void Led_Habilitado(){
+    
+    switch(Estado_Led){
+        
+        case APAGADO:
+            Led_Ext = 0;
+            if(Led_tout == 0){
+                Estado_Led = ENCENDIDO;
+                Led_tout = 20;
+            }  
+        
+        break;
+        
+        case ENCENDIDO:
+            Led_Ext = 1;
+            if(Led_tout == 0){
+                i++;
+                Estado_Led = APAGADO;
+                if(i==3){
+                    Led_tout = 150;
+                    i=0;
+                }
+                else Led_tout = 20;
+            }
+        
+        break;
+    }
+    
+}
+
+void Led_Deshabilitado(){
+    
+    switch(Estado_Led){
+        
+        case APAGADO:
+            Led_Ext = 0;
+            if(Led_tout == 0){
+                Estado_Led = ENCENDIDO;
+                Led_tout = 50;
+            } 
+        
+        break;
+        
+        case ENCENDIDO:
+            Led_Ext = 1;
+            if(Led_tout == 0){
+                Estado_Led = APAGADO;
+                Led_tout = 100;
+            }
+        
+        break;
+    }
+    
+}
+
+
+
+int Pulsador(){
+    if(Puls == 0)p = 0;
+    if(Puls == 1)p = 1;
+    return p;
+}
+
+void ADC(){
+    valor_ADC = Pote.read_u16();
+    voltaje = valor_ADC * 3.3 / 65535;
+    a = valor_ADC * 100 / 65535;
+    
+    valor_ADC_xor = 4 ^ valor_ADC;
+    a_xor = 4 ^ a;
+}
+
+void Acelerometro(){
+    x = abs(acc.getAccX())*100; 
+    y = abs(acc.getAccY())*100;
+    z = abs(acc.getAccZ())*100; 
+    
+    X_xor = 1 ^ x;
+    Y_xor = 2 ^ y;
+    Z_xor = 3 ^ z;
+    
+}
+
+void Contador(){
+    if(Led_tout != 0){
+        Led_tout--; 
+    }
+}
+
+void init_mcu(){
+    timer.attach(&Contador, 0.01);
+}
\ No newline at end of file