Proyecto completo del trabajo practico de Embebidos

Dependencies:   mbed tsi_sensor MMA8451Q

Committer:
AlvaAcosta
Date:
Wed Oct 21 08:22:05 2020 +0000
Revision:
0:7cc43619dcac
Trabajo Practico de embebidos mesa especial octubre

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AlvaAcosta 0:7cc43619dcac 1 #include "mbed.h"
AlvaAcosta 0:7cc43619dcac 2 #include "MMA8451Q.h"
AlvaAcosta 0:7cc43619dcac 3 #include "tsi_sensor.h"
AlvaAcosta 0:7cc43619dcac 4
AlvaAcosta 0:7cc43619dcac 5 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
AlvaAcosta 0:7cc43619dcac 6 #define ELEC0 9
AlvaAcosta 0:7cc43619dcac 7 #define ELEC1 10
AlvaAcosta 0:7cc43619dcac 8 #else
AlvaAcosta 0:7cc43619dcac 9 #error TARGET NOT DEFINED
AlvaAcosta 0:7cc43619dcac 10 #endif
AlvaAcosta 0:7cc43619dcac 11
AlvaAcosta 0:7cc43619dcac 12 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
AlvaAcosta 0:7cc43619dcac 13 PinName const SDA = PTE25;
AlvaAcosta 0:7cc43619dcac 14 PinName const SCL = PTE24;
AlvaAcosta 0:7cc43619dcac 15 #else
AlvaAcosta 0:7cc43619dcac 16 #error TARGET NOT DEFINED
AlvaAcosta 0:7cc43619dcac 17 #endif
AlvaAcosta 0:7cc43619dcac 18
AlvaAcosta 0:7cc43619dcac 19 #define MMA8451_I2C_ADDRESS (0x1d<<1)
AlvaAcosta 0:7cc43619dcac 20
AlvaAcosta 0:7cc43619dcac 21 Serial pc(USBTX,USBRX);
AlvaAcosta 0:7cc43619dcac 22 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
AlvaAcosta 0:7cc43619dcac 23 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
AlvaAcosta 0:7cc43619dcac 24
AlvaAcosta 0:7cc43619dcac 25 enum{
AlvaAcosta 0:7cc43619dcac 26 INICIO,
AlvaAcosta 0:7cc43619dcac 27 ORDEN,
AlvaAcosta 0:7cc43619dcac 28 FIN
AlvaAcosta 0:7cc43619dcac 29 };
AlvaAcosta 0:7cc43619dcac 30
AlvaAcosta 0:7cc43619dcac 31 enum{
AlvaAcosta 0:7cc43619dcac 32 RESP_X,
AlvaAcosta 0:7cc43619dcac 33 RESP_Y,
AlvaAcosta 0:7cc43619dcac 34 RESP_Z,
AlvaAcosta 0:7cc43619dcac 35 RESP_A,
AlvaAcosta 0:7cc43619dcac 36 RESP_D
AlvaAcosta 0:7cc43619dcac 37 };
AlvaAcosta 0:7cc43619dcac 38
AlvaAcosta 0:7cc43619dcac 39 enum{
AlvaAcosta 0:7cc43619dcac 40 ROJO,
AlvaAcosta 0:7cc43619dcac 41 VERDE,
AlvaAcosta 0:7cc43619dcac 42 AZUL
AlvaAcosta 0:7cc43619dcac 43 };
AlvaAcosta 0:7cc43619dcac 44
AlvaAcosta 0:7cc43619dcac 45 enum{
AlvaAcosta 0:7cc43619dcac 46 HABILITADO,
AlvaAcosta 0:7cc43619dcac 47 DESHABILITADO
AlvaAcosta 0:7cc43619dcac 48 };
AlvaAcosta 0:7cc43619dcac 49
AlvaAcosta 0:7cc43619dcac 50 enum{
AlvaAcosta 0:7cc43619dcac 51 APAGADO,
AlvaAcosta 0:7cc43619dcac 52 ENCENDIDO
AlvaAcosta 0:7cc43619dcac 53 };
AlvaAcosta 0:7cc43619dcac 54
AlvaAcosta 0:7cc43619dcac 55 AnalogIn Pote(A0);
AlvaAcosta 0:7cc43619dcac 56 DigitalIn Puls(D2);
AlvaAcosta 0:7cc43619dcac 57
AlvaAcosta 0:7cc43619dcac 58 DigitalOut Led_Ext(D3);
AlvaAcosta 0:7cc43619dcac 59 DigitalOut Led_R(LED_RED);
AlvaAcosta 0:7cc43619dcac 60 DigitalOut Led_V(LED_GREEN);
AlvaAcosta 0:7cc43619dcac 61 DigitalOut Led_A(LED_BLUE);
AlvaAcosta 0:7cc43619dcac 62
AlvaAcosta 0:7cc43619dcac 63 unsigned int valor_ADC = 0, valor_ADC_xor = 0, Led_tout = 0, a_xor = 0;
AlvaAcosta 0:7cc43619dcac 64 int a = 0, esp = 0, habilitacion = 0, j = 0, i = 0, p = 0, x = 0, y = 0, z = 0, X_xor = 0, Y_xor = 0, Z_xor = 0, A_xor = 0, D_xor = 0;
AlvaAcosta 0:7cc43619dcac 65 float voltaje = 0, valor_tsi = 0;
AlvaAcosta 0:7cc43619dcac 66 char byte = '\0', c = '\0';
AlvaAcosta 0:7cc43619dcac 67 char Estado_Emision, Estado_Respuesta, Estado_Color, Estado_Led, Estado_tsi = DESHABILITADO;
AlvaAcosta 0:7cc43619dcac 68 bool newdata = false;
AlvaAcosta 0:7cc43619dcac 69
AlvaAcosta 0:7cc43619dcac 70 void Emision();
AlvaAcosta 0:7cc43619dcac 71 void Respuesta();
AlvaAcosta 0:7cc43619dcac 72 void ADC();
AlvaAcosta 0:7cc43619dcac 73 void Acelerometro();
AlvaAcosta 0:7cc43619dcac 74 void Led_RGB();
AlvaAcosta 0:7cc43619dcac 75 void Led_Habilitado();
AlvaAcosta 0:7cc43619dcac 76 void Led_Deshabilitado();
AlvaAcosta 0:7cc43619dcac 77 void init_mcu();
AlvaAcosta 0:7cc43619dcac 78 void contador();
AlvaAcosta 0:7cc43619dcac 79 int Pulsador();
AlvaAcosta 0:7cc43619dcac 80
AlvaAcosta 0:7cc43619dcac 81 Ticker timer;
AlvaAcosta 0:7cc43619dcac 82
AlvaAcosta 0:7cc43619dcac 83 void Byte_Reciver(){
AlvaAcosta 0:7cc43619dcac 84
AlvaAcosta 0:7cc43619dcac 85 byte = pc.getc();
AlvaAcosta 0:7cc43619dcac 86 newdata = true;
AlvaAcosta 0:7cc43619dcac 87 }
AlvaAcosta 0:7cc43619dcac 88
AlvaAcosta 0:7cc43619dcac 89 int main (void){
AlvaAcosta 0:7cc43619dcac 90
AlvaAcosta 0:7cc43619dcac 91 init_mcu();
AlvaAcosta 0:7cc43619dcac 92 pc.attach(&Byte_Reciver);
AlvaAcosta 0:7cc43619dcac 93
AlvaAcosta 0:7cc43619dcac 94 while(true){
AlvaAcosta 0:7cc43619dcac 95
AlvaAcosta 0:7cc43619dcac 96 valor_tsi = tsi.readPercentage();
AlvaAcosta 0:7cc43619dcac 97
AlvaAcosta 0:7cc43619dcac 98 switch(Estado_tsi){
AlvaAcosta 0:7cc43619dcac 99
AlvaAcosta 0:7cc43619dcac 100 case DESHABILITADO:
AlvaAcosta 0:7cc43619dcac 101 Led_Deshabilitado();
AlvaAcosta 0:7cc43619dcac 102 j = 0;
AlvaAcosta 0:7cc43619dcac 103 if(valor_tsi > 0 && j == 0){
AlvaAcosta 0:7cc43619dcac 104 Estado_tsi = HABILITADO;
AlvaAcosta 0:7cc43619dcac 105 valor_tsi = 0;
AlvaAcosta 0:7cc43619dcac 106 }
AlvaAcosta 0:7cc43619dcac 107 break;
AlvaAcosta 0:7cc43619dcac 108
AlvaAcosta 0:7cc43619dcac 109 case HABILITADO:
AlvaAcosta 0:7cc43619dcac 110 Led_Habilitado();
AlvaAcosta 0:7cc43619dcac 111 j = 1;
AlvaAcosta 0:7cc43619dcac 112 if(newdata){
AlvaAcosta 0:7cc43619dcac 113 Emision();
AlvaAcosta 0:7cc43619dcac 114 }
AlvaAcosta 0:7cc43619dcac 115
AlvaAcosta 0:7cc43619dcac 116 if(valor_tsi > 0 && j == 1){
AlvaAcosta 0:7cc43619dcac 117 Estado_tsi = DESHABILITADO;
AlvaAcosta 0:7cc43619dcac 118 valor_tsi = 0;
AlvaAcosta 0:7cc43619dcac 119 }
AlvaAcosta 0:7cc43619dcac 120 break;
AlvaAcosta 0:7cc43619dcac 121 }
AlvaAcosta 0:7cc43619dcac 122
AlvaAcosta 0:7cc43619dcac 123 Led_RGB();
AlvaAcosta 0:7cc43619dcac 124
AlvaAcosta 0:7cc43619dcac 125 }
AlvaAcosta 0:7cc43619dcac 126
AlvaAcosta 0:7cc43619dcac 127 }
AlvaAcosta 0:7cc43619dcac 128
AlvaAcosta 0:7cc43619dcac 129 void Emision(){
AlvaAcosta 0:7cc43619dcac 130
AlvaAcosta 0:7cc43619dcac 131 switch(Estado_Emision){
AlvaAcosta 0:7cc43619dcac 132
AlvaAcosta 0:7cc43619dcac 133 case INICIO:
AlvaAcosta 0:7cc43619dcac 134 if(byte == 64){
AlvaAcosta 0:7cc43619dcac 135 Estado_Emision = ORDEN;
AlvaAcosta 0:7cc43619dcac 136 newdata = false;
AlvaAcosta 0:7cc43619dcac 137 }else{
AlvaAcosta 0:7cc43619dcac 138 Estado_Emision = INICIO;
AlvaAcosta 0:7cc43619dcac 139 }
AlvaAcosta 0:7cc43619dcac 140 break;
AlvaAcosta 0:7cc43619dcac 141
AlvaAcosta 0:7cc43619dcac 142 case ORDEN:
AlvaAcosta 0:7cc43619dcac 143 if(byte >= 49 && byte <= 53){
AlvaAcosta 0:7cc43619dcac 144 c = byte;
AlvaAcosta 0:7cc43619dcac 145 Estado_Emision = FIN;
AlvaAcosta 0:7cc43619dcac 146 newdata = false;
AlvaAcosta 0:7cc43619dcac 147 }else{
AlvaAcosta 0:7cc43619dcac 148 c = '\0';
AlvaAcosta 0:7cc43619dcac 149 Estado_Emision = ORDEN;
AlvaAcosta 0:7cc43619dcac 150 newdata = false;
AlvaAcosta 0:7cc43619dcac 151 }
AlvaAcosta 0:7cc43619dcac 152 break;
AlvaAcosta 0:7cc43619dcac 153
AlvaAcosta 0:7cc43619dcac 154 case FIN:
AlvaAcosta 0:7cc43619dcac 155 if(byte == 35){
AlvaAcosta 0:7cc43619dcac 156 Estado_Emision = INICIO;
AlvaAcosta 0:7cc43619dcac 157 Respuesta();
AlvaAcosta 0:7cc43619dcac 158 }else{
AlvaAcosta 0:7cc43619dcac 159 c = '\0';
AlvaAcosta 0:7cc43619dcac 160 Estado_Emision = FIN;
AlvaAcosta 0:7cc43619dcac 161 newdata = false;
AlvaAcosta 0:7cc43619dcac 162 }
AlvaAcosta 0:7cc43619dcac 163 break;
AlvaAcosta 0:7cc43619dcac 164 }
AlvaAcosta 0:7cc43619dcac 165
AlvaAcosta 0:7cc43619dcac 166 }
AlvaAcosta 0:7cc43619dcac 167
AlvaAcosta 0:7cc43619dcac 168 void Respuesta(){
AlvaAcosta 0:7cc43619dcac 169
AlvaAcosta 0:7cc43619dcac 170 ADC();
AlvaAcosta 0:7cc43619dcac 171 Acelerometro();
AlvaAcosta 0:7cc43619dcac 172 Pulsador();
AlvaAcosta 0:7cc43619dcac 173
AlvaAcosta 0:7cc43619dcac 174
AlvaAcosta 0:7cc43619dcac 175 if(c == 49) Estado_Respuesta = RESP_X;
AlvaAcosta 0:7cc43619dcac 176 if(c == 50) Estado_Respuesta = RESP_Y;
AlvaAcosta 0:7cc43619dcac 177 if(c == 51) Estado_Respuesta = RESP_Z;
AlvaAcosta 0:7cc43619dcac 178 if(c == 52) Estado_Respuesta = RESP_A;
AlvaAcosta 0:7cc43619dcac 179 if(c == 53) Estado_Respuesta = RESP_D;
AlvaAcosta 0:7cc43619dcac 180
AlvaAcosta 0:7cc43619dcac 181
AlvaAcosta 0:7cc43619dcac 182 switch(Estado_Respuesta){
AlvaAcosta 0:7cc43619dcac 183
AlvaAcosta 0:7cc43619dcac 184 case RESP_X:
AlvaAcosta 0:7cc43619dcac 185 printf(" @ 1 %d %d #\n", x, X_xor );
AlvaAcosta 0:7cc43619dcac 186 break;
AlvaAcosta 0:7cc43619dcac 187
AlvaAcosta 0:7cc43619dcac 188 case RESP_Y:
AlvaAcosta 0:7cc43619dcac 189 printf(" @ 2 %d %d #\n", y, Y_xor);
AlvaAcosta 0:7cc43619dcac 190 break;
AlvaAcosta 0:7cc43619dcac 191
AlvaAcosta 0:7cc43619dcac 192 case RESP_Z:
AlvaAcosta 0:7cc43619dcac 193 printf(" @ 3 %d %d #\n", z, Z_xor);
AlvaAcosta 0:7cc43619dcac 194 break;
AlvaAcosta 0:7cc43619dcac 195
AlvaAcosta 0:7cc43619dcac 196 case RESP_A:
AlvaAcosta 0:7cc43619dcac 197 printf(" @ 4 %d %d #\n", a, a_xor);
AlvaAcosta 0:7cc43619dcac 198 break;
AlvaAcosta 0:7cc43619dcac 199
AlvaAcosta 0:7cc43619dcac 200 case RESP_D:
AlvaAcosta 0:7cc43619dcac 201 printf(" @ 5 %d %d #\n", p, 5 ^ p);
AlvaAcosta 0:7cc43619dcac 202 break;
AlvaAcosta 0:7cc43619dcac 203 }
AlvaAcosta 0:7cc43619dcac 204
AlvaAcosta 0:7cc43619dcac 205 }
AlvaAcosta 0:7cc43619dcac 206
AlvaAcosta 0:7cc43619dcac 207 void Led_RGB(){
AlvaAcosta 0:7cc43619dcac 208
AlvaAcosta 0:7cc43619dcac 209 ADC();
AlvaAcosta 0:7cc43619dcac 210
AlvaAcosta 0:7cc43619dcac 211 if(voltaje <= 1.5) Estado_Color = ROJO;
AlvaAcosta 0:7cc43619dcac 212 if(voltaje > 1.5 && voltaje <= 2.5 ) Estado_Color = VERDE;
AlvaAcosta 0:7cc43619dcac 213 if(voltaje > 2.5) Estado_Color = AZUL;
AlvaAcosta 0:7cc43619dcac 214
AlvaAcosta 0:7cc43619dcac 215 switch(Estado_Color){
AlvaAcosta 0:7cc43619dcac 216
AlvaAcosta 0:7cc43619dcac 217 case ROJO:
AlvaAcosta 0:7cc43619dcac 218 Led_R = 0;
AlvaAcosta 0:7cc43619dcac 219 Led_V = 1;
AlvaAcosta 0:7cc43619dcac 220 Led_A = 1;
AlvaAcosta 0:7cc43619dcac 221 break;
AlvaAcosta 0:7cc43619dcac 222
AlvaAcosta 0:7cc43619dcac 223 case VERDE:
AlvaAcosta 0:7cc43619dcac 224 Led_R = 1;
AlvaAcosta 0:7cc43619dcac 225 Led_V = 0;
AlvaAcosta 0:7cc43619dcac 226 Led_A = 1;
AlvaAcosta 0:7cc43619dcac 227
AlvaAcosta 0:7cc43619dcac 228 break;
AlvaAcosta 0:7cc43619dcac 229
AlvaAcosta 0:7cc43619dcac 230 case AZUL:
AlvaAcosta 0:7cc43619dcac 231 Led_R = 1;
AlvaAcosta 0:7cc43619dcac 232 Led_V = 1;
AlvaAcosta 0:7cc43619dcac 233 Led_A = 0;
AlvaAcosta 0:7cc43619dcac 234
AlvaAcosta 0:7cc43619dcac 235 break;
AlvaAcosta 0:7cc43619dcac 236
AlvaAcosta 0:7cc43619dcac 237 }
AlvaAcosta 0:7cc43619dcac 238
AlvaAcosta 0:7cc43619dcac 239 }
AlvaAcosta 0:7cc43619dcac 240
AlvaAcosta 0:7cc43619dcac 241 void Led_Habilitado(){
AlvaAcosta 0:7cc43619dcac 242
AlvaAcosta 0:7cc43619dcac 243 switch(Estado_Led){
AlvaAcosta 0:7cc43619dcac 244
AlvaAcosta 0:7cc43619dcac 245 case APAGADO:
AlvaAcosta 0:7cc43619dcac 246 Led_Ext = 0;
AlvaAcosta 0:7cc43619dcac 247 if(Led_tout == 0){
AlvaAcosta 0:7cc43619dcac 248 Estado_Led = ENCENDIDO;
AlvaAcosta 0:7cc43619dcac 249 Led_tout = 20;
AlvaAcosta 0:7cc43619dcac 250 }
AlvaAcosta 0:7cc43619dcac 251
AlvaAcosta 0:7cc43619dcac 252 break;
AlvaAcosta 0:7cc43619dcac 253
AlvaAcosta 0:7cc43619dcac 254 case ENCENDIDO:
AlvaAcosta 0:7cc43619dcac 255 Led_Ext = 1;
AlvaAcosta 0:7cc43619dcac 256 if(Led_tout == 0){
AlvaAcosta 0:7cc43619dcac 257 i++;
AlvaAcosta 0:7cc43619dcac 258 Estado_Led = APAGADO;
AlvaAcosta 0:7cc43619dcac 259 if(i==3){
AlvaAcosta 0:7cc43619dcac 260 Led_tout = 150;
AlvaAcosta 0:7cc43619dcac 261 i=0;
AlvaAcosta 0:7cc43619dcac 262 }
AlvaAcosta 0:7cc43619dcac 263 else Led_tout = 20;
AlvaAcosta 0:7cc43619dcac 264 }
AlvaAcosta 0:7cc43619dcac 265
AlvaAcosta 0:7cc43619dcac 266 break;
AlvaAcosta 0:7cc43619dcac 267 }
AlvaAcosta 0:7cc43619dcac 268
AlvaAcosta 0:7cc43619dcac 269 }
AlvaAcosta 0:7cc43619dcac 270
AlvaAcosta 0:7cc43619dcac 271 void Led_Deshabilitado(){
AlvaAcosta 0:7cc43619dcac 272
AlvaAcosta 0:7cc43619dcac 273 switch(Estado_Led){
AlvaAcosta 0:7cc43619dcac 274
AlvaAcosta 0:7cc43619dcac 275 case APAGADO:
AlvaAcosta 0:7cc43619dcac 276 Led_Ext = 0;
AlvaAcosta 0:7cc43619dcac 277 if(Led_tout == 0){
AlvaAcosta 0:7cc43619dcac 278 Estado_Led = ENCENDIDO;
AlvaAcosta 0:7cc43619dcac 279 Led_tout = 50;
AlvaAcosta 0:7cc43619dcac 280 }
AlvaAcosta 0:7cc43619dcac 281
AlvaAcosta 0:7cc43619dcac 282 break;
AlvaAcosta 0:7cc43619dcac 283
AlvaAcosta 0:7cc43619dcac 284 case ENCENDIDO:
AlvaAcosta 0:7cc43619dcac 285 Led_Ext = 1;
AlvaAcosta 0:7cc43619dcac 286 if(Led_tout == 0){
AlvaAcosta 0:7cc43619dcac 287 Estado_Led = APAGADO;
AlvaAcosta 0:7cc43619dcac 288 Led_tout = 100;
AlvaAcosta 0:7cc43619dcac 289 }
AlvaAcosta 0:7cc43619dcac 290
AlvaAcosta 0:7cc43619dcac 291 break;
AlvaAcosta 0:7cc43619dcac 292 }
AlvaAcosta 0:7cc43619dcac 293
AlvaAcosta 0:7cc43619dcac 294 }
AlvaAcosta 0:7cc43619dcac 295
AlvaAcosta 0:7cc43619dcac 296
AlvaAcosta 0:7cc43619dcac 297
AlvaAcosta 0:7cc43619dcac 298 int Pulsador(){
AlvaAcosta 0:7cc43619dcac 299 if(Puls == 0)p = 0;
AlvaAcosta 0:7cc43619dcac 300 if(Puls == 1)p = 1;
AlvaAcosta 0:7cc43619dcac 301 return p;
AlvaAcosta 0:7cc43619dcac 302 }
AlvaAcosta 0:7cc43619dcac 303
AlvaAcosta 0:7cc43619dcac 304 void ADC(){
AlvaAcosta 0:7cc43619dcac 305 valor_ADC = Pote.read_u16();
AlvaAcosta 0:7cc43619dcac 306 voltaje = valor_ADC * 3.3 / 65535;
AlvaAcosta 0:7cc43619dcac 307 a = valor_ADC * 100 / 65535;
AlvaAcosta 0:7cc43619dcac 308
AlvaAcosta 0:7cc43619dcac 309 valor_ADC_xor = 4 ^ valor_ADC;
AlvaAcosta 0:7cc43619dcac 310 a_xor = 4 ^ a;
AlvaAcosta 0:7cc43619dcac 311 }
AlvaAcosta 0:7cc43619dcac 312
AlvaAcosta 0:7cc43619dcac 313 void Acelerometro(){
AlvaAcosta 0:7cc43619dcac 314 x = abs(acc.getAccX())*100;
AlvaAcosta 0:7cc43619dcac 315 y = abs(acc.getAccY())*100;
AlvaAcosta 0:7cc43619dcac 316 z = abs(acc.getAccZ())*100;
AlvaAcosta 0:7cc43619dcac 317
AlvaAcosta 0:7cc43619dcac 318 X_xor = 1 ^ x;
AlvaAcosta 0:7cc43619dcac 319 Y_xor = 2 ^ y;
AlvaAcosta 0:7cc43619dcac 320 Z_xor = 3 ^ z;
AlvaAcosta 0:7cc43619dcac 321
AlvaAcosta 0:7cc43619dcac 322 }
AlvaAcosta 0:7cc43619dcac 323
AlvaAcosta 0:7cc43619dcac 324 void Contador(){
AlvaAcosta 0:7cc43619dcac 325 if(Led_tout != 0){
AlvaAcosta 0:7cc43619dcac 326 Led_tout--;
AlvaAcosta 0:7cc43619dcac 327 }
AlvaAcosta 0:7cc43619dcac 328 }
AlvaAcosta 0:7cc43619dcac 329
AlvaAcosta 0:7cc43619dcac 330 void init_mcu(){
AlvaAcosta 0:7cc43619dcac 331 timer.attach(&Contador, 0.01);
AlvaAcosta 0:7cc43619dcac 332 }