Integrantes: Facundo Carmona, Facundo Sussini. 6B Tecnica

Dependencies:   mbed tsi_sensor

Files at this revision

API Documentation at this revision

Comitter:
Susso
Date:
Thu Jun 27 00:15:41 2019 +0000
Commit message:
fsa

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
tsi_sensor.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jun 27 00:15:41 2019 +0000
@@ -0,0 +1,230 @@
+#include "mbed.h"
+#include "tsi_sensor.h"
+
+/* This defines will be replaced by PinNames soon */
+#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+#define ELEC0 9
+#define ELEC1 10
+#elif defined (TARGET_KL05Z)
+#define ELEC0 9
+#define ELEC1 8
+#else
+#error TARGET NOT DEFINED
+#endif
+
+//elaciono palabras con numeros
+#define verificacion 0
+#define inicio 0
+#define accion 1
+#define eleccion 2
+#define pata 3
+#define estado 4
+#define verificacionA 5
+#define verificacionB 6
+#define fin 7
+#define escritura 1
+#define leida 2
+
+/*
+lista de combinaciones y sus respectivos numeros hexagesimales:
+WLR0 ---->  79
+WLR1 ---->  78
+WLG0 ---->  6c
+WLG1 ---->  6d
+WLB0 ---->  69
+WLB1 ---->  68
+RLB- ---->  71
+RLG- ---->  74
+RLR- ---->  61
+RA0- ---->  0e
+RA1- ---->  0f
+RI0- ---->  06
+RI0- ---->  07
+*/
+//defino entradas y salidas
+DigitalOut rojo(LED_RED);
+DigitalOut verde(LED_GREEN);
+DigitalOut azul(LED_BLUE);
+AnalogIn preset(A0);
+DigitalIn entrada1(D2);
+DigitalIn entrada2(D3);
+TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
+//Creamos los tres leds pra usar
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+
+//Definimos que el puerto serie se llama pc
+Serial pc(USBTX, USBRX);
+//Variable donde se guarda lo leido
+char   c = '\0';
+//bit usado como flag para procesar datos
+bool newdata = false;   //Se pone en true cuando hay nuevos datos
+
+//Callback cuando se detecta una entrada
+void onCharReceived()
+{
+    //Copiamos lo leido en c
+    c=pc.getc();
+    newdata = true;
+}
+//defino funcion principal
+void correo();
+//defino variables a usar
+char lectura=0, accione=0, action=0, sondeo=0, reinicio=0, x=0,trama[9], exorcismo=0, examenA=0, examenB=0, bloqueo1=0;
+char exa[17]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+
+int main()
+{
+//Apagamos los leds
+    rojo = 1;
+    verde = 1;
+    azul = 1;
+//Ejecutar onCharReceived por cada entrada por puerto
+    pc.attach(&onCharReceived);
+
+    while (true) {
+        correo();//llamo a la funcion
+    }
+}
+/*----------------------funcion principal-------------------------------------*/
+void correo()
+{
+    switch(lectura) {//maquina de estados principal
+        /* cuando debo verificar cada dato que recibo de la PC */
+        default:
+        case verificacion:
+            if(newdata) {//cuando recibo datos de la PC
+                newdata = false;
+                switch(sondeo) {// maquina de estados cada vez que recibo un dato y verifico si esta bien el protocolo enviado
+                    default:
+                    case inicio://bit de inicio
+                        if(c=='$') {// si el bit es correcto
+                            trama[0]=c;// agrego lo recibido en un vector
+                            sondeo=accion;// paso a la siguiente maquina de estado
+                        }
+                        break;
+
+                    case accion:// bit de leida o de escritura
+                        if(c=='W'||c=='R') {// si recibo W o R
+                            trama[1]=c;// agrego lo recibido en un vector
+                            if(c=='W')// si el bit es W
+                                action=escritura;//defino la accion que se hara despues de comprobar 
+                            else if(c=='R')
+                                action=leida;//defino la accion que se hara despues de comprobar 
+                            sondeo=eleccion;// paso a la siguiente maquina de estado
+                        } else
+                            sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
+                        break;
+
+                    case eleccion://bit de led, analogica y digital
+                        if(c=='L'||c=='A'||c=='I') {// si reibo los bits deseados
+                            trama[2]=c;// agrego lo recibido en un vector
+                            sondeo=pata;// paso a la siguiente maquina de estado
+                        } else
+                            sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
+                        break;
+
+                    case pata:// bit de pata o led a modificar
+                        if(c=='R'||c=='G'||c=='B'||c=='0'||c=='1') {// si recibo los bits deseados
+                            trama[3]=c;// agrego lo recibido en un vector
+                            sondeo=estado;// paso a la siguiente maquina de estado
+                        } else
+                            sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
+                        break;
+
+                    case estado:// bit de estado de led o nada 
+                        if(c=='0'||c=='1'||c=='-') {// si recibo los bits deseados
+                            trama[4]=c;// agrego lo recibido en un vector
+                            sondeo=verificacionA;// paso a la siguiente maquina de estado
+                        } else
+                            sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
+                        break;
+
+                    case verificacionA:// bit de verificacion
+                        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
+                            trama[5]=c;// agrego lo recibido en un vector
+                            sondeo=verificacionB;// paso a la siguiente maquina de estado
+                        } else
+                            sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
+                        break;
+
+                    case verificacionB:// bit de verificacion
+                        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
+                            trama[6]=c;// agrego lo recibido en un vector
+                            sondeo=fin;// paso a la siguiente maquina de estado
+                        } else
+                            sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
+                        break;
+
+                    case fin:// bit de fin
+                        trama[7]=c;// agrego lo recibido en un vector
+                        if(c=='!') {// si recibo el bit deseados
+                            bloqueo1=0;// reseteo bloqueo
+                            exorcismo= trama[1] ^ trama[2] ^ trama[3] ^ trama[4];// hago un xor con los bits que recibo 
+                            examenA= exorcismo % 16;//convierto el el resultado de xor a hexagesimal
+                            examenB= exorcismo / 16;//convierto el el resultado de xor a hexagesimal
+                            sondeo=inicio;// reseteo la maquina de estados de verificacion
+                        } else
+                            sondeo=inicio;// si el bit no es el deseado, vuelvo al inicio de espera del bit de inicio
+                        break;
+                }
+                break;
+            }
+            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
+                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
+                if(action==escritura)//si se decidio escribir
+                    lectura=escritura;// despues de leer el protocolo paso a escribir
+                else if(action==leida)// si se decidio leer
+                    lectura=leida;// despues de leer el protocolo paso a leer
+            } 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
+                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
+                printf("Ah ,ah ,ah. No dijiste la palabra magica \r\n");
+                lectura=sondeo;// si la verificacion es incorecta, vuelvo al inicio de la verificacion
+            }
+            break;
+        
+        case leida:// maquina de estado para leer
+            if(trama[1]=='R' && trama[2]=='L' && trama[3]=='B' && trama[4]=='-') {// si quiero saber el estado del led azul
+                if(azul==1)// si el led esta encendido
+                    printf("$RLB0!");
+                else// si el led esta apagado
+                    printf("$RLB1!");
+            } else if(trama[1]=='R' && trama[2]=='L' && trama[3]=='G' && trama[4]=='-') {// si quiero saber el estado del led verde
+                if(verde==1)// si el led esta encendido
+                    printf("$RLG0!");
+                else// si el led esta apagado
+                    printf("$RLG1!");
+            } else if(trama[1]=='R' && trama[2]=='L' && trama[3]=='R' && trama[4]=='-') {// si quiero saber el estado del led rojo
+                if(rojo==1)// si el led esta encendido
+                    printf("$RLR0!");
+                else// si el led esta apagado
+                    printf("$RLR1!");
+            } else if(trama[1]=='R' && trama[2]=='A' && trama[3]=='0' && trama[4]=='-')// si quiero saber el valor del preset o Analog0
+                printf("$RA0-%1.1f!\n\r",preset.read());
+            else if(trama[1]=='R' && trama[2]=='A' && trama[3]=='1' && trama[4]=='-')// si quiero saber el valor del tsi o Analog1
+                printf("$RA1-%1.1f!\n\r",tsi.readPercentage());
+            else if(trama[1]=='R' && trama[2]=='I' && trama[3]=='0' && trama[4]=='-')// si quiero saber el estado de la entrada digital 0
+                printf("$RI0-%d!\n\r",entrada1.read());
+            else if(trama[1]=='R' && trama[2]=='I' && trama[3]=='1' && trama[4]=='-')// si quiero saber el estado de la entrada digital 1 
+                printf("$RI1-%d!\n\r",entrada2.read());
+            lectura=verificacion;
+            break;
+
+        case escritura:// maquina de estado para escribir
+            if(trama[1]=='W' && trama[2]=='L' && trama[3]=='R' && trama[4]=='0')// si quiero apagar el led rojo
+                rojo=1;// apago led rojo
+            else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='R' && trama[4]=='1')// si quiero encender el led rojo
+                rojo=0;// enciendo led rojo
+            else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='G' && trama[4]=='0')// si quiero apagar el led verde
+                verde=1;// apago led verde
+            else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='G' && trama[4]=='1')// si quiero encender el led verde
+                verde=0;// enciendo led verde
+            else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='B' && trama[4]=='0')// si quiero apagar el led azul
+                azul=1;// apago led azul
+            else if(trama[1]=='W' && trama[2]=='L' && trama[3]=='B' && trama[4]=='1')// si quiero encender el led azul
+                azul=0;// enciendo led azul
+            lectura=verificacion;// vuelvo a la maquina de estado de verificacion
+            break;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Jun 27 00:15:41 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsi_sensor.lib	Thu Jun 27 00:15:41 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Kojto/code/tsi_sensor/#976904559b5c