libreria hc12

Dependents:   recepcion

Revision:
0:ac54225f5fcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hc12.cpp	Sat Oct 05 01:27:55 2019 +0000
@@ -0,0 +1,196 @@
+#include "mbed.h"
+#include "Checksum.h"
+#include "hc12.h"
+
+
+hc12::hc12()
+{
+   RawSerial MODULOHC(PTE0,PTE1);
+    MODULOHC.attach(this,&hc12::llegan_datos);
+    vector_envio[0]='<';
+    vector_envio[1]='V';
+    vector_envio[3]='A';
+    vector_envio[5]='F';
+    vector_envio[7]='C';
+    vector_envio[10]='>';
+    datos=CASO_1;
+
+    tramamal=0;
+    llegomal=0;
+    llegobien=0;
+    newdata = 0;
+}
+
+void hc12::update_parameters(char speed,char dist,char ejex,char ejey,char bateria)
+{
+    vector_envio[2]=speed;
+    vector_envio[4]=dist; //en mm
+    vector_envio[6]=ejex;
+    vector_envio[7]=ejey;
+    vector_envio[9]=bat;//porcetaje
+    vector_envio[11]=checksum.get_xor(vector_envio, 11);
+   MODULOHC.printf("<S%dD%dE%d%dB%d%d>",speed,dist,ejex,ejey,bat,vector_envio[11]);
+    NoLlegaNada.attach(this,&hc12::noentrandatos,0.1);
+
+}
+
+
+void hc12::llegan_datos()
+{
+    NoLlegaNada.detach();
+    c = MODULOHC.getc();
+    newdata = 1;
+    maquina_datos();
+    if(llegomal!=0) {
+        tramamal++; //PONER QUE SI SE HACE CONSTANTE QUE LAS TRAMAS LLEGUEN MAL AVISE
+    }
+}
+
+void hc12::maquina_datos()
+{
+    switch (datos) {
+        case CASO_1:
+            if(newdata==1 && c=='<') {
+                newdata=0;
+                vector_datos[0]='<';
+                datos=CASO_S;
+            } else if(newdata==1 && c!='<') {//poner para que termine
+                llegomal++;
+            }
+            break;
+
+        case CASO_S:
+            if(newdata==1 && c=='V') {
+                vector_datos[1]='V';
+                datos=CASO_SA;
+                newdata=0;
+            } else if(newdata==1 && c!='V') {
+                llegomal++;
+                datos=CASO_1;
+            }
+            break;
+
+        case CASO_SA:
+            if(newdata==1) {
+                vector_datos[2]=c;
+                datos=CASO_D;
+                newdata=0;
+            }
+            break;
+
+        case CASO_D:
+            if(newdata==1 && c=='A') {
+                vector_datos[3]='A';
+                newdata=0;
+                datos=CASO_DA;
+            } else if(newdata==1 && c!='A') {
+                llegomal++;
+                datos=CASO_1;
+            }
+            break;
+
+        case CASO_DA:
+            if(newdata==1) {
+                vector_datos[4]=c;
+                newdata=0;
+                datos=CASO_E;
+            }
+            break;
+
+        case CASO_E:
+            if(newdata==1 && c=='F') {
+                vector_datos[5]='F';
+                newdata=0;
+                datos=CASO_EA;
+            } else if(newdata==1 && c!='F') {
+                llegomal++;
+                datos=CASO_1;
+            }
+            break;
+
+        case CASO_EA:
+            if(newdata==1) {
+                vector_datos[6]=c;
+                newdata=0;
+                datos=CASO_B;
+            }
+            break;
+
+        case CASO_B:
+            if(newdata==1 && c=='C') {
+                vector_datos[7]='C';
+                newdata=0;
+                datos=CASO_BA;
+            } else if(newdata==1 && c!='C') {
+                llegomal++;
+                datos=CASO_1;
+            }
+            break;
+
+        case CASO_BA:
+            if(newdata==1) {
+                vector_datos[8]=c;
+                newdata=0;
+                datos=CASO_CHECK;
+            }
+            break;
+
+        case CASO_CHECK:
+            check=checksum.get_xor(vector_datos, 10);//hasta que numero kevinnn
+            if(newdata==1) {
+                vector_datos[9]=c;
+                newdata=0;
+                if(check==vector_datos[9]) {
+                    llegobien=1;
+                    datos=CASO_FIN;
+                } else if{
+                datos=CASO_1;
+            }
+        }
+        break;
+
+    case CASO_FIN:
+        if(newdata==1 && c=='>') {
+                vector_datos[10]='>';
+                newdata=0;
+                if(llegobien==1) {
+                    for(char i=0; i<=10; i++) {
+                        pc.printf("%c\n",vector_datos[i]);
+                    }
+                    llegobien=0;
+                    llegomal=0;
+                    tramamal=0;
+                    volante=vector_datos[2];
+                    acelerador=vector_datos[4];
+                    freno=vector_datos[6];
+                    cambios=vector_datos[8];
+                }
+            } else if(newdata==1 && c!='>') {
+                llegomal++;
+            }
+            datos=CASO_1;
+            break;
+    }
+}
+int hc12::get_break_pedal()
+{
+    return freno;
+}
+
+int hc12::get_speed_pedal()
+{
+    return acelerador;
+}
+
+int hc12::get_changes()
+{
+    return cambios;
+}
+int hc12::get_steering_wheel()
+{
+    return volante;
+}
+void hc12::noentrandatos()
+{
+    MODULOHC.printf("<S%dD%dE%d%dB%d%d>",speed,distancia,ejex,ejey,vector_envio[11]);
+}
\ No newline at end of file