
Proyecto completo del trabajo practico de Embebidos
Dependencies: mbed tsi_sensor MMA8451Q
Diff: main.cpp
- Revision:
- 0:7cc43619dcac
diff -r 000000000000 -r 7cc43619dcac main.cpp --- /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