
.
Dependencies: mbed tsi_sensor MMA8451Q
main.cpp@0:6c94c5ac5e8c, 2020-05-12 (annotated)
- Committer:
- Naza00
- Date:
- Tue May 12 15:55:25 2020 +0000
- Revision:
- 0:6c94c5ac5e8c
- Child:
- 1:57b0bfa26afb
FUNCIONA
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Naza00 | 0:6c94c5ac5e8c | 1 | #include "mbed.h" |
Naza00 | 0:6c94c5ac5e8c | 2 | #include "MMA8451Q.h" |
Naza00 | 0:6c94c5ac5e8c | 3 | |
Naza00 | 0:6c94c5ac5e8c | 4 | #define ESPERA 0 |
Naza00 | 0:6c94c5ac5e8c | 5 | #define ORDEN 1 |
Naza00 | 0:6c94c5ac5e8c | 6 | #define FIN 2 |
Naza00 | 0:6c94c5ac5e8c | 7 | |
Naza00 | 0:6c94c5ac5e8c | 8 | #define X 0 |
Naza00 | 0:6c94c5ac5e8c | 9 | #define Y 1 |
Naza00 | 0:6c94c5ac5e8c | 10 | #define Z 2 |
Naza00 | 0:6c94c5ac5e8c | 11 | #define V 3 |
Naza00 | 0:6c94c5ac5e8c | 12 | #define S 4 |
Naza00 | 0:6c94c5ac5e8c | 13 | |
Naza00 | 0:6c94c5ac5e8c | 14 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
Naza00 | 0:6c94c5ac5e8c | 15 | PinName const SDA = PTE25; |
Naza00 | 0:6c94c5ac5e8c | 16 | PinName const SCL = PTE24; |
Naza00 | 0:6c94c5ac5e8c | 17 | #elif defined (TARGET_KL05Z) |
Naza00 | 0:6c94c5ac5e8c | 18 | PinName const SDA = PTB4; |
Naza00 | 0:6c94c5ac5e8c | 19 | PinName const SCL = PTB3; |
Naza00 | 0:6c94c5ac5e8c | 20 | #elif defined (TARGET_K20D50M) |
Naza00 | 0:6c94c5ac5e8c | 21 | PinName const SDA = PTB1; |
Naza00 | 0:6c94c5ac5e8c | 22 | PinName const SCL = PTB0; |
Naza00 | 0:6c94c5ac5e8c | 23 | #else |
Naza00 | 0:6c94c5ac5e8c | 24 | #error TARGET NOT DEFINED |
Naza00 | 0:6c94c5ac5e8c | 25 | #endif |
Naza00 | 0:6c94c5ac5e8c | 26 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
Naza00 | 0:6c94c5ac5e8c | 27 | |
Naza00 | 0:6c94c5ac5e8c | 28 | //Definimos que el puerto serie se llama pc |
Naza00 | 0:6c94c5ac5e8c | 29 | Serial pc(USBTX, USBRX); |
Naza00 | 0:6c94c5ac5e8c | 30 | |
Naza00 | 0:6c94c5ac5e8c | 31 | //Variable donde se guarda lo leido |
Naza00 | 0:6c94c5ac5e8c | 32 | char c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 33 | |
Naza00 | 0:6c94c5ac5e8c | 34 | //bit usado como flag para procesar datos |
Naza00 | 0:6c94c5ac5e8c | 35 | bool newdata = false; //Se pone en true cuando hay nuevos datos |
Naza00 | 0:6c94c5ac5e8c | 36 | |
Naza00 | 0:6c94c5ac5e8c | 37 | |
Naza00 | 0:6c94c5ac5e8c | 38 | AnalogIn voltaje_entrada(PTC1); |
Naza00 | 0:6c94c5ac5e8c | 39 | DigitalIn entrada_digital(PTC7); |
Naza00 | 0:6c94c5ac5e8c | 40 | |
Naza00 | 0:6c94c5ac5e8c | 41 | DigitalOut led1(LED1); |
Naza00 | 0:6c94c5ac5e8c | 42 | DigitalOut led2(LED2); |
Naza00 | 0:6c94c5ac5e8c | 43 | DigitalOut led3(LED3); |
Naza00 | 0:6c94c5ac5e8c | 44 | |
Naza00 | 0:6c94c5ac5e8c | 45 | //Callback cuando se detecta una entrada |
Naza00 | 0:6c94c5ac5e8c | 46 | void onCharReceived(){ |
Naza00 | 0:6c94c5ac5e8c | 47 | |
Naza00 | 0:6c94c5ac5e8c | 48 | //Copiamos lo leido en c |
Naza00 | 0:6c94c5ac5e8c | 49 | c = pc.getc(); |
Naza00 | 0:6c94c5ac5e8c | 50 | newdata = true; |
Naza00 | 0:6c94c5ac5e8c | 51 | } |
Naza00 | 0:6c94c5ac5e8c | 52 | //Funciones |
Naza00 | 0:6c94c5ac5e8c | 53 | int acelerometro_x(); |
Naza00 | 0:6c94c5ac5e8c | 54 | int acelerometro_y(); |
Naza00 | 0:6c94c5ac5e8c | 55 | int acelerometro_z(); |
Naza00 | 0:6c94c5ac5e8c | 56 | int adc(); |
Naza00 | 0:6c94c5ac5e8c | 57 | int in_digital(); |
Naza00 | 0:6c94c5ac5e8c | 58 | int lrc(); |
Naza00 | 0:6c94c5ac5e8c | 59 | |
Naza00 | 0:6c94c5ac5e8c | 60 | int estado=ESPERA; |
Naza00 | 0:6c94c5ac5e8c | 61 | float x,y,z; |
Naza00 | 0:6c94c5ac5e8c | 62 | int valor_x; // |
Naza00 | 0:6c94c5ac5e8c | 63 | int valor_y; // VALORES BIEN DEL ACELEROMETRO |
Naza00 | 0:6c94c5ac5e8c | 64 | int valor_z; // |
Naza00 | 0:6c94c5ac5e8c | 65 | unsigned int valor_adc; |
Naza00 | 0:6c94c5ac5e8c | 66 | float in_analog; //VALOR BIEN DE LA ENTRADA ANALOGICA |
Naza00 | 0:6c94c5ac5e8c | 67 | int valor_dig=0; // VALOR BIEN DE LA ENTRADA DIGITAL |
Naza00 | 0:6c94c5ac5e8c | 68 | int valor_analog; |
Naza00 | 0:6c94c5ac5e8c | 69 | char vector_respuesta[10]= {0}; |
Naza00 | 0:6c94c5ac5e8c | 70 | int decena_valor_medido=0,unidad_valor_medido=0; |
Naza00 | 0:6c94c5ac5e8c | 71 | unsigned char valor_lrc=0; |
Naza00 | 0:6c94c5ac5e8c | 72 | int orden=0,a=0,j=0; |
Naza00 | 0:6c94c5ac5e8c | 73 | |
Naza00 | 0:6c94c5ac5e8c | 74 | int main() { |
Naza00 | 0:6c94c5ac5e8c | 75 | |
Naza00 | 0:6c94c5ac5e8c | 76 | //Apagamos los leds |
Naza00 | 0:6c94c5ac5e8c | 77 | led1 = 1; |
Naza00 | 0:6c94c5ac5e8c | 78 | led2 = 1; |
Naza00 | 0:6c94c5ac5e8c | 79 | led3 = 1; |
Naza00 | 0:6c94c5ac5e8c | 80 | |
Naza00 | 0:6c94c5ac5e8c | 81 | //Ejecutar onCharReceived por cada entrada por puerto |
Naza00 | 0:6c94c5ac5e8c | 82 | pc.attach(&onCharReceived); |
Naza00 | 0:6c94c5ac5e8c | 83 | |
Naza00 | 0:6c94c5ac5e8c | 84 | while(true){ |
Naza00 | 0:6c94c5ac5e8c | 85 | if(newdata){ |
Naza00 | 0:6c94c5ac5e8c | 86 | newdata = false; |
Naza00 | 0:6c94c5ac5e8c | 87 | switch(estado){ |
Naza00 | 0:6c94c5ac5e8c | 88 | |
Naza00 | 0:6c94c5ac5e8c | 89 | case ESPERA: |
Naza00 | 0:6c94c5ac5e8c | 90 | if(c=='@'){ |
Naza00 | 0:6c94c5ac5e8c | 91 | estado=ORDEN; |
Naza00 | 0:6c94c5ac5e8c | 92 | vector_respuesta[0]='@'; |
Naza00 | 0:6c94c5ac5e8c | 93 | c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 94 | } |
Naza00 | 0:6c94c5ac5e8c | 95 | break; |
Naza00 | 0:6c94c5ac5e8c | 96 | |
Naza00 | 0:6c94c5ac5e8c | 97 | case ORDEN: |
Naza00 | 0:6c94c5ac5e8c | 98 | switch(c){ |
Naza00 | 0:6c94c5ac5e8c | 99 | |
Naza00 | 0:6c94c5ac5e8c | 100 | default: |
Naza00 | 0:6c94c5ac5e8c | 101 | estado = ESPERA; |
Naza00 | 0:6c94c5ac5e8c | 102 | break; |
Naza00 | 0:6c94c5ac5e8c | 103 | |
Naza00 | 0:6c94c5ac5e8c | 104 | case 'X': |
Naza00 | 0:6c94c5ac5e8c | 105 | acelerometro_x(); |
Naza00 | 0:6c94c5ac5e8c | 106 | vector_respuesta[1]='X'; |
Naza00 | 0:6c94c5ac5e8c | 107 | |
Naza00 | 0:6c94c5ac5e8c | 108 | vector_respuesta[2]=valor_x/10; |
Naza00 | 0:6c94c5ac5e8c | 109 | vector_respuesta[3]=valor_x - (vector_respuesta[2] * 10); |
Naza00 | 0:6c94c5ac5e8c | 110 | |
Naza00 | 0:6c94c5ac5e8c | 111 | a=vector_respuesta[2]; |
Naza00 | 0:6c94c5ac5e8c | 112 | j=vector_respuesta[3]; |
Naza00 | 0:6c94c5ac5e8c | 113 | orden='X'; |
Naza00 | 0:6c94c5ac5e8c | 114 | |
Naza00 | 0:6c94c5ac5e8c | 115 | lrc(); |
Naza00 | 0:6c94c5ac5e8c | 116 | |
Naza00 | 0:6c94c5ac5e8c | 117 | if(c=='%'){ |
Naza00 | 0:6c94c5ac5e8c | 118 | estado=FIN; |
Naza00 | 0:6c94c5ac5e8c | 119 | } |
Naza00 | 0:6c94c5ac5e8c | 120 | |
Naza00 | 0:6c94c5ac5e8c | 121 | c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 122 | break; |
Naza00 | 0:6c94c5ac5e8c | 123 | |
Naza00 | 0:6c94c5ac5e8c | 124 | case 'Y': |
Naza00 | 0:6c94c5ac5e8c | 125 | acelerometro_y(); |
Naza00 | 0:6c94c5ac5e8c | 126 | vector_respuesta[1]='Y'; |
Naza00 | 0:6c94c5ac5e8c | 127 | |
Naza00 | 0:6c94c5ac5e8c | 128 | vector_respuesta[2]=valor_y/10; |
Naza00 | 0:6c94c5ac5e8c | 129 | vector_respuesta[3]=valor_y - (vector_respuesta[2] * 10); |
Naza00 | 0:6c94c5ac5e8c | 130 | |
Naza00 | 0:6c94c5ac5e8c | 131 | a=vector_respuesta[2]; |
Naza00 | 0:6c94c5ac5e8c | 132 | j=vector_respuesta[3]; |
Naza00 | 0:6c94c5ac5e8c | 133 | orden='Y'; |
Naza00 | 0:6c94c5ac5e8c | 134 | |
Naza00 | 0:6c94c5ac5e8c | 135 | lrc(); |
Naza00 | 0:6c94c5ac5e8c | 136 | |
Naza00 | 0:6c94c5ac5e8c | 137 | if(c=='%'){ |
Naza00 | 0:6c94c5ac5e8c | 138 | estado=FIN; |
Naza00 | 0:6c94c5ac5e8c | 139 | } |
Naza00 | 0:6c94c5ac5e8c | 140 | |
Naza00 | 0:6c94c5ac5e8c | 141 | c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 142 | break; |
Naza00 | 0:6c94c5ac5e8c | 143 | |
Naza00 | 0:6c94c5ac5e8c | 144 | case 'Z': |
Naza00 | 0:6c94c5ac5e8c | 145 | acelerometro_z(); |
Naza00 | 0:6c94c5ac5e8c | 146 | vector_respuesta[1]='Z'; |
Naza00 | 0:6c94c5ac5e8c | 147 | |
Naza00 | 0:6c94c5ac5e8c | 148 | vector_respuesta[2]=valor_z/10; |
Naza00 | 0:6c94c5ac5e8c | 149 | vector_respuesta[3]=valor_z - (vector_respuesta[2] * 10); |
Naza00 | 0:6c94c5ac5e8c | 150 | |
Naza00 | 0:6c94c5ac5e8c | 151 | a=vector_respuesta[2]; |
Naza00 | 0:6c94c5ac5e8c | 152 | j=vector_respuesta[3]; |
Naza00 | 0:6c94c5ac5e8c | 153 | orden='Z'; |
Naza00 | 0:6c94c5ac5e8c | 154 | |
Naza00 | 0:6c94c5ac5e8c | 155 | lrc(); |
Naza00 | 0:6c94c5ac5e8c | 156 | |
Naza00 | 0:6c94c5ac5e8c | 157 | if(c=='%'){ |
Naza00 | 0:6c94c5ac5e8c | 158 | estado=FIN; |
Naza00 | 0:6c94c5ac5e8c | 159 | } |
Naza00 | 0:6c94c5ac5e8c | 160 | |
Naza00 | 0:6c94c5ac5e8c | 161 | c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 162 | break; |
Naza00 | 0:6c94c5ac5e8c | 163 | |
Naza00 | 0:6c94c5ac5e8c | 164 | case 'V': |
Naza00 | 0:6c94c5ac5e8c | 165 | adc(); |
Naza00 | 0:6c94c5ac5e8c | 166 | vector_respuesta[1]='V'; |
Naza00 | 0:6c94c5ac5e8c | 167 | |
Naza00 | 0:6c94c5ac5e8c | 168 | vector_respuesta[2]=valor_analog/10; |
Naza00 | 0:6c94c5ac5e8c | 169 | vector_respuesta[3]=valor_analog-(vector_respuesta[2]*10); |
Naza00 | 0:6c94c5ac5e8c | 170 | |
Naza00 | 0:6c94c5ac5e8c | 171 | a=vector_respuesta[2]; |
Naza00 | 0:6c94c5ac5e8c | 172 | j=vector_respuesta[3]; |
Naza00 | 0:6c94c5ac5e8c | 173 | orden='V'; |
Naza00 | 0:6c94c5ac5e8c | 174 | |
Naza00 | 0:6c94c5ac5e8c | 175 | lrc(); |
Naza00 | 0:6c94c5ac5e8c | 176 | wait_ms(250); |
Naza00 | 0:6c94c5ac5e8c | 177 | |
Naza00 | 0:6c94c5ac5e8c | 178 | if(c=='%'){ |
Naza00 | 0:6c94c5ac5e8c | 179 | estado=FIN; |
Naza00 | 0:6c94c5ac5e8c | 180 | } |
Naza00 | 0:6c94c5ac5e8c | 181 | |
Naza00 | 0:6c94c5ac5e8c | 182 | c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 183 | break; |
Naza00 | 0:6c94c5ac5e8c | 184 | |
Naza00 | 0:6c94c5ac5e8c | 185 | case 'S': |
Naza00 | 0:6c94c5ac5e8c | 186 | in_digital(); |
Naza00 | 0:6c94c5ac5e8c | 187 | vector_respuesta[1]='S'; |
Naza00 | 0:6c94c5ac5e8c | 188 | |
Naza00 | 0:6c94c5ac5e8c | 189 | vector_respuesta[2]=0; |
Naza00 | 0:6c94c5ac5e8c | 190 | vector_respuesta[3]=valor_dig; |
Naza00 | 0:6c94c5ac5e8c | 191 | a=0; |
Naza00 | 0:6c94c5ac5e8c | 192 | j=vector_respuesta[3]; |
Naza00 | 0:6c94c5ac5e8c | 193 | orden='S'; |
Naza00 | 0:6c94c5ac5e8c | 194 | |
Naza00 | 0:6c94c5ac5e8c | 195 | lrc(); |
Naza00 | 0:6c94c5ac5e8c | 196 | wait_ms(250); |
Naza00 | 0:6c94c5ac5e8c | 197 | |
Naza00 | 0:6c94c5ac5e8c | 198 | if(c=='%'){ |
Naza00 | 0:6c94c5ac5e8c | 199 | estado=FIN; |
Naza00 | 0:6c94c5ac5e8c | 200 | } |
Naza00 | 0:6c94c5ac5e8c | 201 | |
Naza00 | 0:6c94c5ac5e8c | 202 | c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 203 | break; |
Naza00 | 0:6c94c5ac5e8c | 204 | |
Naza00 | 0:6c94c5ac5e8c | 205 | case '@': |
Naza00 | 0:6c94c5ac5e8c | 206 | break; |
Naza00 | 0:6c94c5ac5e8c | 207 | } |
Naza00 | 0:6c94c5ac5e8c | 208 | break; |
Naza00 | 0:6c94c5ac5e8c | 209 | |
Naza00 | 0:6c94c5ac5e8c | 210 | case FIN: |
Naza00 | 0:6c94c5ac5e8c | 211 | vector_respuesta[4]='%'; |
Naza00 | 0:6c94c5ac5e8c | 212 | printf("\r\n%c%c%d%d%x%c",vector_respuesta[0],vector_respuesta[1],vector_respuesta[2],vector_respuesta[3],valor_lrc,vector_respuesta[4]); |
Naza00 | 0:6c94c5ac5e8c | 213 | estado=ESPERA; |
Naza00 | 0:6c94c5ac5e8c | 214 | c = '\0'; |
Naza00 | 0:6c94c5ac5e8c | 215 | break; |
Naza00 | 0:6c94c5ac5e8c | 216 | |
Naza00 | 0:6c94c5ac5e8c | 217 | } //switch |
Naza00 | 0:6c94c5ac5e8c | 218 | }// if newdata |
Naza00 | 0:6c94c5ac5e8c | 219 | } //while |
Naza00 | 0:6c94c5ac5e8c | 220 | } //main |
Naza00 | 0:6c94c5ac5e8c | 221 | |
Naza00 | 0:6c94c5ac5e8c | 222 | |
Naza00 | 0:6c94c5ac5e8c | 223 | int acelerometro_x(){ |
Naza00 | 0:6c94c5ac5e8c | 224 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
Naza00 | 0:6c94c5ac5e8c | 225 | x = abs(acc.getAccX()); |
Naza00 | 0:6c94c5ac5e8c | 226 | wait(0.1f); |
Naza00 | 0:6c94c5ac5e8c | 227 | valor_x=x*100; |
Naza00 | 0:6c94c5ac5e8c | 228 | return valor_x; |
Naza00 | 0:6c94c5ac5e8c | 229 | } |
Naza00 | 0:6c94c5ac5e8c | 230 | |
Naza00 | 0:6c94c5ac5e8c | 231 | int acelerometro_y(){ |
Naza00 | 0:6c94c5ac5e8c | 232 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
Naza00 | 0:6c94c5ac5e8c | 233 | y = abs(acc.getAccY()); |
Naza00 | 0:6c94c5ac5e8c | 234 | wait(0.1f); |
Naza00 | 0:6c94c5ac5e8c | 235 | valor_y=y*100; |
Naza00 | 0:6c94c5ac5e8c | 236 | return valor_y; |
Naza00 | 0:6c94c5ac5e8c | 237 | } |
Naza00 | 0:6c94c5ac5e8c | 238 | |
Naza00 | 0:6c94c5ac5e8c | 239 | int acelerometro_z(){ |
Naza00 | 0:6c94c5ac5e8c | 240 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
Naza00 | 0:6c94c5ac5e8c | 241 | z = abs(acc.getAccZ()); |
Naza00 | 0:6c94c5ac5e8c | 242 | wait(0.1f); |
Naza00 | 0:6c94c5ac5e8c | 243 | valor_z=z*100; |
Naza00 | 0:6c94c5ac5e8c | 244 | return valor_z; |
Naza00 | 0:6c94c5ac5e8c | 245 | } |
Naza00 | 0:6c94c5ac5e8c | 246 | |
Naza00 | 0:6c94c5ac5e8c | 247 | int adc(){ |
Naza00 | 0:6c94c5ac5e8c | 248 | valor_adc = voltaje_entrada.read_u16(); |
Naza00 | 0:6c94c5ac5e8c | 249 | in_analog = valor_adc * (3.3f / 65535.0f); |
Naza00 | 0:6c94c5ac5e8c | 250 | valor_analog = in_analog*10; |
Naza00 | 0:6c94c5ac5e8c | 251 | return valor_analog; |
Naza00 | 0:6c94c5ac5e8c | 252 | } |
Naza00 | 0:6c94c5ac5e8c | 253 | |
Naza00 | 0:6c94c5ac5e8c | 254 | int in_digital(){ |
Naza00 | 0:6c94c5ac5e8c | 255 | if(entrada_digital==1)valor_dig=1; |
Naza00 | 0:6c94c5ac5e8c | 256 | else valor_dig=0; |
Naza00 | 0:6c94c5ac5e8c | 257 | |
Naza00 | 0:6c94c5ac5e8c | 258 | return valor_dig; |
Naza00 | 0:6c94c5ac5e8c | 259 | } |
Naza00 | 0:6c94c5ac5e8c | 260 | |
Naza00 | 0:6c94c5ac5e8c | 261 | int lrc(){ |
Naza00 | 0:6c94c5ac5e8c | 262 | int inicio= '@'; |
Naza00 | 0:6c94c5ac5e8c | 263 | valor_lrc=0; |
Naza00 | 0:6c94c5ac5e8c | 264 | valor_lrc ^= inicio; |
Naza00 | 0:6c94c5ac5e8c | 265 | valor_lrc ^= orden; |
Naza00 | 0:6c94c5ac5e8c | 266 | valor_lrc ^= (a + 48); |
Naza00 | 0:6c94c5ac5e8c | 267 | valor_lrc ^= (j + 48); |
Naza00 | 0:6c94c5ac5e8c | 268 | |
Naza00 | 0:6c94c5ac5e8c | 269 | return valor_lrc; |
Naza00 | 0:6c94c5ac5e8c | 270 | } |