.

Dependencies:   mbed tsi_sensor MMA8451Q

Committer:
lucasbovone
Date:
Tue May 12 15:39:23 2020 +0000
Revision:
0:2641e3a39ede
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucasbovone 0:2641e3a39ede 1 #include "mbed.h"
lucasbovone 0:2641e3a39ede 2 #include "MMA8451Q.h"
lucasbovone 0:2641e3a39ede 3 #include "tsi_sensor.h"
lucasbovone 0:2641e3a39ede 4
lucasbovone 0:2641e3a39ede 5 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
lucasbovone 0:2641e3a39ede 6 PinName const SDA = PTE25;
lucasbovone 0:2641e3a39ede 7 PinName const SCL = PTE24;
lucasbovone 0:2641e3a39ede 8 #elif defined (TARGET_KL05Z)
lucasbovone 0:2641e3a39ede 9 PinName const SDA = PTB4;
lucasbovone 0:2641e3a39ede 10 PinName const SCL = PTB3;
lucasbovone 0:2641e3a39ede 11 #elif defined (TARGET_K20D50M)
lucasbovone 0:2641e3a39ede 12 PinName const SDA = PTB1;
lucasbovone 0:2641e3a39ede 13 PinName const SCL = PTB0;
lucasbovone 0:2641e3a39ede 14 #else
lucasbovone 0:2641e3a39ede 15 #error TARGET NOT DEFINED
lucasbovone 0:2641e3a39ede 16 #endif
lucasbovone 0:2641e3a39ede 17
lucasbovone 0:2641e3a39ede 18 #define MMA8451_I2C_ADDRESS (0x1d<<1)
lucasbovone 0:2641e3a39ede 19
lucasbovone 0:2641e3a39ede 20 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
lucasbovone 0:2641e3a39ede 21 #define ELEC0 9
lucasbovone 0:2641e3a39ede 22 #define ELEC1 10
lucasbovone 0:2641e3a39ede 23 #elif defined (TARGET_KL05Z)
lucasbovone 0:2641e3a39ede 24 #define ELEC0 9
lucasbovone 0:2641e3a39ede 25 #define ELEC1 8
lucasbovone 0:2641e3a39ede 26 #else
lucasbovone 0:2641e3a39ede 27 #error TARGET NOT DEFINED
lucasbovone 0:2641e3a39ede 28 #endif
lucasbovone 0:2641e3a39ede 29
lucasbovone 0:2641e3a39ede 30 //Defines para poder ver mas simple la maquina de estado
lucasbovone 0:2641e3a39ede 31 #define INICIO 0
lucasbovone 0:2641e3a39ede 32 #define MODO 1
lucasbovone 0:2641e3a39ede 33 #define MUESTRO 2
lucasbovone 0:2641e3a39ede 34 #define ACEL 3
lucasbovone 0:2641e3a39ede 35 #define ANALOG 4
lucasbovone 0:2641e3a39ede 36 #define DIGIT 6
lucasbovone 0:2641e3a39ede 37 #define ERROR 5
lucasbovone 0:2641e3a39ede 38
lucasbovone 0:2641e3a39ede 39 Serial pc(USBTX, USBRX);
lucasbovone 0:2641e3a39ede 40
lucasbovone 0:2641e3a39ede 41 //Funciones
lucasbovone 0:2641e3a39ede 42 void recibo();//Paso lo que recibo por pc para ver lo que pide
lucasbovone 0:2641e3a39ede 43 void r_lrc();//Aca hace el lrc de lo recibido y lo imprime todo
lucasbovone 0:2641e3a39ede 44 void sw();//funcion que sirve para saber si se prende o apaga
lucasbovone 0:2641e3a39ede 45 void l_on();//funcion para el parpadeo cuando esta habilitado
lucasbovone 0:2641e3a39ede 46 void l_off();//funcion para el parpadeo cuando esta habilitado
lucasbovone 0:2641e3a39ede 47
lucasbovone 0:2641e3a39ede 48 //Variables
lucasbovone 0:2641e3a39ede 49 char buffer[5];//Guardo lo que recibo de PC aca
lucasbovone 0:2641e3a39ede 50 float xm=0,ym=0,zm=0,j=0,an=0,dig=0;//Variables de lo medido
lucasbovone 0:2641e3a39ede 51 int estado=0,i=0,e=0,ace=0,hab=0,enc=0,t=0,dec=0,uni=0;
lucasbovone 0:2641e3a39ede 52 int decx=0,unix=0,decy=0,uniy=0,decz=0,uniz=0,decan=0,unian=0;//Decena y unidad acelerometro
lucasbovone 0:2641e3a39ede 53
lucasbovone 0:2641e3a39ede 54 //Entradas y salidas
lucasbovone 0:2641e3a39ede 55 AnalogIn analog(PTB0);//Analogica
lucasbovone 0:2641e3a39ede 56 DigitalIn digit(PTC3);//Digital
lucasbovone 0:2641e3a39ede 57 DigitalOut rled(LED1);//Led Rojo
lucasbovone 0:2641e3a39ede 58 DigitalOut gled(LED2);//Led Verde
lucasbovone 0:2641e3a39ede 59 DigitalOut bled(LED3);//Led Azul
lucasbovone 0:2641e3a39ede 60
lucasbovone 0:2641e3a39ede 61 //Timers
lucasbovone 0:2641e3a39ede 62 Timer ton;//Timer para contar los ciclos de 0.3
lucasbovone 0:2641e3a39ede 63 Timer ton2;//Timer para contar el segundo apagado
lucasbovone 0:2641e3a39ede 64 Timer toff;//Timer para contar los ciclos de 0.25
lucasbovone 0:2641e3a39ede 65 Timer tw;/*Timer para poder leer cada cierto tiempo el tsi, si no le ponia el
lucasbovone 0:2641e3a39ede 66 tiempo podia tirar un valor alto al azar cuando prendia y se habilitaba solo*/
lucasbovone 0:2641e3a39ede 67
lucasbovone 0:2641e3a39ede 68 bool newdata = false; //Se pone en true cuando hay nuevos datos
lucasbovone 0:2641e3a39ede 69 void onCharReceived()
lucasbovone 0:2641e3a39ede 70 {
lucasbovone 0:2641e3a39ede 71 //Copiamos lo leido en el buffer
lucasbovone 0:2641e3a39ede 72 pc.gets(buffer,4);
lucasbovone 0:2641e3a39ede 73 newdata = true;
lucasbovone 0:2641e3a39ede 74 }
lucasbovone 0:2641e3a39ede 75 /*
lucasbovone 0:2641e3a39ede 76 ACLARACIONES
lucasbovone 0:2641e3a39ede 77 -En la entrada analogica por ejemplo 54 representa 0,54V, osea que va de 0 a 0,99
lucasbovone 0:2641e3a39ede 78 es decir hasta 99, pasa lo mismo con el acelerometro.
lucasbovone 0:2641e3a39ede 79 -En la digital se envia =1 o =0.
lucasbovone 0:2641e3a39ede 80 -El LRC se muestra en hexa.
lucasbovone 0:2641e3a39ede 81 */
lucasbovone 0:2641e3a39ede 82 int main()
lucasbovone 0:2641e3a39ede 83 {
lucasbovone 0:2641e3a39ede 84 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
lucasbovone 0:2641e3a39ede 85 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
lucasbovone 0:2641e3a39ede 86 rled=1;
lucasbovone 0:2641e3a39ede 87 gled=1;
lucasbovone 0:2641e3a39ede 88 bled=1;
lucasbovone 0:2641e3a39ede 89 pc.attach(&onCharReceived);
lucasbovone 0:2641e3a39ede 90
lucasbovone 0:2641e3a39ede 91 while (true) {
lucasbovone 0:2641e3a39ede 92 tw.start();
lucasbovone 0:2641e3a39ede 93 if(tw.read()>0.05) {
lucasbovone 0:2641e3a39ede 94 j=tsi.readPercentage();
lucasbovone 0:2641e3a39ede 95 tw.stop();
lucasbovone 0:2641e3a39ede 96 tw.reset();
lucasbovone 0:2641e3a39ede 97 }
lucasbovone 0:2641e3a39ede 98 sw();
lucasbovone 0:2641e3a39ede 99 xm = abs(acc.getAccX());
lucasbovone 0:2641e3a39ede 100 ym = abs(acc.getAccY());
lucasbovone 0:2641e3a39ede 101 zm = abs(acc.getAccZ());
lucasbovone 0:2641e3a39ede 102 if(enc==1) {
lucasbovone 0:2641e3a39ede 103 recibo();
lucasbovone 0:2641e3a39ede 104 l_on();
lucasbovone 0:2641e3a39ede 105 } else {
lucasbovone 0:2641e3a39ede 106 newdata=false;
lucasbovone 0:2641e3a39ede 107 l_off();
lucasbovone 0:2641e3a39ede 108 }
lucasbovone 0:2641e3a39ede 109
lucasbovone 0:2641e3a39ede 110
lucasbovone 0:2641e3a39ede 111 }
lucasbovone 0:2641e3a39ede 112 }
lucasbovone 0:2641e3a39ede 113 void r_lrc()
lucasbovone 0:2641e3a39ede 114 {
lucasbovone 0:2641e3a39ede 115 char LRC=0;
lucasbovone 0:2641e3a39ede 116 for (int b = 0; b < sizeof(buffer); b++) {
lucasbovone 0:2641e3a39ede 117 LRC ^= buffer[b];
lucasbovone 0:2641e3a39ede 118 }
lucasbovone 0:2641e3a39ede 119 printf("\n\n %s%X$ \n\n",buffer,LRC);
lucasbovone 0:2641e3a39ede 120 }
lucasbovone 0:2641e3a39ede 121 void sw()
lucasbovone 0:2641e3a39ede 122 {
lucasbovone 0:2641e3a39ede 123 if(j>0.0001&&hab==0) {
lucasbovone 0:2641e3a39ede 124 enc=!enc;
lucasbovone 0:2641e3a39ede 125 hab=1;
lucasbovone 0:2641e3a39ede 126 }
lucasbovone 0:2641e3a39ede 127 if(j<=0&&hab==1) {
lucasbovone 0:2641e3a39ede 128 hab=0;
lucasbovone 0:2641e3a39ede 129 }
lucasbovone 0:2641e3a39ede 130 }
lucasbovone 0:2641e3a39ede 131 void l_on()
lucasbovone 0:2641e3a39ede 132 {
lucasbovone 0:2641e3a39ede 133 rled=1;
lucasbovone 0:2641e3a39ede 134 if(t<2) {
lucasbovone 0:2641e3a39ede 135 ton.start();
lucasbovone 0:2641e3a39ede 136 if(ton.read()>=0.3) {
lucasbovone 0:2641e3a39ede 137 gled=!gled;
lucasbovone 0:2641e3a39ede 138 if(gled==1) {
lucasbovone 0:2641e3a39ede 139 t++;
lucasbovone 0:2641e3a39ede 140 }
lucasbovone 0:2641e3a39ede 141 ton.stop();
lucasbovone 0:2641e3a39ede 142 ton.reset();
lucasbovone 0:2641e3a39ede 143 }
lucasbovone 0:2641e3a39ede 144 } else {
lucasbovone 0:2641e3a39ede 145 gled=1;
lucasbovone 0:2641e3a39ede 146 ton2.start();
lucasbovone 0:2641e3a39ede 147 if(ton2.read()>=1) {
lucasbovone 0:2641e3a39ede 148 t=0;
lucasbovone 0:2641e3a39ede 149 ton2.stop();
lucasbovone 0:2641e3a39ede 150 ton2.reset();
lucasbovone 0:2641e3a39ede 151 }
lucasbovone 0:2641e3a39ede 152 }
lucasbovone 0:2641e3a39ede 153 }
lucasbovone 0:2641e3a39ede 154 void l_off()
lucasbovone 0:2641e3a39ede 155 {
lucasbovone 0:2641e3a39ede 156 ton.stop();
lucasbovone 0:2641e3a39ede 157 ton.reset();
lucasbovone 0:2641e3a39ede 158 ton2.stop();
lucasbovone 0:2641e3a39ede 159 ton2.reset();
lucasbovone 0:2641e3a39ede 160 t=0;
lucasbovone 0:2641e3a39ede 161 gled=1;
lucasbovone 0:2641e3a39ede 162 toff.start();
lucasbovone 0:2641e3a39ede 163 if(toff.read()>=0.25) {
lucasbovone 0:2641e3a39ede 164 rled=!rled;
lucasbovone 0:2641e3a39ede 165 toff.stop();
lucasbovone 0:2641e3a39ede 166 toff.reset();
lucasbovone 0:2641e3a39ede 167 }
lucasbovone 0:2641e3a39ede 168 }
lucasbovone 0:2641e3a39ede 169
lucasbovone 0:2641e3a39ede 170 void recibo()
lucasbovone 0:2641e3a39ede 171 {
lucasbovone 0:2641e3a39ede 172 if(newdata) {
lucasbovone 0:2641e3a39ede 173
lucasbovone 0:2641e3a39ede 174 switch(estado) {
lucasbovone 0:2641e3a39ede 175 case INICIO:
lucasbovone 0:2641e3a39ede 176 if(buffer[0]=='@') {
lucasbovone 0:2641e3a39ede 177 estado=MODO;
lucasbovone 0:2641e3a39ede 178 } else {
lucasbovone 0:2641e3a39ede 179 estado=ERROR;
lucasbovone 0:2641e3a39ede 180 }
lucasbovone 0:2641e3a39ede 181 break;
lucasbovone 0:2641e3a39ede 182 case MODO:
lucasbovone 0:2641e3a39ede 183 if(buffer[1]=='x') {
lucasbovone 0:2641e3a39ede 184 ace=1;
lucasbovone 0:2641e3a39ede 185 estado=ACEL;
lucasbovone 0:2641e3a39ede 186 } else if(buffer[1]=='y') {
lucasbovone 0:2641e3a39ede 187 ace=2;
lucasbovone 0:2641e3a39ede 188 estado=ACEL;
lucasbovone 0:2641e3a39ede 189 } else if(buffer[1]=='z') {
lucasbovone 0:2641e3a39ede 190 ace=3;
lucasbovone 0:2641e3a39ede 191 estado=ACEL;
lucasbovone 0:2641e3a39ede 192 } else if(buffer[1]=='a') {
lucasbovone 0:2641e3a39ede 193 estado=ANALOG;
lucasbovone 0:2641e3a39ede 194 } else if(buffer[1]=='d') {
lucasbovone 0:2641e3a39ede 195 estado=DIGIT;
lucasbovone 0:2641e3a39ede 196 } else if(estado==1) {
lucasbovone 0:2641e3a39ede 197 estado=ERROR;
lucasbovone 0:2641e3a39ede 198 }
lucasbovone 0:2641e3a39ede 199 break;
lucasbovone 0:2641e3a39ede 200 case MUESTRO:
lucasbovone 0:2641e3a39ede 201 estado=INICIO;
lucasbovone 0:2641e3a39ede 202 i=0;
lucasbovone 0:2641e3a39ede 203 r_lrc();
lucasbovone 0:2641e3a39ede 204 newdata=false;
lucasbovone 0:2641e3a39ede 205 break;
lucasbovone 0:2641e3a39ede 206 case ACEL:
lucasbovone 0:2641e3a39ede 207 if(ace==1&&buffer[2]=='$') {
lucasbovone 0:2641e3a39ede 208 decx=xm*10;
lucasbovone 0:2641e3a39ede 209 unix=xm*100-decx*10;
lucasbovone 0:2641e3a39ede 210 buffer[2]=decx+48;
lucasbovone 0:2641e3a39ede 211 buffer[3]=unix+48;
lucasbovone 0:2641e3a39ede 212 estado=MUESTRO;
lucasbovone 0:2641e3a39ede 213 } else if(ace==2&&buffer[2]=='$') {
lucasbovone 0:2641e3a39ede 214
lucasbovone 0:2641e3a39ede 215 decy=ym*10;
lucasbovone 0:2641e3a39ede 216 uniy=ym*100-decy*10;
lucasbovone 0:2641e3a39ede 217 buffer[2]=decy+48;
lucasbovone 0:2641e3a39ede 218 buffer[3]=uniy+48;
lucasbovone 0:2641e3a39ede 219 estado=MUESTRO;
lucasbovone 0:2641e3a39ede 220 } else if(ace==3&&buffer[2]=='$') {
lucasbovone 0:2641e3a39ede 221 decz=zm*10;
lucasbovone 0:2641e3a39ede 222 uniz=zm*100-decz*10;
lucasbovone 0:2641e3a39ede 223 buffer[2]=decz+48;
lucasbovone 0:2641e3a39ede 224 buffer[3]=uniz+48;
lucasbovone 0:2641e3a39ede 225 estado=MUESTRO;
lucasbovone 0:2641e3a39ede 226 } else {
lucasbovone 0:2641e3a39ede 227 estado=ERROR;
lucasbovone 0:2641e3a39ede 228 }
lucasbovone 0:2641e3a39ede 229 break;
lucasbovone 0:2641e3a39ede 230 case 4:
lucasbovone 0:2641e3a39ede 231 if(buffer[2]=='$') {
lucasbovone 0:2641e3a39ede 232 gled=1;
lucasbovone 0:2641e3a39ede 233 an=analog*100;
lucasbovone 0:2641e3a39ede 234 decan=an/10;
lucasbovone 0:2641e3a39ede 235 unian=an-decan*10;
lucasbovone 0:2641e3a39ede 236 buffer[2]=decan+48;
lucasbovone 0:2641e3a39ede 237 buffer[3]=unian+48;
lucasbovone 0:2641e3a39ede 238 estado=MUESTRO;
lucasbovone 0:2641e3a39ede 239 } else {
lucasbovone 0:2641e3a39ede 240 estado=ERROR;
lucasbovone 0:2641e3a39ede 241 }
lucasbovone 0:2641e3a39ede 242 break;
lucasbovone 0:2641e3a39ede 243 case ERROR:
lucasbovone 0:2641e3a39ede 244 newdata=false;
lucasbovone 0:2641e3a39ede 245 estado=INICIO;
lucasbovone 0:2641e3a39ede 246 break;
lucasbovone 0:2641e3a39ede 247 case DIGIT:
lucasbovone 0:2641e3a39ede 248 if(buffer[2]=='$') {
lucasbovone 0:2641e3a39ede 249 dig=digit;
lucasbovone 0:2641e3a39ede 250 buffer[2]='=';
lucasbovone 0:2641e3a39ede 251 buffer[3]=digit+48;
lucasbovone 0:2641e3a39ede 252 estado=MUESTRO;
lucasbovone 0:2641e3a39ede 253 } else {
lucasbovone 0:2641e3a39ede 254 newdata=false;
lucasbovone 0:2641e3a39ede 255 estado=ERROR;
lucasbovone 0:2641e3a39ede 256 }
lucasbovone 0:2641e3a39ede 257 break;
lucasbovone 0:2641e3a39ede 258 }
lucasbovone 0:2641e3a39ede 259 }
lucasbovone 0:2641e3a39ede 260 }