Integrantes: Facundo Carmona, Facundo Sussini. 6B Tecnica

Dependencies:   mbed tsi_sensor

Committer:
Susso
Date:
Thu Jun 27 00:15:41 2019 +0000
Revision:
0:2751a945563b
fsa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Susso 0:2751a945563b 1 #include "mbed.h"
Susso 0:2751a945563b 2 #include "tsi_sensor.h"
Susso 0:2751a945563b 3
Susso 0:2751a945563b 4 /* This defines will be replaced by PinNames soon */
Susso 0:2751a945563b 5 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
Susso 0:2751a945563b 6 #define ELEC0 9
Susso 0:2751a945563b 7 #define ELEC1 10
Susso 0:2751a945563b 8 #elif defined (TARGET_KL05Z)
Susso 0:2751a945563b 9 #define ELEC0 9
Susso 0:2751a945563b 10 #define ELEC1 8
Susso 0:2751a945563b 11 #else
Susso 0:2751a945563b 12 #error TARGET NOT DEFINED
Susso 0:2751a945563b 13 #endif
Susso 0:2751a945563b 14
Susso 0:2751a945563b 15 //elaciono palabras con numeros
Susso 0:2751a945563b 16 #define verificacion 0
Susso 0:2751a945563b 17 #define inicio 0
Susso 0:2751a945563b 18 #define accion 1
Susso 0:2751a945563b 19 #define eleccion 2
Susso 0:2751a945563b 20 #define pata 3
Susso 0:2751a945563b 21 #define estado 4
Susso 0:2751a945563b 22 #define verificacionA 5
Susso 0:2751a945563b 23 #define verificacionB 6
Susso 0:2751a945563b 24 #define fin 7
Susso 0:2751a945563b 25 #define escritura 1
Susso 0:2751a945563b 26 #define leida 2
Susso 0:2751a945563b 27
Susso 0:2751a945563b 28 /*
Susso 0:2751a945563b 29 lista de combinaciones y sus respectivos numeros hexagesimales:
Susso 0:2751a945563b 30 WLR0 ----> 79
Susso 0:2751a945563b 31 WLR1 ----> 78
Susso 0:2751a945563b 32 WLG0 ----> 6c
Susso 0:2751a945563b 33 WLG1 ----> 6d
Susso 0:2751a945563b 34 WLB0 ----> 69
Susso 0:2751a945563b 35 WLB1 ----> 68
Susso 0:2751a945563b 36 RLB- ----> 71
Susso 0:2751a945563b 37 RLG- ----> 74
Susso 0:2751a945563b 38 RLR- ----> 61
Susso 0:2751a945563b 39 RA0- ----> 0e
Susso 0:2751a945563b 40 RA1- ----> 0f
Susso 0:2751a945563b 41 RI0- ----> 06
Susso 0:2751a945563b 42 RI0- ----> 07
Susso 0:2751a945563b 43 */
Susso 0:2751a945563b 44 //defino entradas y salidas
Susso 0:2751a945563b 45 DigitalOut rojo(LED_RED);
Susso 0:2751a945563b 46 DigitalOut verde(LED_GREEN);
Susso 0:2751a945563b 47 DigitalOut azul(LED_BLUE);
Susso 0:2751a945563b 48 AnalogIn preset(A0);
Susso 0:2751a945563b 49 DigitalIn entrada1(D2);
Susso 0:2751a945563b 50 DigitalIn entrada2(D3);
Susso 0:2751a945563b 51 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
Susso 0:2751a945563b 52 //Creamos los tres leds pra usar
Susso 0:2751a945563b 53 DigitalOut led1(LED1);
Susso 0:2751a945563b 54 DigitalOut led2(LED2);
Susso 0:2751a945563b 55 DigitalOut led3(LED3);
Susso 0:2751a945563b 56
Susso 0:2751a945563b 57 //Definimos que el puerto serie se llama pc
Susso 0:2751a945563b 58 Serial pc(USBTX, USBRX);
Susso 0:2751a945563b 59 //Variable donde se guarda lo leido
Susso 0:2751a945563b 60 char c = '\0';
Susso 0:2751a945563b 61 //bit usado como flag para procesar datos
Susso 0:2751a945563b 62 bool newdata = false; //Se pone en true cuando hay nuevos datos
Susso 0:2751a945563b 63
Susso 0:2751a945563b 64 //Callback cuando se detecta una entrada
Susso 0:2751a945563b 65 void onCharReceived()
Susso 0:2751a945563b 66 {
Susso 0:2751a945563b 67 //Copiamos lo leido en c
Susso 0:2751a945563b 68 c=pc.getc();
Susso 0:2751a945563b 69 newdata = true;
Susso 0:2751a945563b 70 }
Susso 0:2751a945563b 71 //defino funcion principal
Susso 0:2751a945563b 72 void correo();
Susso 0:2751a945563b 73 //defino variables a usar
Susso 0:2751a945563b 74 char lectura=0, accione=0, action=0, sondeo=0, reinicio=0, x=0,trama[9], exorcismo=0, examenA=0, examenB=0, bloqueo1=0;
Susso 0:2751a945563b 75 char exa[17]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
Susso 0:2751a945563b 76
Susso 0:2751a945563b 77 int main()
Susso 0:2751a945563b 78 {
Susso 0:2751a945563b 79 //Apagamos los leds
Susso 0:2751a945563b 80 rojo = 1;
Susso 0:2751a945563b 81 verde = 1;
Susso 0:2751a945563b 82 azul = 1;
Susso 0:2751a945563b 83 //Ejecutar onCharReceived por cada entrada por puerto
Susso 0:2751a945563b 84 pc.attach(&onCharReceived);
Susso 0:2751a945563b 85
Susso 0:2751a945563b 86 while (true) {
Susso 0:2751a945563b 87 correo();//llamo a la funcion
Susso 0:2751a945563b 88 }
Susso 0:2751a945563b 89 }
Susso 0:2751a945563b 90 /*----------------------funcion principal-------------------------------------*/
Susso 0:2751a945563b 91 void correo()
Susso 0:2751a945563b 92 {
Susso 0:2751a945563b 93 switch(lectura) {//maquina de estados principal
Susso 0:2751a945563b 94 /* cuando debo verificar cada dato que recibo de la PC */
Susso 0:2751a945563b 95 default:
Susso 0:2751a945563b 96 case verificacion:
Susso 0:2751a945563b 97 if(newdata) {//cuando recibo datos de la PC
Susso 0:2751a945563b 98 newdata = false;
Susso 0:2751a945563b 99 switch(sondeo) {// maquina de estados cada vez que recibo un dato y verifico si esta bien el protocolo enviado
Susso 0:2751a945563b 100 default:
Susso 0:2751a945563b 101 case inicio://bit de inicio
Susso 0:2751a945563b 102 if(c=='$') {// si el bit es correcto
Susso 0:2751a945563b 103 trama[0]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 104 sondeo=accion;// paso a la siguiente maquina de estado
Susso 0:2751a945563b 105 }
Susso 0:2751a945563b 106 break;
Susso 0:2751a945563b 107
Susso 0:2751a945563b 108 case accion:// bit de leida o de escritura
Susso 0:2751a945563b 109 if(c=='W'||c=='R') {// si recibo W o R
Susso 0:2751a945563b 110 trama[1]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 111 if(c=='W')// si el bit es W
Susso 0:2751a945563b 112 action=escritura;//defino la accion que se hara despues de comprobar
Susso 0:2751a945563b 113 else if(c=='R')
Susso 0:2751a945563b 114 action=leida;//defino la accion que se hara despues de comprobar
Susso 0:2751a945563b 115 sondeo=eleccion;// paso a la siguiente maquina de estado
Susso 0:2751a945563b 116 } else
Susso 0:2751a945563b 117 sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
Susso 0:2751a945563b 118 break;
Susso 0:2751a945563b 119
Susso 0:2751a945563b 120 case eleccion://bit de led, analogica y digital
Susso 0:2751a945563b 121 if(c=='L'||c=='A'||c=='I') {// si reibo los bits deseados
Susso 0:2751a945563b 122 trama[2]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 123 sondeo=pata;// paso a la siguiente maquina de estado
Susso 0:2751a945563b 124 } else
Susso 0:2751a945563b 125 sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
Susso 0:2751a945563b 126 break;
Susso 0:2751a945563b 127
Susso 0:2751a945563b 128 case pata:// bit de pata o led a modificar
Susso 0:2751a945563b 129 if(c=='R'||c=='G'||c=='B'||c=='0'||c=='1') {// si recibo los bits deseados
Susso 0:2751a945563b 130 trama[3]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 131 sondeo=estado;// paso a la siguiente maquina de estado
Susso 0:2751a945563b 132 } else
Susso 0:2751a945563b 133 sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
Susso 0:2751a945563b 134 break;
Susso 0:2751a945563b 135
Susso 0:2751a945563b 136 case estado:// bit de estado de led o nada
Susso 0:2751a945563b 137 if(c=='0'||c=='1'||c=='-') {// si recibo los bits deseados
Susso 0:2751a945563b 138 trama[4]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 139 sondeo=verificacionA;// paso a la siguiente maquina de estado
Susso 0:2751a945563b 140 } else
Susso 0:2751a945563b 141 sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
Susso 0:2751a945563b 142 break;
Susso 0:2751a945563b 143
Susso 0:2751a945563b 144 case verificacionA:// bit de verificacion
Susso 0:2751a945563b 145 if(c=='A'||c=='B'||c=='C'||c=='D'||c=='E'||c=='F'||c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9') {// si recibo los bits deseados
Susso 0:2751a945563b 146 trama[5]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 147 sondeo=verificacionB;// paso a la siguiente maquina de estado
Susso 0:2751a945563b 148 } else
Susso 0:2751a945563b 149 sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
Susso 0:2751a945563b 150 break;
Susso 0:2751a945563b 151
Susso 0:2751a945563b 152 case verificacionB:// bit de verificacion
Susso 0:2751a945563b 153 if(c=='A'||c=='B'||c=='C'||c=='D'||c=='E'||c=='F'||c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9') {// si recibo los bits deseados
Susso 0:2751a945563b 154 trama[6]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 155 sondeo=fin;// paso a la siguiente maquina de estado
Susso 0:2751a945563b 156 } else
Susso 0:2751a945563b 157 sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
Susso 0:2751a945563b 158 break;
Susso 0:2751a945563b 159
Susso 0:2751a945563b 160 case fin:// bit de fin
Susso 0:2751a945563b 161 trama[7]=c;// agrego lo recibido en un vector
Susso 0:2751a945563b 162 if(c=='!') {// si recibo el bit deseados
Susso 0:2751a945563b 163 bloqueo1=0;// reseteo bloqueo
Susso 0:2751a945563b 164 exorcismo= trama[1] ^ trama[2] ^ trama[3] ^ trama[4];// hago un xor con los bits que recibo
Susso 0:2751a945563b 165 examenA= exorcismo % 16;//convierto el el resultado de xor a hexagesimal
Susso 0:2751a945563b 166 examenB= exorcismo / 16;//convierto el el resultado de xor a hexagesimal
Susso 0:2751a945563b 167 sondeo=inicio;// reseteo la maquina de estados de verificacion
Susso 0:2751a945563b 168 } else
Susso 0:2751a945563b 169 sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
Susso 0:2751a945563b 170 break;
Susso 0:2751a945563b 171 }
Susso 0:2751a945563b 172 break;
Susso 0:2751a945563b 173 }
Susso 0:2751a945563b 174 if(trama[5]==exa[examenB] && trama[6]==exa[examenA] && trama[7]=='!' && bloqueo1==0) {// si la verificacion es correcta y se termino de leer el protocolo
Susso 0:2751a945563b 175 bloqueo1=1;//se usa para que solo para que solo se entre una vez y no se repita hasta que no se termine de leer el protocolo completo
Susso 0:2751a945563b 176 if(action==escritura)//si se decidio escribir
Susso 0:2751a945563b 177 lectura=escritura;// despues de leer el protocolo paso a escribir
Susso 0:2751a945563b 178 else if(action==leida)// si se decidio leer
Susso 0:2751a945563b 179 lectura=leida;// despues de leer el protocolo paso a leer
Susso 0:2751a945563b 180 } else if(trama[5]!=exa[examenB] && trama[6]!=exa[examenA] && trama[7]=='!' && bloqueo1==0) {// si la verificacion es incorrecta y se termino de leer el protocolo
Susso 0:2751a945563b 181 bloqueo1=1;//se usa para que solo para que solo se entre una vez y no se repita hasta que no se termine de leer el protocolo completo
Susso 0:2751a945563b 182 printf("Ah ,ah ,ah. No dijiste la palabra magica \r\n");
Susso 0:2751a945563b 183 lectura=sondeo;// si la verificacion es incorecta, vuelvo al inicio de la verificacion
Susso 0:2751a945563b 184 }
Susso 0:2751a945563b 185 break;
Susso 0:2751a945563b 186
Susso 0:2751a945563b 187 case leida:// maquina de estado para leer
Susso 0:2751a945563b 188 if(trama[1]=='R' && trama[2]=='L' && trama[3]=='B' && trama[4]=='-') {// si quiero saber el estado del led azul
Susso 0:2751a945563b 189 if(azul==1)// si el led esta encendido
Susso 0:2751a945563b 190 printf("$RLB0!");
Susso 0:2751a945563b 191 else// si el led esta apagado
Susso 0:2751a945563b 192 printf("$RLB1!");
Susso 0:2751a945563b 193 } else if(trama[1]=='R' && trama[2]=='L' && trama[3]=='G' && trama[4]=='-') {// si quiero saber el estado del led verde
Susso 0:2751a945563b 194 if(verde==1)// si el led esta encendido
Susso 0:2751a945563b 195 printf("$RLG0!");
Susso 0:2751a945563b 196 else// si el led esta apagado
Susso 0:2751a945563b 197 printf("$RLG1!");
Susso 0:2751a945563b 198 } else if(trama[1]=='R' && trama[2]=='L' && trama[3]=='R' && trama[4]=='-') {// si quiero saber el estado del led rojo
Susso 0:2751a945563b 199 if(rojo==1)// si el led esta encendido
Susso 0:2751a945563b 200 printf("$RLR0!");
Susso 0:2751a945563b 201 else// si el led esta apagado
Susso 0:2751a945563b 202 printf("$RLR1!");
Susso 0:2751a945563b 203 } else if(trama[1]=='R' && trama[2]=='A' && trama[3]=='0' && trama[4]=='-')// si quiero saber el valor del preset o Analog0
Susso 0:2751a945563b 204 printf("$RA0-%1.1f!\n\r",preset.read());
Susso 0:2751a945563b 205 else if(trama[1]=='R' && trama[2]=='A' && trama[3]=='1' && trama[4]=='-')// si quiero saber el valor del tsi o Analog1
Susso 0:2751a945563b 206 printf("$RA1-%1.1f!\n\r",tsi.readPercentage());
Susso 0:2751a945563b 207 else if(trama[1]=='R' && trama[2]=='I' && trama[3]=='0' && trama[4]=='-')// si quiero saber el estado de la entrada digital 0
Susso 0:2751a945563b 208 printf("$RI0-%d!\n\r",entrada1.read());
Susso 0:2751a945563b 209 else if(trama[1]=='R' && trama[2]=='I' && trama[3]=='1' && trama[4]=='-')// si quiero saber el estado de la entrada digital 1
Susso 0:2751a945563b 210 printf("$RI1-%d!\n\r",entrada2.read());
Susso 0:2751a945563b 211 lectura=verificacion;
Susso 0:2751a945563b 212 break;
Susso 0:2751a945563b 213
Susso 0:2751a945563b 214 case escritura:// maquina de estado para escribir
Susso 0:2751a945563b 215 if(trama[1]=='W' && trama[2]=='L' && trama[3]=='R' && trama[4]=='0')// si quiero apagar el led rojo
Susso 0:2751a945563b 216 rojo=1;// apago led rojo
Susso 0:2751a945563b 217 else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='R' && trama[4]=='1')// si quiero encender el led rojo
Susso 0:2751a945563b 218 rojo=0;// enciendo led rojo
Susso 0:2751a945563b 219 else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='G' && trama[4]=='0')// si quiero apagar el led verde
Susso 0:2751a945563b 220 verde=1;// apago led verde
Susso 0:2751a945563b 221 else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='G' && trama[4]=='1')// si quiero encender el led verde
Susso 0:2751a945563b 222 verde=0;// enciendo led verde
Susso 0:2751a945563b 223 else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='B' && trama[4]=='0')// si quiero apagar el led azul
Susso 0:2751a945563b 224 azul=1;// apago led azul
Susso 0:2751a945563b 225 else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='B' && trama[4]=='1')// si quiero encender el led azul
Susso 0:2751a945563b 226 azul=0;// enciendo led azul
Susso 0:2751a945563b 227 lectura=verificacion;// vuelvo a la maquina de estado de verificacion
Susso 0:2751a945563b 228 break;
Susso 0:2751a945563b 229 }
Susso 0:2751a945563b 230 }