libreria hc12

Dependents:   recepcion

Files at this revision

API Documentation at this revision

Comitter:
guidoglorioso
Date:
Sat Oct 05 01:27:55 2019 +0000
Commit message:
programa trama proyecto

Changed in this revision

Checksum.lib Show annotated file Show diff for this revision Revisions of this file
hc12.cpp Show annotated file Show diff for this revision Revisions of this file
hc12.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r ac54225f5fcd Checksum.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Checksum.lib	Sat Oct 05 01:27:55 2019 +0000
@@ -0,0 +1,1 @@
+https://github.com/pilotak/Checksum/#1384a1a9f45d8efdf24022be0605935b0e7482db
diff -r 000000000000 -r ac54225f5fcd hc12.cpp
--- /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
diff -r 000000000000 -r ac54225f5fcd hc12.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hc12.h	Sat Oct 05 01:27:55 2019 +0000
@@ -0,0 +1,28 @@
+#include "mbed.h"
+
+class hc12
+{
+public:
+    hc12(); //se declaran los pines para usar
+    int get_speed_pedal();
+    int get_changes();
+    int get_break_pedal();
+    
+    int get_steering_wheel();
+    void update_parameters(char speed,char dist,char ejex,char ejey,char bateria);
+private:
+    void llegan_datos();
+    void maquina_datos();
+    void noentrandatos();
+   RawSerial MODULOHC();
+    Checksum checksum;
+    Timeout NoLlegaNada;
+    enum {CASO_MOTORES,CASO_MANDODATOS,CASO_VOLPED,CASO_PALANCA};    //CASOS MAQUINA DE TODO EL PROGRAMA
+    enum {CASO_1,CASO_S,CASO_SA,CASO_D,CASO_DA,CASO_E,CASO_EA,CASO_EAA,CASO_B,CASO_BA,CASO_CHECK,CASO_FIN};  //CASOS MAQUINA DE LLEGADA DE DATOS
+ 
+    char c,acelerador,freno,cambio,vector_datos[12],datos,check,vector_envio[12];
+    unsigned char llegomal,llegobien,bat,speed,dist,ejex,ejey,tramamal;
+    bool newdata;
+
+
+};