ESTE ES EL CODIGO QUE SI FUNCIONA A LA PERFECCION Y EL CUAL TRABAJARE EL 13/5 PARA RENDIR EL EXAMEN

Dependencies:   mbed tsi_sensor MMA8451Q

Committer:
tanofgennaro
Date:
Tue May 12 03:34:57 2020 +0000
Revision:
1:1768474cf36d
Parent:
0:5b043619ecb8
COMMIT1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tanofgennaro 0:5b043619ecb8 1 #include "mbed.h"
tanofgennaro 0:5b043619ecb8 2 #include "MMA8451Q.h"
tanofgennaro 0:5b043619ecb8 3 #define ON 0
tanofgennaro 0:5b043619ecb8 4 #define OFF 1
tanofgennaro 0:5b043619ecb8 5 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
tanofgennaro 0:5b043619ecb8 6 PinName const SDA = PTE25;
tanofgennaro 0:5b043619ecb8 7 PinName const SCL = PTE24;
tanofgennaro 0:5b043619ecb8 8 #elif defined (TARGET_KL05Z)
tanofgennaro 0:5b043619ecb8 9 PinName const SDA = PTB4;
tanofgennaro 0:5b043619ecb8 10 PinName const SCL = PTB3;
tanofgennaro 0:5b043619ecb8 11 #elif defined (TARGET_K20D50M)
tanofgennaro 0:5b043619ecb8 12 PinName const SDA = PTB1;
tanofgennaro 0:5b043619ecb8 13 PinName const SCL = PTB0;
tanofgennaro 0:5b043619ecb8 14 #else
tanofgennaro 0:5b043619ecb8 15 #error TARGET NOT DEFINED
tanofgennaro 0:5b043619ecb8 16 #endif
tanofgennaro 0:5b043619ecb8 17 #define MMA8451_I2C_ADDRESS (0x1d<<1)
tanofgennaro 0:5b043619ecb8 18 #include "tsi_sensor.h"
tanofgennaro 0:5b043619ecb8 19 /* This defines will be replaced by PinNames soon */
tanofgennaro 0:5b043619ecb8 20 //Esto también es prefabricado (COPIAR) **
tanofgennaro 0:5b043619ecb8 21 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
tanofgennaro 0:5b043619ecb8 22 #define ELEC0 9
tanofgennaro 0:5b043619ecb8 23 #define ELEC1 10
tanofgennaro 0:5b043619ecb8 24 #elif defined (TARGET_KL05Z)
tanofgennaro 0:5b043619ecb8 25 #define ELEC0 9
tanofgennaro 0:5b043619ecb8 26 #define ELEC1 8
tanofgennaro 0:5b043619ecb8 27 #else
tanofgennaro 0:5b043619ecb8 28 #error TARGET NOT DEFINED
tanofgennaro 0:5b043619ecb8 29 #endif
tanofgennaro 0:5b043619ecb8 30
tanofgennaro 0:5b043619ecb8 31 AnalogIn IN_DIG(PTB1);
tanofgennaro 0:5b043619ecb8 32 AnalogIn IN_ANA(PTB0);
tanofgennaro 0:5b043619ecb8 33 DigitalOut AZUL(LED3);
tanofgennaro 0:5b043619ecb8 34 int tiempo=0,tecla,ESTADO_LED;
tanofgennaro 0:5b043619ecb8 35 float porcentaje=0;
tanofgennaro 0:5b043619ecb8 36 Ticker contador;
tanofgennaro 0:5b043619ecb8 37 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
tanofgennaro 0:5b043619ecb8 38 //Definimos que el puerto serie se llama pc
tanofgennaro 0:5b043619ecb8 39 Serial pc(USBTX, USBRX);
tanofgennaro 0:5b043619ecb8 40 //Variable donde se guarda lo leido
tanofgennaro 0:5b043619ecb8 41 char c = '\0';
tanofgennaro 0:5b043619ecb8 42
tanofgennaro 0:5b043619ecb8 43 //bit usado como flag para procesar datos
tanofgennaro 0:5b043619ecb8 44 bool newdata = false; //Se pone en true cuando hay nuevos datos
tanofgennaro 0:5b043619ecb8 45 enum {INICIO,ORDEN,FIN,CALCULO,TRANSMICION};
tanofgennaro 0:5b043619ecb8 46 int ESTADO_GENERAL,Actuador,i=0,PROTOCOLO, x, y, z,ESTADO_TRANSMICION,digital=0,hab=0, analogico;
tanofgennaro 0:5b043619ecb8 47 int n,Xxor,Yxor,Zxor,Axor,Dxor;
tanofgennaro 0:5b043619ecb8 48 //Callback cuando se detecta una entrada
tanofgennaro 0:5b043619ecb8 49 void onCharReceived()
tanofgennaro 0:5b043619ecb8 50 {
tanofgennaro 0:5b043619ecb8 51 c = pc.getc();
tanofgennaro 0:5b043619ecb8 52 newdata = true;
tanofgennaro 0:5b043619ecb8 53 }
tanofgennaro 0:5b043619ecb8 54
tanofgennaro 0:5b043619ecb8 55 void TI()
tanofgennaro 0:5b043619ecb8 56 {
tanofgennaro 0:5b043619ecb8 57 if(tiempo>0)tiempo--;
tanofgennaro 0:5b043619ecb8 58 }
tanofgennaro 0:5b043619ecb8 59
tanofgennaro 0:5b043619ecb8 60 int tactil()
tanofgennaro 0:5b043619ecb8 61 {
tanofgennaro 0:5b043619ecb8 62 porcentaje = tsi.readPercentage(); //Comienza apagado y a medida que mueva el dedo cambia la salida PWM
tanofgennaro 0:5b043619ecb8 63 if(porcentaje<0.9&&porcentaje>=0.1)tecla=1;
tanofgennaro 0:5b043619ecb8 64 if(porcentaje==0)tecla=0;
tanofgennaro 0:5b043619ecb8 65 return tecla;
tanofgennaro 0:5b043619ecb8 66 }
tanofgennaro 0:5b043619ecb8 67 void LED_PAUSADO()
tanofgennaro 0:5b043619ecb8 68 {
tanofgennaro 0:5b043619ecb8 69 if(tiempo==0) {
tanofgennaro 0:5b043619ecb8 70 tiempo=250;
tanofgennaro 0:5b043619ecb8 71 AZUL=!AZUL;
tanofgennaro 0:5b043619ecb8 72
tanofgennaro 0:5b043619ecb8 73 }
tanofgennaro 0:5b043619ecb8 74
tanofgennaro 0:5b043619ecb8 75 }
tanofgennaro 0:5b043619ecb8 76 void LED_HABILITADO()
tanofgennaro 0:5b043619ecb8 77 {
tanofgennaro 0:5b043619ecb8 78 if(tiempo==0) {
tanofgennaro 0:5b043619ecb8 79 if(AZUL==OFF) {
tanofgennaro 0:5b043619ecb8 80 tiempo=200;
tanofgennaro 0:5b043619ecb8 81 AZUL=ON;
tanofgennaro 0:5b043619ecb8 82 } else {
tanofgennaro 0:5b043619ecb8 83 tiempo=1500;
tanofgennaro 0:5b043619ecb8 84 AZUL=OFF;
tanofgennaro 0:5b043619ecb8 85 }
tanofgennaro 0:5b043619ecb8 86
tanofgennaro 0:5b043619ecb8 87 }
tanofgennaro 0:5b043619ecb8 88 }
tanofgennaro 0:5b043619ecb8 89
tanofgennaro 0:5b043619ecb8 90 int antirebote()
tanofgennaro 0:5b043619ecb8 91 {
tanofgennaro 0:5b043619ecb8 92 if(IN_DIG<0.1f) {
tanofgennaro 0:5b043619ecb8 93 digital=0;
tanofgennaro 0:5b043619ecb8 94 hab=0;
tanofgennaro 0:5b043619ecb8 95 } else {
tanofgennaro 0:5b043619ecb8 96 hab=1;
tanofgennaro 0:5b043619ecb8 97 }
tanofgennaro 0:5b043619ecb8 98 if(IN_DIG>0.8f&&hab==1) {
tanofgennaro 0:5b043619ecb8 99 digital=1;
tanofgennaro 0:5b043619ecb8 100 }
tanofgennaro 0:5b043619ecb8 101 return digital;
tanofgennaro 0:5b043619ecb8 102 }
tanofgennaro 0:5b043619ecb8 103 int main(void)
tanofgennaro 0:5b043619ecb8 104 {
tanofgennaro 0:5b043619ecb8 105 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
tanofgennaro 0:5b043619ecb8 106
tanofgennaro 0:5b043619ecb8 107 contador.attach(&TI,0.001);
tanofgennaro 0:5b043619ecb8 108
tanofgennaro 0:5b043619ecb8 109 //Ejecutar onCharReceived por cada entrada por puerto
tanofgennaro 0:5b043619ecb8 110 pc.attach(&onCharReceived);
tanofgennaro 0:5b043619ecb8 111 while (true) {
tanofgennaro 1:1768474cf36d 112
tanofgennaro 0:5b043619ecb8 113 n=tactil();
tanofgennaro 0:5b043619ecb8 114 if(n==1) {
tanofgennaro 0:5b043619ecb8 115 ESTADO_TRANSMICION=1;
tanofgennaro 0:5b043619ecb8 116 LED_HABILITADO();
tanofgennaro 0:5b043619ecb8 117 } else {
tanofgennaro 0:5b043619ecb8 118 ESTADO_TRANSMICION=0;
tanofgennaro 0:5b043619ecb8 119 LED_PAUSADO();
tanofgennaro 0:5b043619ecb8 120 }
tanofgennaro 0:5b043619ecb8 121 if(newdata) {
tanofgennaro 0:5b043619ecb8 122 newdata = false;
tanofgennaro 1:1768474cf36d 123
tanofgennaro 0:5b043619ecb8 124 switch (ESTADO_GENERAL) {
tanofgennaro 0:5b043619ecb8 125 default:
tanofgennaro 0:5b043619ecb8 126 ESTADO_GENERAL=INICIO;
tanofgennaro 0:5b043619ecb8 127 break;
tanofgennaro 0:5b043619ecb8 128 case INICIO:
tanofgennaro 0:5b043619ecb8 129 if (c=='@') {
tanofgennaro 0:5b043619ecb8 130 ESTADO_GENERAL=ORDEN;
tanofgennaro 0:5b043619ecb8 131 break;
tanofgennaro 0:5b043619ecb8 132 } else {
tanofgennaro 1:1768474cf36d 133 c='\0';
tanofgennaro 0:5b043619ecb8 134 ESTADO_GENERAL = INICIO;
tanofgennaro 0:5b043619ecb8 135 break;
tanofgennaro 0:5b043619ecb8 136 }
tanofgennaro 0:5b043619ecb8 137 case ORDEN:
tanofgennaro 0:5b043619ecb8 138 if (c=='1') {
tanofgennaro 0:5b043619ecb8 139 ESTADO_GENERAL = FIN;
tanofgennaro 0:5b043619ecb8 140 PROTOCOLO = 1;
tanofgennaro 0:5b043619ecb8 141 break;
tanofgennaro 0:5b043619ecb8 142 }
tanofgennaro 0:5b043619ecb8 143 if (c=='2') {
tanofgennaro 0:5b043619ecb8 144 ESTADO_GENERAL = FIN;
tanofgennaro 0:5b043619ecb8 145 PROTOCOLO = 2;
tanofgennaro 0:5b043619ecb8 146 break;
tanofgennaro 0:5b043619ecb8 147 }
tanofgennaro 0:5b043619ecb8 148 if (c=='3') {
tanofgennaro 0:5b043619ecb8 149 ESTADO_GENERAL = FIN;
tanofgennaro 0:5b043619ecb8 150 PROTOCOLO = 3;
tanofgennaro 0:5b043619ecb8 151 break;
tanofgennaro 0:5b043619ecb8 152 }
tanofgennaro 0:5b043619ecb8 153 if (c=='4') {
tanofgennaro 0:5b043619ecb8 154 ESTADO_GENERAL = FIN;
tanofgennaro 0:5b043619ecb8 155 PROTOCOLO = 4;
tanofgennaro 0:5b043619ecb8 156 break;
tanofgennaro 0:5b043619ecb8 157 }
tanofgennaro 0:5b043619ecb8 158 if (c=='5') {
tanofgennaro 0:5b043619ecb8 159 ESTADO_GENERAL = FIN;
tanofgennaro 0:5b043619ecb8 160 PROTOCOLO = 5;
tanofgennaro 0:5b043619ecb8 161 break;
tanofgennaro 0:5b043619ecb8 162 } else {
tanofgennaro 1:1768474cf36d 163 c='\0';
tanofgennaro 0:5b043619ecb8 164 ESTADO_GENERAL = INICIO;
tanofgennaro 0:5b043619ecb8 165 break;
tanofgennaro 0:5b043619ecb8 166 }
tanofgennaro 0:5b043619ecb8 167 case FIN:
tanofgennaro 0:5b043619ecb8 168 if (c==')') {
tanofgennaro 1:1768474cf36d 169 ESTADO_GENERAL = INICIO;
tanofgennaro 0:5b043619ecb8 170 c='\0';
tanofgennaro 0:5b043619ecb8 171
tanofgennaro 0:5b043619ecb8 172 break;
tanofgennaro 0:5b043619ecb8 173 } else {
tanofgennaro 1:1768474cf36d 174 c='\0';
tanofgennaro 0:5b043619ecb8 175 PROTOCOLO = 0;
tanofgennaro 0:5b043619ecb8 176 ESTADO_GENERAL = INICIO;
tanofgennaro 0:5b043619ecb8 177 break;
tanofgennaro 0:5b043619ecb8 178 }
tanofgennaro 1:1768474cf36d 179
tanofgennaro 0:5b043619ecb8 180
tanofgennaro 1:1768474cf36d 181 }
tanofgennaro 1:1768474cf36d 182 }
tanofgennaro 1:1768474cf36d 183
tanofgennaro 1:1768474cf36d 184 if(PROTOCOLO!=0) {
tanofgennaro 1:1768474cf36d 185
tanofgennaro 0:5b043619ecb8 186 x = abs(acc.getAccX())*100;
tanofgennaro 0:5b043619ecb8 187 y = abs(acc.getAccY())*100;
tanofgennaro 0:5b043619ecb8 188 z = abs(acc.getAccZ())*100;
tanofgennaro 0:5b043619ecb8 189 analogico=IN_ANA*100;
tanofgennaro 0:5b043619ecb8 190 if(PROTOCOLO==1) {
tanofgennaro 0:5b043619ecb8 191 Xxor=1^x;
tanofgennaro 0:5b043619ecb8 192 }
tanofgennaro 0:5b043619ecb8 193 if(PROTOCOLO==2) {
tanofgennaro 0:5b043619ecb8 194 Yxor=2^y;
tanofgennaro 0:5b043619ecb8 195 }
tanofgennaro 0:5b043619ecb8 196 if(PROTOCOLO==3) {
tanofgennaro 0:5b043619ecb8 197 Zxor=3^z;
tanofgennaro 0:5b043619ecb8 198 }
tanofgennaro 0:5b043619ecb8 199 if(PROTOCOLO==4) {
tanofgennaro 0:5b043619ecb8 200 Axor=4^analogico;
tanofgennaro 0:5b043619ecb8 201 }
tanofgennaro 0:5b043619ecb8 202 if(PROTOCOLO==5) {
tanofgennaro 0:5b043619ecb8 203 antirebote();
tanofgennaro 0:5b043619ecb8 204 Dxor=5^digital;
tanofgennaro 0:5b043619ecb8 205 }
tanofgennaro 1:1768474cf36d 206
tanofgennaro 0:5b043619ecb8 207 if(ESTADO_TRANSMICION==1) {
tanofgennaro 0:5b043619ecb8 208 if(PROTOCOLO==1) {
tanofgennaro 0:5b043619ecb8 209 printf("@1%d%x)\n",x,Xxor);
tanofgennaro 0:5b043619ecb8 210 }
tanofgennaro 0:5b043619ecb8 211 if(PROTOCOLO==2) {
tanofgennaro 0:5b043619ecb8 212 printf("@2%d%x)\n",y,Yxor);
tanofgennaro 0:5b043619ecb8 213 }
tanofgennaro 0:5b043619ecb8 214 if(PROTOCOLO==3) {
tanofgennaro 0:5b043619ecb8 215 printf("@3%d%x)\n",z,Zxor);
tanofgennaro 0:5b043619ecb8 216 }
tanofgennaro 0:5b043619ecb8 217 if(PROTOCOLO==4) {
tanofgennaro 0:5b043619ecb8 218 printf("@4%d%x)\n",analogico,Axor);
tanofgennaro 0:5b043619ecb8 219 }
tanofgennaro 0:5b043619ecb8 220 if(PROTOCOLO==5) {
tanofgennaro 0:5b043619ecb8 221 antirebote();
tanofgennaro 0:5b043619ecb8 222 printf("@5%d%x)\n",digital,Dxor);
tanofgennaro 0:5b043619ecb8 223 }
tanofgennaro 0:5b043619ecb8 224 }
tanofgennaro 1:1768474cf36d 225
tanofgennaro 1:1768474cf36d 226
tanofgennaro 0:5b043619ecb8 227 }
tanofgennaro 1:1768474cf36d 228 PROTOCOLO=0;
tanofgennaro 1:1768474cf36d 229
tanofgennaro 0:5b043619ecb8 230 }
tanofgennaro 0:5b043619ecb8 231 }