Proyecto completo del trabajo practico de Embebidos

Dependencies:   mbed tsi_sensor MMA8451Q

Files at this revision

API Documentation at this revision

Comitter:
AlvaAcosta
Date:
Wed Oct 21 08:22:05 2020 +0000
Commit message:
Trabajo Practico de embebidos mesa especial octubre

Changed in this revision

MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
tsi_sensor.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Wed Oct 21 08:22:05 2020 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
--- /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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Oct 21 08:22:05 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsi_sensor.lib	Wed Oct 21 08:22:05 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/Kojto/code/tsi_sensor/#976904559b5c