mbed_2019_rx3

Dependencies:   mbed JY901 TextLCD TinyGPS AsyncSerial PowerControl

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "AsyncSerial.hpp"
00003 #include "TextLCD.h"
00004 #include "string.h"
00005 
00006 DigitalOut rudLevel1(p5);
00007 DigitalOut rudLevel2(p6);
00008 DigitalOut rudLevel3(p7);
00009 DigitalOut rudLevel4(p8);
00010 DigitalOut rudLevel5(p11);
00011 DigitalOut rudLevel6(p12);
00012 DigitalOut rudLevel7(p15);
00013 
00014 DigitalOut eleLevel1(p21);
00015 DigitalOut eleLevel2(p22);
00016 DigitalOut eleLevel3(p23);
00017 DigitalOut eleLevel4(p24);
00018 DigitalOut eleLevel5(p25);
00019 DigitalOut eleLevel6(p26);
00020 DigitalOut eleLevel7(p29);
00021 
00022 DigitalOut beep1(LED1);
00023 DigitalOut beep2(LED2);
00024 DigitalOut beep3(LED3);
00025 DigitalOut beep4(LED4);
00026 
00027 DigitalOut beep(p30);
00028 
00029 Serial pc(USBTX, USBRX);
00030 AsyncSerial Serial1(p13,p14,9600,256); // tx, rx //rot(out),master(in)
00031 //AsyncSerial Serial2(p9,p10,9600,256);//height(out)
00032 I2C display(p28, p27);// sda, scl
00033 const int addr = 0x4E;// define the I2C Address
00034 TextLCD_I2C lcd(&display,addr,TextLCD::LCD20x4);
00035 
00036 
00037 //AsyncSerial Serial3(p28,p27,9600,256);//speed(out)
00038 //Ticker flipper;
00039 //Ticker flipper2;
00040 //5-30
00041 //5-8,11,12,13-26,29,30->total:20 free pins
00042 //5-8,11,12,15:RUD
00043 //21-26,29:ELE
00044 
00045 /*
00046 struct DATA1{
00047     float height;
00048     int rot_count;
00049     float air_speed;
00050     float analog[2];//0=ELE 1=RUD
00051 };
00052 DATA1 receive;
00053 */
00054 
00055 //float receive[5];
00056 
00057 struct DATA{
00058     float height;
00059     int rot_count;
00060     float air_speed;
00061     float analog[2];//0=ELE 1=RUD
00062 };
00063 DATA data;
00064 
00065 struct DATA2{
00066     float height;
00067     int rot_count;
00068     float air_speed;
00069     float ele;
00070     float rud;
00071     };
00072     
00073 DATA2 receive;
00074 char a[40];
00075 char *c;
00076 char mheight[6], mrot[4], mspeed[6], mele[9], mrud[9];
00077 
00078 Timer t;
00079 //unsigned long time;
00080 int beepTimes;
00081 
00082 void ini(){
00083     /*
00084     int n;//count
00085     
00086     for(n=0 ; n<5 ; n++){
00087         receive[n] = 0.0;
00088         }
00089         */
00090     
00091     data.height=0;
00092     data.rot_count=0;
00093     data.air_speed=0;
00094     data.analog[0]=0.0;
00095     data.analog[1]=0.0;
00096         
00097     receive.height = 0.0;
00098     receive.rot_count = 0;
00099     receive.air_speed = 0.0;
00100     receive.ele = 0.0;
00101     receive.rud = 0.0;
00102 }
00103 //receive data => Serial2.printf("%5.2,%3d,%5.2f,%7f,%7f",(float)data.height/1000,data.rot_count,data.air_speed,data.a,data.b,data.fmps,data.angle[0],data.analog[0],data.analog[1]);
00104 void dispini(){
00105         lcd.setBacklight(TextLCD::LightOn);
00106         
00107         lcd.locate(0,0);
00108         lcd.printf("Windnauts2019");
00109         
00110         eleLevel1 = 1;rudLevel1 = 1;
00111         wait_ms(100);
00112         eleLevel2 = 1;rudLevel2 = 1;
00113         wait_ms(100);
00114         eleLevel3 = 1;rudLevel3 = 1;
00115         wait_ms(100);
00116         eleLevel4 = 1;rudLevel4 = 1;
00117         wait_ms(100);
00118         eleLevel5 = 1;rudLevel5 = 1;
00119         wait_ms(100);
00120         eleLevel6 = 1;rudLevel6 = 1;
00121         wait_ms(100);
00122         eleLevel7 = 1;rudLevel7 = 1;
00123         
00124         
00125     
00126         lcd.locate(0,1);
00127         lcd.printf("Hal Startup...");
00128     
00129         
00130         wait_ms(500);
00131         eleLevel1 = 0;rudLevel1 = 0;
00132         wait_ms(100);
00133         eleLevel2 = 0;rudLevel2 = 0;
00134         wait_ms(100);
00135         eleLevel3 = 0;rudLevel3 = 0;
00136         wait_ms(100);
00137         eleLevel4 = 0;rudLevel4 = 0;
00138         wait_ms(100);
00139         eleLevel5 = 0;rudLevel5 = 0;
00140         wait_ms(100);
00141         eleLevel6 = 0;rudLevel6 = 0;
00142         wait_ms(100);
00143         eleLevel7 = 0;rudLevel7 = 0;
00144         lcd.locate(0,2);
00145         lcd.printf("Stand-by OK");
00146         wait_ms(500);
00147                 
00148         eleLevel1 = 0;eleLevel2 = 0;eleLevel3 = 0;eleLevel4 = 0;eleLevel5 = 0;eleLevel6 = 0;eleLevel7 = 0;
00149         rudLevel1 = 0;rudLevel2 = 0;rudLevel3 = 0;rudLevel4 = 0;rudLevel5 = 0;rudLevel6 = 0;rudLevel7 = 0;
00150         wait_ms(100);
00151         
00152         t.start();
00153     }
00154     
00155  /*   
00156 void displayPrint(){
00157     }  
00158     
00159     */  
00160     
00161 void ELE(){
00162     
00163     if(0.78<=receive.ele){
00164         eleLevel1 = 1;
00165         eleLevel2 = 0;
00166         eleLevel3 = 0;
00167         eleLevel4 = 1;
00168         eleLevel5 = 0;
00169         eleLevel6 = 0;
00170         eleLevel7 = 0;
00171         }
00172     if(0.75<=receive.ele && receive.ele<0.78){
00173         eleLevel1 = 0;
00174         eleLevel2 = 1;
00175         eleLevel3 = 0;
00176         eleLevel4 = 1;
00177         eleLevel5 = 0;
00178         eleLevel6 = 0;
00179         eleLevel7 = 0;
00180         }
00181     if(0.73<=receive.ele && receive.ele<0.75){
00182         eleLevel1 = 0;
00183         eleLevel2 = 0;
00184         eleLevel3 = 1;
00185         eleLevel4 = 1;
00186         eleLevel5 = 0;
00187         eleLevel6 = 0;
00188         eleLevel7 = 0;
00189         }
00190     if(0.67<=receive.ele && receive.ele<0.73){
00191         eleLevel1 = 0;
00192         eleLevel2 = 0;
00193         eleLevel3 = 0;
00194         eleLevel4 = 1;
00195         eleLevel5 = 0;
00196         eleLevel6 = 0;
00197         eleLevel7 = 0;
00198         }
00199     if(0.65<=receive.ele && receive.ele<0.67){
00200         eleLevel1 = 0;
00201         eleLevel2 = 0;
00202         eleLevel3 = 0;
00203         eleLevel4 = 1;
00204         eleLevel5 = 1;
00205         eleLevel6 = 0;
00206         eleLevel7 = 0;
00207         }
00208     if(0.63<=receive.ele && receive.ele<0.65){
00209         eleLevel1 = 0;
00210         eleLevel2 = 0;
00211         eleLevel3 = 0;
00212         eleLevel4 = 1;
00213         eleLevel5 = 0;
00214         eleLevel6 = 1;
00215         eleLevel7 = 0;
00216         }
00217     if(receive.ele<=0.63){
00218         eleLevel1 = 0;
00219         eleLevel2 = 0;
00220         eleLevel3 = 0;
00221         eleLevel4 = 1;
00222         eleLevel5 = 0;
00223         eleLevel6 = 0;
00224         eleLevel7 = 1;
00225         }                                
00226     }
00227     
00228 void RUD(){
00229     
00230     if(0.54<=receive.rud){
00231         rudLevel1 = 1;
00232         rudLevel2 = 0;
00233         rudLevel3 = 0;
00234         rudLevel4 = 1;
00235         rudLevel5 = 0;
00236         rudLevel6 = 0;
00237         rudLevel7 = 0;
00238         }
00239     if(0.52<=receive.rud && receive.rud<0.54){
00240         rudLevel1 = 0;
00241         rudLevel2 = 1;
00242         rudLevel3 = 0;
00243         rudLevel4 = 1;
00244         rudLevel5 = 0;
00245         rudLevel6 = 0;
00246         rudLevel7 = 0;        
00247         }
00248     if(0.49<=receive.rud && receive.rud<0.52){
00249         rudLevel1 = 0;
00250         rudLevel2 = 0;
00251         rudLevel3 = 1;
00252         rudLevel4 = 1;
00253         rudLevel5 = 0;
00254         rudLevel6 = 0;
00255         rudLevel7 = 0;
00256         }
00257     if(0.43<=receive.rud && receive.rud<0.49){
00258         rudLevel1 = 0;
00259         rudLevel2 = 0;
00260         rudLevel3 = 0;
00261         rudLevel4 = 1;
00262         rudLevel5 = 0;
00263         rudLevel6 = 0;
00264         rudLevel7 = 0;
00265         }
00266     if(0.40<=receive.rud && receive.rud<0.43){
00267         rudLevel1 = 0;
00268         rudLevel2 = 0;
00269         rudLevel3 = 0;
00270         rudLevel4 = 1;
00271         rudLevel5 = 1;
00272         rudLevel6 = 0;
00273         rudLevel7 = 0;
00274         }
00275     if(0.38<=receive.rud && receive.rud<0.40){
00276         rudLevel1 = 0;
00277         rudLevel2 = 0;
00278         rudLevel3 = 0;
00279         rudLevel4 = 1;
00280         rudLevel5 = 0;
00281         rudLevel6 = 1;
00282         rudLevel7 = 0;
00283         }
00284     if(receive.rud<0.38){
00285         rudLevel1 = 0;
00286         rudLevel2 = 0;
00287         rudLevel3 = 0;
00288         rudLevel4 = 1;
00289         rudLevel5 = 0;
00290         rudLevel6 = 0;
00291         rudLevel7 = 1;
00292         }                            
00293     }
00294     
00295     
00296 void send(){   
00297         //pc.printf("%f,%f,%f,%f,%f\r\n",receive.height,receive.rot_count,receive.air_speed,receive.ele,receive.rud);
00298        //display.write(addr, receive, 7, true);
00299 
00300     //lcd.locate(0,0);
00301     //lcd.printf("abyabya");
00302     
00303     lcd.locate(0,0);
00304     lcd.printf("height:%5.2fm", receive.height);
00305     
00306     lcd.locate(0,1);
00307     lcd.printf("cadence: %3drpm", receive.rot_count/10);
00308     
00309     lcd.locate(0,2);
00310     lcd.printf("speed: %5.2fm/s", receive.air_speed);
00311     
00312     
00313     pc.printf("receive height:%5.2f,rot:%3d,speed:%5.2f,ele:%7f,rud:%7f\r\n",receive.height,receive.rot_count,receive.air_speed,receive.ele,receive.rud);
00314     pc.printf("divided to mheight:%s,mrot:%s,mspeed:%s,mele:%s,mrud:%s\r\n",mheight,mrot,mspeed,mele,mrud);
00315     pc.printf("rawReceive %s\n\n",a);
00316     //pc.printf("%s\r\n",c);
00317     //pc.printf(Serial1.getc());
00318     //pc.printf("root2 %c,%c,%c,%c,%c\r\n",a[0],a[1],a[2],a[3],a[4]);
00319     //pc.printf("%c",);
00320     }
00321 
00322     
00323 int main(){
00324     int i=0;//count
00325 
00326     
00327     ini();
00328     dispini();
00329     
00330     while(1){
00331             
00332         //receive-> Serial2.printf("%5.2f,%3d,%5.2f,%7f,%7f\r\n",(float)data.height/1000,data.rot_count,data.air_speed,data.analog[0],data.analog[1]);
00333             while (Serial1.readable() > 0){
00334                 a[i] = Serial1.getc();
00335                // c[i] = Serial1.getc();
00336 
00337                 if(a[i]=='\n'){
00338  /*                   
00339                     if(receiveCount == 0){
00340                         a[i]='\0';
00341                         receive.height=atof(a);
00342                         receiveCount++;}
00343                     if(receiveCount == 1){
00344                         a[i]='\0';
00345                         receive.rot_count = atoi(a);
00346                         receiveCount++;}
00347                     if(receiveCount == 2){
00348                         a[i]='\0';
00349                         receive.air_speed = atof(a);
00350                         receiveCount++;}
00351                     if(receiveCount == 3){
00352                         a[i]='\0';
00353                         receive.ele = atof(a);
00354                         receiveCount++;}
00355                     if(receiveCount == 4){
00356                         a[i]='\0';
00357                         receive.rud = atof(a);
00358                         receiveCount = 0;} 
00359 */                 
00360                 for(i=0 ; i<5 ; i++)
00361                     mheight[i] = a[i];
00362                 mheight[5] = '0';
00363                                   
00364                 for(i=6 ; i<9 ; i++)
00365                     mrot[i-6] = a[i];
00366                 mrot[3] = '0';
00367 
00368                 for(i=10 ; i<15 ; i++)
00369                     mspeed[i-10] = a[i];
00370                 mspeed[5] = '0';
00371                 
00372                 for(i=16 ; i<24 ; i++)
00373                     mele[i-16] = a[i];
00374                 mele[8] = '0';
00375                 
00376                 for(i=25 ; i<33 ; i++)
00377                     mrud[i-25] = a[i];
00378                 mrud[8] = '0';
00379             
00380             i = 0;
00381             receive.height = atof(mheight); 
00382             receive.rot_count = atof(mrot);
00383             receive.air_speed = atof(mspeed);
00384             receive.ele = atof(mele);
00385             receive.rud = atof(mrud);
00386             
00387                             
00388             
00389             }else{
00390                 i++;
00391             }
00392             
00393 
00394  /*               receive.height = data.height;
00395                 receive.rot_count = (float)data.rot_count;
00396                 receive.air_speed = data.air_speed;
00397                 receive.ele = data.analog[0];
00398                 receive.rud = data.analog[1];*/
00399              }
00400           
00401         
00402         //lcd.locate(0,0);
00403         //lcd.printf("hi");
00404             RUD();
00405             ELE();
00406             send();
00407             wait_ms(1000);
00408 
00409             unsigned long time=t.read_ms()/1000;
00410             
00411             if (time%300==0){
00412                 for(beepTimes=0 ; beepTimes<4 ; beepTimes++){
00413                     beep = 1;
00414                     beep1 = 1;
00415                     beep2 = 1;
00416                     beep3 = 1;
00417                     beep4 = 1;
00418                     wait_ms(1000);
00419                     beep = 0;
00420                     beep1 = 0;
00421                     beep2 = 0;
00422                     beep3 = 0;
00423                     beep4 = 0;
00424                     }};
00425     }
00426 }
00427