
Proyecto completo del trabajo practico de Embebidos
Dependencies: mbed tsi_sensor MMA8451Q
main.cpp
- Committer:
- AlvaAcosta
- Date:
- 2020-10-21
- Revision:
- 0:7cc43619dcac
File content as of revision 0:7cc43619dcac:
#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); }