Programa para terminar carrera-Mayo 2020

Dependencies:   mbed tsi_sensor MMA8451Q

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?

UserRevisionLine numberNew 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 }