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
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
Generated on Sun Jul 17 2022 15:08:00 by 1.7.2