![](/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
trasmetti.h
- Committer:
- rattokiller
- Date:
- 2017-11-05
- Revision:
- 0:a9753886e1e0
File content as of revision 0:a9753886e1e0:
//#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