
.
Dependencies: mbed tsi_sensor MMA8451Q
Revision 0:2641e3a39ede, committed 2020-05-12
- Comitter:
- lucasbovone
- Date:
- Tue May 12 15:39:23 2020 +0000
- Commit message:
- .
Changed in this revision
diff -r 000000000000 -r 2641e3a39ede MMA8451Q.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA8451Q.lib Tue May 12 15:39:23 2020 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
diff -r 000000000000 -r 2641e3a39ede main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue May 12 15:39:23 2020 +0000 @@ -0,0 +1,260 @@ +#include "mbed.h" +#include "MMA8451Q.h" +#include "tsi_sensor.h" + +#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) +PinName const SDA = PTE25; +PinName const SCL = PTE24; +#elif defined (TARGET_KL05Z) +PinName const SDA = PTB4; +PinName const SCL = PTB3; +#elif defined (TARGET_K20D50M) +PinName const SDA = PTB1; +PinName const SCL = PTB0; +#else +#error TARGET NOT DEFINED +#endif + +#define MMA8451_I2C_ADDRESS (0x1d<<1) + +#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) +#define ELEC0 9 +#define ELEC1 10 +#elif defined (TARGET_KL05Z) +#define ELEC0 9 +#define ELEC1 8 +#else +#error TARGET NOT DEFINED +#endif + +//Defines para poder ver mas simple la maquina de estado +#define INICIO 0 +#define MODO 1 +#define MUESTRO 2 +#define ACEL 3 +#define ANALOG 4 +#define DIGIT 6 +#define ERROR 5 + +Serial pc(USBTX, USBRX); + +//Funciones +void recibo();//Paso lo que recibo por pc para ver lo que pide +void r_lrc();//Aca hace el lrc de lo recibido y lo imprime todo +void sw();//funcion que sirve para saber si se prende o apaga +void l_on();//funcion para el parpadeo cuando esta habilitado +void l_off();//funcion para el parpadeo cuando esta habilitado + +//Variables +char buffer[5];//Guardo lo que recibo de PC aca +float xm=0,ym=0,zm=0,j=0,an=0,dig=0;//Variables de lo medido +int estado=0,i=0,e=0,ace=0,hab=0,enc=0,t=0,dec=0,uni=0; +int decx=0,unix=0,decy=0,uniy=0,decz=0,uniz=0,decan=0,unian=0;//Decena y unidad acelerometro + +//Entradas y salidas +AnalogIn analog(PTB0);//Analogica +DigitalIn digit(PTC3);//Digital +DigitalOut rled(LED1);//Led Rojo +DigitalOut gled(LED2);//Led Verde +DigitalOut bled(LED3);//Led Azul + +//Timers +Timer ton;//Timer para contar los ciclos de 0.3 +Timer ton2;//Timer para contar el segundo apagado +Timer toff;//Timer para contar los ciclos de 0.25 +Timer tw;/*Timer para poder leer cada cierto tiempo el tsi, si no le ponia el +tiempo podia tirar un valor alto al azar cuando prendia y se habilitaba solo*/ + +bool newdata = false; //Se pone en true cuando hay nuevos datos +void onCharReceived() +{ + //Copiamos lo leido en el buffer + pc.gets(buffer,4); + newdata = true; +} +/* +ACLARACIONES +-En la entrada analogica por ejemplo 54 representa 0,54V, osea que va de 0 a 0,99 +es decir hasta 99, pasa lo mismo con el acelerometro. +-En la digital se envia =1 o =0. +-El LRC se muestra en hexa. +*/ +int main() +{ + MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); + TSIAnalogSlider tsi(ELEC0, ELEC1, 40); + rled=1; + gled=1; + bled=1; + pc.attach(&onCharReceived); + + while (true) { + tw.start(); + if(tw.read()>0.05) { + j=tsi.readPercentage(); + tw.stop(); + tw.reset(); + } + sw(); + xm = abs(acc.getAccX()); + ym = abs(acc.getAccY()); + zm = abs(acc.getAccZ()); + if(enc==1) { + recibo(); + l_on(); + } else { + newdata=false; + l_off(); + } + + + } +} +void r_lrc() +{ + char LRC=0; + for (int b = 0; b < sizeof(buffer); b++) { + LRC ^= buffer[b]; + } + printf("\n\n %s%X$ \n\n",buffer,LRC); +} +void sw() +{ + if(j>0.0001&&hab==0) { + enc=!enc; + hab=1; + } + if(j<=0&&hab==1) { + hab=0; + } +} +void l_on() +{ + rled=1; + if(t<2) { + ton.start(); + if(ton.read()>=0.3) { + gled=!gled; + if(gled==1) { + t++; + } + ton.stop(); + ton.reset(); + } + } else { + gled=1; + ton2.start(); + if(ton2.read()>=1) { + t=0; + ton2.stop(); + ton2.reset(); + } + } +} +void l_off() +{ + ton.stop(); + ton.reset(); + ton2.stop(); + ton2.reset(); + t=0; + gled=1; + toff.start(); + if(toff.read()>=0.25) { + rled=!rled; + toff.stop(); + toff.reset(); + } +} + +void recibo() +{ + if(newdata) { + + switch(estado) { + case INICIO: + if(buffer[0]=='@') { + estado=MODO; + } else { + estado=ERROR; + } + break; + case MODO: + if(buffer[1]=='x') { + ace=1; + estado=ACEL; + } else if(buffer[1]=='y') { + ace=2; + estado=ACEL; + } else if(buffer[1]=='z') { + ace=3; + estado=ACEL; + } else if(buffer[1]=='a') { + estado=ANALOG; + } else if(buffer[1]=='d') { + estado=DIGIT; + } else if(estado==1) { + estado=ERROR; + } + break; + case MUESTRO: + estado=INICIO; + i=0; + r_lrc(); + newdata=false; + break; + case ACEL: + if(ace==1&&buffer[2]=='$') { + decx=xm*10; + unix=xm*100-decx*10; + buffer[2]=decx+48; + buffer[3]=unix+48; + estado=MUESTRO; + } else if(ace==2&&buffer[2]=='$') { + + decy=ym*10; + uniy=ym*100-decy*10; + buffer[2]=decy+48; + buffer[3]=uniy+48; + estado=MUESTRO; + } else if(ace==3&&buffer[2]=='$') { + decz=zm*10; + uniz=zm*100-decz*10; + buffer[2]=decz+48; + buffer[3]=uniz+48; + estado=MUESTRO; + } else { + estado=ERROR; + } + break; + case 4: + if(buffer[2]=='$') { + gled=1; + an=analog*100; + decan=an/10; + unian=an-decan*10; + buffer[2]=decan+48; + buffer[3]=unian+48; + estado=MUESTRO; + } else { + estado=ERROR; + } + break; + case ERROR: + newdata=false; + estado=INICIO; + break; + case DIGIT: + if(buffer[2]=='$') { + dig=digit; + buffer[2]='='; + buffer[3]=digit+48; + estado=MUESTRO; + } else { + newdata=false; + estado=ERROR; + } + break; + } + } +} \ No newline at end of file
diff -r 000000000000 -r 2641e3a39ede mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue May 12 15:39:23 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file
diff -r 000000000000 -r 2641e3a39ede tsi_sensor.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsi_sensor.lib Tue May 12 15:39:23 2020 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Kojto/code/tsi_sensor/#976904559b5c