libreria hc12
hc12.cpp
- Committer:
- guidoglorioso
- Date:
- 2019-10-05
- Revision:
- 0:ac54225f5fcd
File content as of revision 0:ac54225f5fcd:
#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]); }