![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
main_imu, MPU6050 , racolta_dati sono per il funzionamento dell' accelerometro. my_img_sd è una libreria per gestire i dati su un sd sulla quale vengono forniti solamente le funzioni di lettura e scrittura a blocchi i file trasmetti sono la definizione e implementazione delle funzioni del protoccolo per la gestione dell' invio dei dati con il relativo formato
Dependencies: mbed
Diff: trasmetti.h
- Revision:
- 0:a9753886e1e0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trasmetti.h Sun Nov 05 14:20:26 2017 +0000 @@ -0,0 +1,225 @@ +//#ifndef mydati_h +//#odefine mydati_h +#include "mbed.h" + + + +Serial pc(USBTX, USBRX); // tx, rx + +#ifndef mydati_h +#define mydati_h +extern Serial pc; +extern Serial device; +extern Serial device2; + +namespace mydati{ + +bool pc_trasmisione(int,char* s); + + struct pacco{ + char* txt; + char n; + }; + +class trasmetti{ /* classe superiore che ha il compito di interagire con l' altra scheda, + le altre sottoclassi si intrfacciano a lei */ +private: + int addr_slave; + I2C* master; + char conteggio; + + struct coda{ + char priorita; + pacco* dato; + coda* suc; + }; + coda* testa; + coda* fine; + char n; + void extract(pacco**); +public: +trasmetti():n(0){testa=fine=0;} + +void set_add(int a){addr_slave=a;} +void set_master(I2C* a){master=a;} + +bool ins_in_coda(pacco* ,char priorita= 0); +bool ins_priorita(pacco* ,char priorita= 0); +bool ins_in_testa(pacco* ,char priorita= 0); + +bool pc_trasmisione(int n,char* s); + +bool invio(); +} +//serve perche deve essere unina per tutti e quindi di variabile di qeusta classe ne deve essere creata solo una +#ifdef tra_cpp +telemetria; +#else +; +extern trasmetti telemetria; +#endif +class sensore{ //classe generia appezotata, da riempire sucesivamente per oblicare alle altri figlie di implemetare la funzione + private: + static const int max_n=10; + int n; + + public: + sensore():n(-1){} + virtual bool invia(char p=0)=0; + int number(){n++;n=n%max_n;return n;} + virtual ~sensore(){} +}; + + +/*le sucesive classi hanno il compito di legere i dati dal sensore +e di inviari interfaciandosi con la classe di sopra, +le funzioni che prendoi i dati vengono cambiate, c'è un set_all che viene implementato in mbed, +l' altro serve a me per testare il tutto con il cp +*/ +class dati_imu : public sensore{ +private: +static const char priorita_imu =5; +static const int nb_classe =25; + float ax,ay,az; + float gx,gy,gz; + float pich,roll,yaw; + float temp; + static const int off_set_a=2000; + static const int off_set_g=1000; +public: +//dati_imu():sensore(),ax(0),ay(0),az(0),gx(0),gy(0),gz(0),pich(0),roll(0),yaw(0),temp(0){} + +void set_all(float a,float b,float c,float d,float e,float f,float g,float h, float i, float t){ // da elimiare i parametri di ingresso, essa chiamera una funzione dedicata + ax=a;ay=b;az=c;gx=d;gy=e;gz=f;pich=g;roll=h;yaw=i;temp=t; + } +void set_all(); + +virtual bool invia(char p=priorita_imu); +}; + +class estensimetro : public sensore{ + private: + static const char priorita_estensimetro =4; + static const int nb_classe =17; + float ad,as,pd,ps; // a= anteriore p= posteriore + public: + void set_all(float vad,float vas,float vpd,float vps){ad=vad; as=vas; pd=vpd; ps=vps;} + void set_all(); + virtual bool invia(char p=priorita_estensimetro); +}; + +class ruota_fonica : public sensore{ + private: + static const char priorita_ruota_fonica =4; + static const int nb_classe =17; + float ad,as,pd,ps; // a= anteriore p= posteriore + public: + void set_all(float vad,float vas,float vpd,float vps){ad=vad; as=vas; pd=vpd; ps=vps;} + void set_all(){} + virtual bool invia(char p=priorita_ruota_fonica); +}; + +class motore : public sensore{ + private: + static const char priorita_motore =4; + static const int nb_classe =24; + float P_olio,RMP,velocita; + char marcia,T_acqua,T_olio; + public: + motore():P_olio(0),RMP(0),velocita(0),marcia(0),T_acqua(0),T_olio(0){} + void set_all(char Ta,char To,float Po,float vrmp,float vel, char m){T_acqua=Ta; T_olio=To;P_olio=Po;RMP=vrmp;velocita=vel;marcia=m;} + void set_1(float a,char b){RMP=a;T_acqua=b;} + void set_velocita_gear(float a,char b){velocita=a;marcia=b;} + void set_T_oil(char a){T_olio=a;} + void set_P_oil(float a){P_olio=a;} + + char get_marcia()const{return marcia;} + char get_Tacq()const{return T_acqua;} + char get_Tolio()const{return T_olio;} + float get_Polio()const{return P_olio;} + float get_rmp()const{return RMP;} + float get_vel()const{return velocita;} + + virtual bool invia(char p=priorita_motore); +}; + +class allert{ + public: + bool invia(const char*); +}; +#ifdef tra_cpp + +void led_rpm(int rpm, char a[]){ + + int r=rpm; + + if(r==0)a[0]=a[1]=0xff; + else if(r<3000){a[0]=0xfb;a[1]=0xef;} + else if(r<(3000+1333)){a[0]=0xf3;a[1]=0b11001111;} + else if(r<(3000+1333*2)){a[0]=0xe3;a[1]=0b11000111;} + else if(r<(3000+1333*3)){a[0]=0xc3;a[1]=0b11000011;} + else if(r<(3000+1333*4)){a[0]=0x83;a[1]=0b11000001;} + else if(r<(3000+1333*5)){a[0]=0x03;a[1]=0b11000000;} + else if(r<(11000)){a[0]=0x01;a[1]=0b10000000;} + else {a[0]=0x00;a[1]=0x00;} +} + + +bool trasmetti::pc_trasmisione(int n,char* s) +{// da implementae con funzione che invia i dati su +char ss[30]; + +for(int i=0;i<20;i++)ss[5+i]='X'; +strcpy(ss,s); + + +/*da portare in setting e trovare un modo epr farli risultare qui*/ +const int addr = 0x70; +const int addr1 = 0x72; + + + +char nn[2]; + +char a[2]; + +nn[0]=22; +int rpm; + +//master->frequency(100000);//da portare in setting e non farlo sempre + +//aggiungere condizione di return false se il write fallisce ! + wait_us(10); + + master->write(addr_slave,ss,nn[0]); + wait_us(1); + master->stop(); + + + #define led_genny + + #ifdef led_genny + if(s[0]=='D'){ + rpm=(s[7]-'0')*10000+(s[8]-'0')*1000+(s[9]-'0')*100+(s[10]-'0')*10+s[11]-'0'; + led_rpm(rpm,a); + master->write(addr, a, 1); // Send command string + master->stop(); + master->write(addr1, &a[1], 1); // Send command string + master->stop(); + } + + + #endif + + + // device.printf("%s@",s); + // device2.printf("%s@",s); + + // pc.printf("%s\r\n",ss); + + +return true; +} +#endif +} +#endif \ No newline at end of file