Facundo Sussini
/
TP2_Protocolos
Integrantes: Facundo Carmona, Facundo Sussini. 6B Tecnica
main.cpp@0:2751a945563b, 2019-06-27 (annotated)
- Committer:
- Susso
- Date:
- Thu Jun 27 00:15:41 2019 +0000
- Revision:
- 0:2751a945563b
fsa
Who changed what in which revision?
User | Revision | Line number | New 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 | } |