Programa para terminar carrera-Mayo 2020
Dependencies: mbed tsi_sensor MMA8451Q
main.cpp@0:9eab7a2e3a75, 2020-05-12 (annotated)
- Committer:
- GabboEsc
- Date:
- Tue May 12 12:26:45 2020 +0000
- Revision:
- 0:9eab7a2e3a75
dcodevila@pioix.edu.ar; ebrizzio@pioix.edu.ar
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GabboEsc | 0:9eab7a2e3a75 | 1 | #include "mbed.h" |
GabboEsc | 0:9eab7a2e3a75 | 2 | #include "tsi_sensor.h" |
GabboEsc | 0:9eab7a2e3a75 | 3 | #include "MMA8451Q.h" |
GabboEsc | 0:9eab7a2e3a75 | 4 | |
GabboEsc | 0:9eab7a2e3a75 | 5 | //Tsi... |
GabboEsc | 0:9eab7a2e3a75 | 6 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
GabboEsc | 0:9eab7a2e3a75 | 7 | #define ELEC0 9 |
GabboEsc | 0:9eab7a2e3a75 | 8 | #define ELEC1 10 |
GabboEsc | 0:9eab7a2e3a75 | 9 | #else |
GabboEsc | 0:9eab7a2e3a75 | 10 | #error TARGET NOT DEFINED |
GabboEsc | 0:9eab7a2e3a75 | 11 | #endif |
GabboEsc | 0:9eab7a2e3a75 | 12 | //Aceleromtetro... |
GabboEsc | 0:9eab7a2e3a75 | 13 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
GabboEsc | 0:9eab7a2e3a75 | 14 | PinName const SDA = PTE25; |
GabboEsc | 0:9eab7a2e3a75 | 15 | PinName const SCL = PTE24; |
GabboEsc | 0:9eab7a2e3a75 | 16 | #else |
GabboEsc | 0:9eab7a2e3a75 | 17 | #error TARGET NOT DEFINED |
GabboEsc | 0:9eab7a2e3a75 | 18 | #endif |
GabboEsc | 0:9eab7a2e3a75 | 19 | |
GabboEsc | 0:9eab7a2e3a75 | 20 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
GabboEsc | 0:9eab7a2e3a75 | 21 | |
GabboEsc | 0:9eab7a2e3a75 | 22 | DigitalOut LR (LED_RED, 1); |
GabboEsc | 0:9eab7a2e3a75 | 23 | DigitalOut LV (LED_GREEN, 1); |
GabboEsc | 0:9eab7a2e3a75 | 24 | DigitalOut LA (LED_BLUE, 1); |
GabboEsc | 0:9eab7a2e3a75 | 25 | DigitalIn DIG(PTB1); |
GabboEsc | 0:9eab7a2e3a75 | 26 | AnalogIn AN (A0); |
GabboEsc | 0:9eab7a2e3a75 | 27 | |
GabboEsc | 0:9eab7a2e3a75 | 28 | enum estados_Me_Inicio {LON, LOFF, HAB}; |
GabboEsc | 0:9eab7a2e3a75 | 29 | enum estados_Me_Inicio Inicio_Me_estado = LON; |
GabboEsc | 0:9eab7a2e3a75 | 30 | enum estado_me_recepcion {ESPERO, INICIO, ORDEN, FIN}; |
GabboEsc | 0:9eab7a2e3a75 | 31 | enum estado_me_recepcion recepcion_me_estado = ESPERO; |
GabboEsc | 0:9eab7a2e3a75 | 32 | enum estado_me_respuesta {RESPERA, RINICIO, RORDEN, ROX, ROY, ROZ, ROV, ROS1, ROS0, LRC, RFIN}; |
GabboEsc | 0:9eab7a2e3a75 | 33 | enum estado_me_respuesta respuesta_me_estado = RESPERA; |
GabboEsc | 0:9eab7a2e3a75 | 34 | |
GabboEsc | 0:9eab7a2e3a75 | 35 | char c = '\0', o = '\0'; |
GabboEsc | 0:9eab7a2e3a75 | 36 | unsigned char lrc = 0x0b; |
GabboEsc | 0:9eab7a2e3a75 | 37 | bool newdata = false; |
GabboEsc | 0:9eab7a2e3a75 | 38 | int t = 0, tr = 0, Vi = 0, Resp = 0; |
GabboEsc | 0:9eab7a2e3a75 | 39 | int Xd, Xu, Yd, Yu, Zd, Zu, Vd, Vu, s = 0; |
GabboEsc | 0:9eab7a2e3a75 | 40 | float Tsi = 0.0; |
GabboEsc | 0:9eab7a2e3a75 | 41 | |
GabboEsc | 0:9eab7a2e3a75 | 42 | TSIAnalogSlider tsi(ELEC0, ELEC1, 40); |
GabboEsc | 0:9eab7a2e3a75 | 43 | Serial pc(USBTX, USBRX); |
GabboEsc | 0:9eab7a2e3a75 | 44 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
GabboEsc | 0:9eab7a2e3a75 | 45 | |
GabboEsc | 0:9eab7a2e3a75 | 46 | void Me_Inicio(void); |
GabboEsc | 0:9eab7a2e3a75 | 47 | void cuenta(void); |
GabboEsc | 0:9eab7a2e3a75 | 48 | void Me_Recepcion(void); |
GabboEsc | 0:9eab7a2e3a75 | 49 | void Me_Respuesta(void); |
GabboEsc | 0:9eab7a2e3a75 | 50 | |
GabboEsc | 0:9eab7a2e3a75 | 51 | void onCharReceived(){ //Funcion en la que recibe el caracter... |
GabboEsc | 0:9eab7a2e3a75 | 52 | c = pc.getc(); |
GabboEsc | 0:9eab7a2e3a75 | 53 | newdata = true; |
GabboEsc | 0:9eab7a2e3a75 | 54 | if(c >= 97 && c <= 122){ |
GabboEsc | 0:9eab7a2e3a75 | 55 | c -= 32; |
GabboEsc | 0:9eab7a2e3a75 | 56 | } |
GabboEsc | 0:9eab7a2e3a75 | 57 | } |
GabboEsc | 0:9eab7a2e3a75 | 58 | |
GabboEsc | 0:9eab7a2e3a75 | 59 | void cuenta(){ //Funcion para el contador del programa... |
GabboEsc | 0:9eab7a2e3a75 | 60 | if (t != 0) |
GabboEsc | 0:9eab7a2e3a75 | 61 | t--; |
GabboEsc | 0:9eab7a2e3a75 | 62 | if(tr != 0) |
GabboEsc | 0:9eab7a2e3a75 | 63 | tr--; |
GabboEsc | 0:9eab7a2e3a75 | 64 | Tsi = tsi.readPercentage(); |
GabboEsc | 0:9eab7a2e3a75 | 65 | } |
GabboEsc | 0:9eab7a2e3a75 | 66 | |
GabboEsc | 0:9eab7a2e3a75 | 67 | void datos(){ |
GabboEsc | 0:9eab7a2e3a75 | 68 | |
GabboEsc | 0:9eab7a2e3a75 | 69 | |
GabboEsc | 0:9eab7a2e3a75 | 70 | |
GabboEsc | 0:9eab7a2e3a75 | 71 | } |
GabboEsc | 0:9eab7a2e3a75 | 72 | |
GabboEsc | 0:9eab7a2e3a75 | 73 | Ticker tiempo; |
GabboEsc | 0:9eab7a2e3a75 | 74 | |
GabboEsc | 0:9eab7a2e3a75 | 75 | int main(void) { |
GabboEsc | 0:9eab7a2e3a75 | 76 | |
GabboEsc | 0:9eab7a2e3a75 | 77 | tiempo.attach(&cuenta, 0.01); |
GabboEsc | 0:9eab7a2e3a75 | 78 | pc.attach(&onCharReceived); |
GabboEsc | 0:9eab7a2e3a75 | 79 | |
GabboEsc | 0:9eab7a2e3a75 | 80 | while (true) { |
GabboEsc | 0:9eab7a2e3a75 | 81 | if(newdata){ |
GabboEsc | 0:9eab7a2e3a75 | 82 | Me_Recepcion(); |
GabboEsc | 0:9eab7a2e3a75 | 83 | } |
GabboEsc | 0:9eab7a2e3a75 | 84 | Me_Inicio(); |
GabboEsc | 0:9eab7a2e3a75 | 85 | Me_Respuesta(); |
GabboEsc | 0:9eab7a2e3a75 | 86 | datos(); |
GabboEsc | 0:9eab7a2e3a75 | 87 | } |
GabboEsc | 0:9eab7a2e3a75 | 88 | } |
GabboEsc | 0:9eab7a2e3a75 | 89 | |
GabboEsc | 0:9eab7a2e3a75 | 90 | |
GabboEsc | 0:9eab7a2e3a75 | 91 | void Me_Inicio(){ |
GabboEsc | 0:9eab7a2e3a75 | 92 | switch(Inicio_Me_estado){ |
GabboEsc | 0:9eab7a2e3a75 | 93 | case LON: |
GabboEsc | 0:9eab7a2e3a75 | 94 | LR = 0; |
GabboEsc | 0:9eab7a2e3a75 | 95 | if(Tsi > 0) |
GabboEsc | 0:9eab7a2e3a75 | 96 | Inicio_Me_estado = HAB; |
GabboEsc | 0:9eab7a2e3a75 | 97 | if( Vi == 0 && t == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 98 | t = 50; |
GabboEsc | 0:9eab7a2e3a75 | 99 | Inicio_Me_estado = LOFF; |
GabboEsc | 0:9eab7a2e3a75 | 100 | } |
GabboEsc | 0:9eab7a2e3a75 | 101 | if(Vi == 1 && t == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 102 | t = 25; |
GabboEsc | 0:9eab7a2e3a75 | 103 | Inicio_Me_estado = LOFF; |
GabboEsc | 0:9eab7a2e3a75 | 104 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 105 | case LOFF: |
GabboEsc | 0:9eab7a2e3a75 | 106 | LR = 1; |
GabboEsc | 0:9eab7a2e3a75 | 107 | if(Tsi > 0) |
GabboEsc | 0:9eab7a2e3a75 | 108 | Inicio_Me_estado = HAB; |
GabboEsc | 0:9eab7a2e3a75 | 109 | if(Vi == 1 && t == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 110 | t = 15; |
GabboEsc | 0:9eab7a2e3a75 | 111 | Inicio_Me_estado = LON; |
GabboEsc | 0:9eab7a2e3a75 | 112 | } |
GabboEsc | 0:9eab7a2e3a75 | 113 | if(Vi == 0 && t == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 114 | t = 25; |
GabboEsc | 0:9eab7a2e3a75 | 115 | Inicio_Me_estado = LON; |
GabboEsc | 0:9eab7a2e3a75 | 116 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 117 | case HAB: |
GabboEsc | 0:9eab7a2e3a75 | 118 | Vi = 1; |
GabboEsc | 0:9eab7a2e3a75 | 119 | if(t == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 120 | t = 25; |
GabboEsc | 0:9eab7a2e3a75 | 121 | Inicio_Me_estado = LON; |
GabboEsc | 0:9eab7a2e3a75 | 122 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 123 | } |
GabboEsc | 0:9eab7a2e3a75 | 124 | } |
GabboEsc | 0:9eab7a2e3a75 | 125 | |
GabboEsc | 0:9eab7a2e3a75 | 126 | void Me_Recepcion(){ |
GabboEsc | 0:9eab7a2e3a75 | 127 | switch(recepcion_me_estado){ |
GabboEsc | 0:9eab7a2e3a75 | 128 | case ESPERO: |
GabboEsc | 0:9eab7a2e3a75 | 129 | if(c != 64 || Vi == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 130 | c = '\0'; |
GabboEsc | 0:9eab7a2e3a75 | 131 | newdata = false; |
GabboEsc | 0:9eab7a2e3a75 | 132 | } |
GabboEsc | 0:9eab7a2e3a75 | 133 | if(c == 64){ // @ = 64 en ASCII... |
GabboEsc | 0:9eab7a2e3a75 | 134 | recepcion_me_estado = INICIO; |
GabboEsc | 0:9eab7a2e3a75 | 135 | newdata = false; |
GabboEsc | 0:9eab7a2e3a75 | 136 | } |
GabboEsc | 0:9eab7a2e3a75 | 137 | break; |
GabboEsc | 0:9eab7a2e3a75 | 138 | case INICIO: |
GabboEsc | 0:9eab7a2e3a75 | 139 | if(c == 88 ||c == 89 ||c == 90 ||c == 86 ||c == 83){ //X = 88 ; y = 89 ; z = 90 ; v = 86 ; s = 83... |
GabboEsc | 0:9eab7a2e3a75 | 140 | recepcion_me_estado = ORDEN; |
GabboEsc | 0:9eab7a2e3a75 | 141 | o = c; |
GabboEsc | 0:9eab7a2e3a75 | 142 | newdata = false; |
GabboEsc | 0:9eab7a2e3a75 | 143 | } |
GabboEsc | 0:9eab7a2e3a75 | 144 | else{ |
GabboEsc | 0:9eab7a2e3a75 | 145 | c = '\0'; |
GabboEsc | 0:9eab7a2e3a75 | 146 | recepcion_me_estado = ESPERO; |
GabboEsc | 0:9eab7a2e3a75 | 147 | newdata = false; |
GabboEsc | 0:9eab7a2e3a75 | 148 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 149 | case ORDEN: |
GabboEsc | 0:9eab7a2e3a75 | 150 | if(c == 37){ //% = 115 |
GabboEsc | 0:9eab7a2e3a75 | 151 | recepcion_me_estado = FIN; |
GabboEsc | 0:9eab7a2e3a75 | 152 | } |
GabboEsc | 0:9eab7a2e3a75 | 153 | else{ |
GabboEsc | 0:9eab7a2e3a75 | 154 | recepcion_me_estado = ESPERO; |
GabboEsc | 0:9eab7a2e3a75 | 155 | c = '\0'; |
GabboEsc | 0:9eab7a2e3a75 | 156 | newdata = false; |
GabboEsc | 0:9eab7a2e3a75 | 157 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 158 | case FIN: |
GabboEsc | 0:9eab7a2e3a75 | 159 | recepcion_me_estado = ESPERO; |
GabboEsc | 0:9eab7a2e3a75 | 160 | Resp = 1; |
GabboEsc | 0:9eab7a2e3a75 | 161 | break; |
GabboEsc | 0:9eab7a2e3a75 | 162 | } |
GabboEsc | 0:9eab7a2e3a75 | 163 | } |
GabboEsc | 0:9eab7a2e3a75 | 164 | |
GabboEsc | 0:9eab7a2e3a75 | 165 | void Me_Respuesta(){ |
GabboEsc | 0:9eab7a2e3a75 | 166 | switch(respuesta_me_estado){ |
GabboEsc | 0:9eab7a2e3a75 | 167 | case RESPERA: |
GabboEsc | 0:9eab7a2e3a75 | 168 | lrc = 0x0; |
GabboEsc | 0:9eab7a2e3a75 | 169 | if(Resp == 1){ |
GabboEsc | 0:9eab7a2e3a75 | 170 | tr = 1; |
GabboEsc | 0:9eab7a2e3a75 | 171 | respuesta_me_estado = RINICIO; |
GabboEsc | 0:9eab7a2e3a75 | 172 | pc.printf("%c",'@'); |
GabboEsc | 0:9eab7a2e3a75 | 173 | lrc ^= 0x40; |
GabboEsc | 0:9eab7a2e3a75 | 174 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 175 | case RINICIO: |
GabboEsc | 0:9eab7a2e3a75 | 176 | if(tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 177 | tr = 1; |
GabboEsc | 0:9eab7a2e3a75 | 178 | respuesta_me_estado = RORDEN; |
GabboEsc | 0:9eab7a2e3a75 | 179 | pc.printf("%c", o); |
GabboEsc | 0:9eab7a2e3a75 | 180 | lrc ^= o; |
GabboEsc | 0:9eab7a2e3a75 | 181 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 182 | case RORDEN: |
GabboEsc | 0:9eab7a2e3a75 | 183 | if(o == 'X' && tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 184 | Xd = 10*abs(acc.getAccX()); |
GabboEsc | 0:9eab7a2e3a75 | 185 | Xu = 10*abs(acc.getAccX()) - Xd; |
GabboEsc | 0:9eab7a2e3a75 | 186 | pc.printf("%d%d", Xd, Xu); |
GabboEsc | 0:9eab7a2e3a75 | 187 | lrc ^= (Xd + 48); |
GabboEsc | 0:9eab7a2e3a75 | 188 | lrc ^= (Xu + 48); |
GabboEsc | 0:9eab7a2e3a75 | 189 | tr = 1; |
GabboEsc | 0:9eab7a2e3a75 | 190 | respuesta_me_estado = LRC; |
GabboEsc | 0:9eab7a2e3a75 | 191 | } |
GabboEsc | 0:9eab7a2e3a75 | 192 | if(o == 'Y' && tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 193 | Yd = 10*abs(acc.getAccY()); |
GabboEsc | 0:9eab7a2e3a75 | 194 | Yu = 10 *abs(acc.getAccX()) - Yd; |
GabboEsc | 0:9eab7a2e3a75 | 195 | pc.printf("%d%d", Yd, Yu); |
GabboEsc | 0:9eab7a2e3a75 | 196 | lrc ^= (Yd+48); |
GabboEsc | 0:9eab7a2e3a75 | 197 | lrc ^= (Yu+48); |
GabboEsc | 0:9eab7a2e3a75 | 198 | tr = 1; |
GabboEsc | 0:9eab7a2e3a75 | 199 | respuesta_me_estado = LRC; |
GabboEsc | 0:9eab7a2e3a75 | 200 | } |
GabboEsc | 0:9eab7a2e3a75 | 201 | if(o == 'Z' && tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 202 | Zd = 10*abs(acc.getAccZ()); |
GabboEsc | 0:9eab7a2e3a75 | 203 | Zu = 10*abs(acc.getAccX()) - Zd; |
GabboEsc | 0:9eab7a2e3a75 | 204 | pc.printf("%d%d", Zd, Zu); |
GabboEsc | 0:9eab7a2e3a75 | 205 | lrc ^= (Zd+48); |
GabboEsc | 0:9eab7a2e3a75 | 206 | lrc ^= (Zu+48); |
GabboEsc | 0:9eab7a2e3a75 | 207 | tr = 1; |
GabboEsc | 0:9eab7a2e3a75 | 208 | respuesta_me_estado = LRC; |
GabboEsc | 0:9eab7a2e3a75 | 209 | } |
GabboEsc | 0:9eab7a2e3a75 | 210 | if(o == 'V' && tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 211 | Vd = AN.read()*3.3; |
GabboEsc | 0:9eab7a2e3a75 | 212 | Vu = AN.read()*33 - Vd*10; |
GabboEsc | 0:9eab7a2e3a75 | 213 | pc.printf("%d%d", Vd, Vu); |
GabboEsc | 0:9eab7a2e3a75 | 214 | lrc ^= (Vd+48); |
GabboEsc | 0:9eab7a2e3a75 | 215 | lrc ^= (Vu+48); |
GabboEsc | 0:9eab7a2e3a75 | 216 | tr = 1; |
GabboEsc | 0:9eab7a2e3a75 | 217 | respuesta_me_estado = LRC; |
GabboEsc | 0:9eab7a2e3a75 | 218 | } |
GabboEsc | 0:9eab7a2e3a75 | 219 | if(o == 'S' && tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 220 | if(DIG == 1){ |
GabboEsc | 0:9eab7a2e3a75 | 221 | s = 49; |
GabboEsc | 0:9eab7a2e3a75 | 222 | }else{ |
GabboEsc | 0:9eab7a2e3a75 | 223 | s = 48;} |
GabboEsc | 0:9eab7a2e3a75 | 224 | pc.printf("%c", s); |
GabboEsc | 0:9eab7a2e3a75 | 225 | lrc ^= s ; |
GabboEsc | 0:9eab7a2e3a75 | 226 | tr = 1; |
GabboEsc | 0:9eab7a2e3a75 | 227 | respuesta_me_estado = LRC; |
GabboEsc | 0:9eab7a2e3a75 | 228 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 229 | case LRC: |
GabboEsc | 0:9eab7a2e3a75 | 230 | if(tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 231 | pc.printf("%X", lrc); |
GabboEsc | 0:9eab7a2e3a75 | 232 | respuesta_me_estado = RFIN; |
GabboEsc | 0:9eab7a2e3a75 | 233 | lrc = 0x0; |
GabboEsc | 0:9eab7a2e3a75 | 234 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 235 | case RFIN: |
GabboEsc | 0:9eab7a2e3a75 | 236 | if(tr == 0){ |
GabboEsc | 0:9eab7a2e3a75 | 237 | pc.printf("%c\n",0x25); // % = 0x25h = 37d |
GabboEsc | 0:9eab7a2e3a75 | 238 | Resp = 0; |
GabboEsc | 0:9eab7a2e3a75 | 239 | respuesta_me_estado = RESPERA; |
GabboEsc | 0:9eab7a2e3a75 | 240 | }break; |
GabboEsc | 0:9eab7a2e3a75 | 241 | } |
GabboEsc | 0:9eab7a2e3a75 | 242 | } |