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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers trasmetti.h Source File

trasmetti.h

00001 //#ifndef mydati_h
00002 //#odefine mydati_h
00003 #include "mbed.h"
00004 
00005 
00006 
00007 Serial pc(USBTX, USBRX); // tx, rx
00008 
00009 #ifndef mydati_h
00010 #define mydati_h
00011 extern Serial pc;
00012 extern Serial device;
00013 extern Serial device2;
00014 
00015 namespace  mydati{
00016 
00017 bool pc_trasmisione(int,char* s);
00018 
00019     struct pacco{
00020     char* txt;
00021     char n;
00022     };
00023     
00024 class trasmetti{ /* classe superiore che ha il compito di interagire con l' altra scheda,
00025                  le altre sottoclassi si intrfacciano a lei */
00026 private:
00027     int addr_slave;
00028     I2C* master;
00029     char conteggio;
00030 
00031     struct coda{
00032     char priorita;
00033     pacco* dato;
00034     coda* suc;
00035     };
00036     coda* testa;
00037     coda* fine;
00038     char n;
00039     void extract(pacco**);
00040 public:
00041 trasmetti():n(0){testa=fine=0;}
00042 
00043 void set_add(int a){addr_slave=a;}
00044 void set_master(I2C* a){master=a;}
00045 
00046 bool ins_in_coda(pacco* ,char priorita= 0);
00047 bool ins_priorita(pacco* ,char priorita= 0);
00048 bool ins_in_testa(pacco* ,char priorita= 0);
00049 
00050 bool pc_trasmisione(int n,char* s);
00051 
00052 bool invio();
00053 }
00054 //serve perche deve essere unina per tutti e quindi di variabile di qeusta classe ne deve essere creata solo una
00055 #ifdef tra_cpp 
00056 telemetria;
00057 #else
00058 ;
00059 extern trasmetti telemetria;
00060 #endif
00061 class sensore{ //classe generia appezotata, da riempire sucesivamente per oblicare alle altri figlie di implemetare la funzione
00062     private:
00063     static const int max_n=10;
00064     int n;
00065     
00066     public:
00067     sensore():n(-1){}
00068     virtual bool invia(char p=0)=0;
00069     int number(){n++;n=n%max_n;return n;}
00070     virtual ~sensore(){}
00071 };
00072 
00073 
00074 /*le sucesive classi hanno il compito di legere i dati dal sensore 
00075 e di inviari interfaciandosi con la classe di sopra, 
00076 le funzioni che prendoi i dati vengono cambiate, c'è un set_all che viene implementato in mbed, 
00077 l' altro serve a me per testare il tutto con il cp
00078 */
00079 class dati_imu : public sensore{
00080 private:
00081 static const char priorita_imu =5;
00082 static const int nb_classe =25;
00083     float ax,ay,az;
00084     float gx,gy,gz;
00085     float pich,roll,yaw;
00086     float temp;
00087     static const int off_set_a=2000;
00088     static const int off_set_g=1000;
00089 public:
00090 //dati_imu():sensore(),ax(0),ay(0),az(0),gx(0),gy(0),gz(0),pich(0),roll(0),yaw(0),temp(0){}
00091 
00092 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
00093     ax=a;ay=b;az=c;gx=d;gy=e;gz=f;pich=g;roll=h;yaw=i;temp=t;   
00094     }
00095 void set_all(); 
00096 
00097 virtual bool invia(char p=priorita_imu);
00098 };
00099 
00100 class estensimetro : public sensore{
00101     private:
00102         static const char priorita_estensimetro =4;
00103         static const int nb_classe =17;
00104         float ad,as,pd,ps; // a= anteriore p= posteriore
00105     public:
00106         void set_all(float vad,float vas,float vpd,float vps){ad=vad; as=vas; pd=vpd; ps=vps;}
00107         void set_all(); 
00108         virtual bool invia(char p=priorita_estensimetro);
00109 };
00110 
00111 class ruota_fonica : public sensore{
00112     private:
00113         static const char priorita_ruota_fonica =4;
00114         static const int nb_classe =17;
00115         float ad,as,pd,ps; // a= anteriore p= posteriore
00116     public:
00117         void set_all(float vad,float vas,float vpd,float vps){ad=vad; as=vas; pd=vpd; ps=vps;}
00118         void set_all(){}
00119         virtual bool invia(char p=priorita_ruota_fonica);
00120 };
00121 
00122 class motore : public sensore{
00123     private:
00124         static const char priorita_motore =4;
00125         static const int nb_classe =24;
00126         float  P_olio,RMP,velocita;
00127         char marcia,T_acqua,T_olio;
00128     public:
00129         motore():P_olio(0),RMP(0),velocita(0),marcia(0),T_acqua(0),T_olio(0){}
00130         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;}
00131         void set_1(float a,char b){RMP=a;T_acqua=b;}
00132         void set_velocita_gear(float a,char b){velocita=a;marcia=b;}
00133         void set_T_oil(char a){T_olio=a;}
00134         void set_P_oil(float a){P_olio=a;}
00135         
00136         char get_marcia()const{return marcia;}
00137         char get_Tacq()const{return T_acqua;}
00138         char get_Tolio()const{return T_olio;}
00139         float get_Polio()const{return P_olio;}
00140         float get_rmp()const{return RMP;}
00141         float get_vel()const{return velocita;}
00142         
00143         virtual bool invia(char p=priorita_motore);
00144 };
00145 
00146 class allert{
00147     public:
00148     bool invia(const char*);
00149 };
00150 #ifdef tra_cpp 
00151 
00152 void led_rpm(int rpm, char a[]){
00153     
00154     int r=rpm;
00155 
00156     if(r==0)a[0]=a[1]=0xff;
00157     else if(r<3000){a[0]=0xfb;a[1]=0xef;}
00158     else if(r<(3000+1333)){a[0]=0xf3;a[1]=0b11001111;}
00159     else if(r<(3000+1333*2)){a[0]=0xe3;a[1]=0b11000111;}
00160     else if(r<(3000+1333*3)){a[0]=0xc3;a[1]=0b11000011;}
00161     else if(r<(3000+1333*4)){a[0]=0x83;a[1]=0b11000001;}
00162     else if(r<(3000+1333*5)){a[0]=0x03;a[1]=0b11000000;}
00163     else if(r<(11000)){a[0]=0x01;a[1]=0b10000000;}
00164     else {a[0]=0x00;a[1]=0x00;}
00165 }
00166 
00167 
00168 bool trasmetti::pc_trasmisione(int n,char* s)
00169 {// da implementae con funzione che invia i dati su
00170 char ss[30];
00171 
00172 for(int i=0;i<20;i++)ss[5+i]='X';
00173 strcpy(ss,s);
00174 
00175 
00176 /*da portare in setting e trovare un modo epr farli risultare qui*/
00177 const int addr = 0x70;
00178 const int addr1 = 0x72;
00179 
00180 
00181 
00182 char nn[2];
00183 
00184 char a[2];
00185 
00186 nn[0]=22;
00187 int rpm;
00188 
00189 //master->frequency(100000);//da portare in setting e non farlo sempre
00190 
00191 //aggiungere condizione di return false se il write fallisce !
00192         wait_us(10);  
00193         
00194         master->write(addr_slave,ss,nn[0]);
00195         wait_us(1);
00196         master->stop();
00197         
00198         
00199   #define led_genny
00200     
00201     #ifdef led_genny
00202          if(s[0]=='D'){
00203             rpm=(s[7]-'0')*10000+(s[8]-'0')*1000+(s[9]-'0')*100+(s[10]-'0')*10+s[11]-'0';    
00204             led_rpm(rpm,a);
00205             master->write(addr, a, 1);    // Send command string
00206             master->stop();
00207             master->write(addr1, &a[1], 1);    // Send command string
00208             master->stop();
00209           }
00210         
00211         
00212    #endif     
00213         
00214     
00215     //  device.printf("%s@",s);
00216      // device2.printf("%s@",s);
00217      
00218       // pc.printf("%s\r\n",ss); 
00219          
00220 
00221 return true;    
00222 }
00223 #endif
00224 }
00225 #endif