Programa para terminar carrera-Mayo 2020
Dependencies: mbed tsi_sensor MMA8451Q
main.cpp
- Committer:
- GabboEsc
- Date:
- 2020-05-12
- Revision:
- 0:9eab7a2e3a75
File content as of revision 0:9eab7a2e3a75:
#include "mbed.h" #include "tsi_sensor.h" #include "MMA8451Q.h" //Tsi... #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) #define ELEC0 9 #define ELEC1 10 #else #error TARGET NOT DEFINED #endif //Aceleromtetro... #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) DigitalOut LR (LED_RED, 1); DigitalOut LV (LED_GREEN, 1); DigitalOut LA (LED_BLUE, 1); DigitalIn DIG(PTB1); AnalogIn AN (A0); enum estados_Me_Inicio {LON, LOFF, HAB}; enum estados_Me_Inicio Inicio_Me_estado = LON; enum estado_me_recepcion {ESPERO, INICIO, ORDEN, FIN}; enum estado_me_recepcion recepcion_me_estado = ESPERO; enum estado_me_respuesta {RESPERA, RINICIO, RORDEN, ROX, ROY, ROZ, ROV, ROS1, ROS0, LRC, RFIN}; enum estado_me_respuesta respuesta_me_estado = RESPERA; char c = '\0', o = '\0'; unsigned char lrc = 0x0b; bool newdata = false; int t = 0, tr = 0, Vi = 0, Resp = 0; int Xd, Xu, Yd, Yu, Zd, Zu, Vd, Vu, s = 0; float Tsi = 0.0; TSIAnalogSlider tsi(ELEC0, ELEC1, 40); Serial pc(USBTX, USBRX); MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); void Me_Inicio(void); void cuenta(void); void Me_Recepcion(void); void Me_Respuesta(void); void onCharReceived(){ //Funcion en la que recibe el caracter... c = pc.getc(); newdata = true; if(c >= 97 && c <= 122){ c -= 32; } } void cuenta(){ //Funcion para el contador del programa... if (t != 0) t--; if(tr != 0) tr--; Tsi = tsi.readPercentage(); } void datos(){ } Ticker tiempo; int main(void) { tiempo.attach(&cuenta, 0.01); pc.attach(&onCharReceived); while (true) { if(newdata){ Me_Recepcion(); } Me_Inicio(); Me_Respuesta(); datos(); } } void Me_Inicio(){ switch(Inicio_Me_estado){ case LON: LR = 0; if(Tsi > 0) Inicio_Me_estado = HAB; if( Vi == 0 && t == 0){ t = 50; Inicio_Me_estado = LOFF; } if(Vi == 1 && t == 0){ t = 25; Inicio_Me_estado = LOFF; }break; case LOFF: LR = 1; if(Tsi > 0) Inicio_Me_estado = HAB; if(Vi == 1 && t == 0){ t = 15; Inicio_Me_estado = LON; } if(Vi == 0 && t == 0){ t = 25; Inicio_Me_estado = LON; }break; case HAB: Vi = 1; if(t == 0){ t = 25; Inicio_Me_estado = LON; }break; } } void Me_Recepcion(){ switch(recepcion_me_estado){ case ESPERO: if(c != 64 || Vi == 0){ c = '\0'; newdata = false; } if(c == 64){ // @ = 64 en ASCII... recepcion_me_estado = INICIO; newdata = false; } break; case INICIO: if(c == 88 ||c == 89 ||c == 90 ||c == 86 ||c == 83){ //X = 88 ; y = 89 ; z = 90 ; v = 86 ; s = 83... recepcion_me_estado = ORDEN; o = c; newdata = false; } else{ c = '\0'; recepcion_me_estado = ESPERO; newdata = false; }break; case ORDEN: if(c == 37){ //% = 115 recepcion_me_estado = FIN; } else{ recepcion_me_estado = ESPERO; c = '\0'; newdata = false; }break; case FIN: recepcion_me_estado = ESPERO; Resp = 1; break; } } void Me_Respuesta(){ switch(respuesta_me_estado){ case RESPERA: lrc = 0x0; if(Resp == 1){ tr = 1; respuesta_me_estado = RINICIO; pc.printf("%c",'@'); lrc ^= 0x40; }break; case RINICIO: if(tr == 0){ tr = 1; respuesta_me_estado = RORDEN; pc.printf("%c", o); lrc ^= o; }break; case RORDEN: if(o == 'X' && tr == 0){ Xd = 10*abs(acc.getAccX()); Xu = 10*abs(acc.getAccX()) - Xd; pc.printf("%d%d", Xd, Xu); lrc ^= (Xd + 48); lrc ^= (Xu + 48); tr = 1; respuesta_me_estado = LRC; } if(o == 'Y' && tr == 0){ Yd = 10*abs(acc.getAccY()); Yu = 10 *abs(acc.getAccX()) - Yd; pc.printf("%d%d", Yd, Yu); lrc ^= (Yd+48); lrc ^= (Yu+48); tr = 1; respuesta_me_estado = LRC; } if(o == 'Z' && tr == 0){ Zd = 10*abs(acc.getAccZ()); Zu = 10*abs(acc.getAccX()) - Zd; pc.printf("%d%d", Zd, Zu); lrc ^= (Zd+48); lrc ^= (Zu+48); tr = 1; respuesta_me_estado = LRC; } if(o == 'V' && tr == 0){ Vd = AN.read()*3.3; Vu = AN.read()*33 - Vd*10; pc.printf("%d%d", Vd, Vu); lrc ^= (Vd+48); lrc ^= (Vu+48); tr = 1; respuesta_me_estado = LRC; } if(o == 'S' && tr == 0){ if(DIG == 1){ s = 49; }else{ s = 48;} pc.printf("%c", s); lrc ^= s ; tr = 1; respuesta_me_estado = LRC; }break; case LRC: if(tr == 0){ pc.printf("%X", lrc); respuesta_me_estado = RFIN; lrc = 0x0; }break; case RFIN: if(tr == 0){ pc.printf("%c\n",0x25); // % = 0x25h = 37d Resp = 0; respuesta_me_estado = RESPERA; }break; } }