
.
Dependencies: mbed tsi_sensor MMA8451Q
main.cpp@0:2641e3a39ede, 2020-05-12 (annotated)
- Committer:
- lucasbovone
- Date:
- Tue May 12 15:39:23 2020 +0000
- Revision:
- 0:2641e3a39ede
.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |