mbed_2019_rx3

Dependencies:   mbed JY901 TextLCD TinyGPS AsyncSerial PowerControl

main.cpp

Committer:
Minato
Date:
2019-12-23
Revision:
0:be2decb2b61c

File content as of revision 0:be2decb2b61c:

#include "mbed.h"
#include "AsyncSerial.hpp"
#include "TextLCD.h"
#include "string.h"

DigitalOut rudLevel1(p5);
DigitalOut rudLevel2(p6);
DigitalOut rudLevel3(p7);
DigitalOut rudLevel4(p8);
DigitalOut rudLevel5(p11);
DigitalOut rudLevel6(p12);
DigitalOut rudLevel7(p15);

DigitalOut eleLevel1(p21);
DigitalOut eleLevel2(p22);
DigitalOut eleLevel3(p23);
DigitalOut eleLevel4(p24);
DigitalOut eleLevel5(p25);
DigitalOut eleLevel6(p26);
DigitalOut eleLevel7(p29);

DigitalOut beep1(LED1);
DigitalOut beep2(LED2);
DigitalOut beep3(LED3);
DigitalOut beep4(LED4);

DigitalOut beep(p30);

Serial pc(USBTX, USBRX);
AsyncSerial Serial1(p13,p14,9600,256); // tx, rx //rot(out),master(in)
//AsyncSerial Serial2(p9,p10,9600,256);//height(out)
I2C display(p28, p27);// sda, scl
const int addr = 0x4E;// define the I2C Address
TextLCD_I2C lcd(&display,addr,TextLCD::LCD20x4);


//AsyncSerial Serial3(p28,p27,9600,256);//speed(out)
//Ticker flipper;
//Ticker flipper2;
//5-30
//5-8,11,12,13-26,29,30->total:20 free pins
//5-8,11,12,15:RUD
//21-26,29:ELE

/*
struct DATA1{
    float height;
    int rot_count;
    float air_speed;
    float analog[2];//0=ELE 1=RUD
};
DATA1 receive;
*/

//float receive[5];

struct DATA{
    float height;
    int rot_count;
    float air_speed;
    float analog[2];//0=ELE 1=RUD
};
DATA data;

struct DATA2{
    float height;
    int rot_count;
    float air_speed;
    float ele;
    float rud;
    };
    
DATA2 receive;
char a[40];
char *c;
char mheight[6], mrot[4], mspeed[6], mele[9], mrud[9];

Timer t;
//unsigned long time;
int beepTimes;

void ini(){
    /*
    int n;//count
    
    for(n=0 ; n<5 ; n++){
        receive[n] = 0.0;
        }
        */
    
    data.height=0;
    data.rot_count=0;
    data.air_speed=0;
    data.analog[0]=0.0;
    data.analog[1]=0.0;
        
    receive.height = 0.0;
    receive.rot_count = 0;
    receive.air_speed = 0.0;
    receive.ele = 0.0;
    receive.rud = 0.0;
}
//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]);
void dispini(){
        lcd.setBacklight(TextLCD::LightOn);
        
        lcd.locate(0,0);
        lcd.printf("Windnauts2019");
        
        eleLevel1 = 1;rudLevel1 = 1;
        wait_ms(100);
        eleLevel2 = 1;rudLevel2 = 1;
        wait_ms(100);
        eleLevel3 = 1;rudLevel3 = 1;
        wait_ms(100);
        eleLevel4 = 1;rudLevel4 = 1;
        wait_ms(100);
        eleLevel5 = 1;rudLevel5 = 1;
        wait_ms(100);
        eleLevel6 = 1;rudLevel6 = 1;
        wait_ms(100);
        eleLevel7 = 1;rudLevel7 = 1;
        
        
    
        lcd.locate(0,1);
        lcd.printf("Hal Startup...");
    
        
        wait_ms(500);
        eleLevel1 = 0;rudLevel1 = 0;
        wait_ms(100);
        eleLevel2 = 0;rudLevel2 = 0;
        wait_ms(100);
        eleLevel3 = 0;rudLevel3 = 0;
        wait_ms(100);
        eleLevel4 = 0;rudLevel4 = 0;
        wait_ms(100);
        eleLevel5 = 0;rudLevel5 = 0;
        wait_ms(100);
        eleLevel6 = 0;rudLevel6 = 0;
        wait_ms(100);
        eleLevel7 = 0;rudLevel7 = 0;
        lcd.locate(0,2);
        lcd.printf("Stand-by OK");
        wait_ms(500);
                
        eleLevel1 = 0;eleLevel2 = 0;eleLevel3 = 0;eleLevel4 = 0;eleLevel5 = 0;eleLevel6 = 0;eleLevel7 = 0;
        rudLevel1 = 0;rudLevel2 = 0;rudLevel3 = 0;rudLevel4 = 0;rudLevel5 = 0;rudLevel6 = 0;rudLevel7 = 0;
        wait_ms(100);
        
        t.start();
    }
    
 /*   
void displayPrint(){
    }  
    
    */  
    
void ELE(){
    
    if(0.78<=receive.ele){
        eleLevel1 = 1;
        eleLevel2 = 0;
        eleLevel3 = 0;
        eleLevel4 = 1;
        eleLevel5 = 0;
        eleLevel6 = 0;
        eleLevel7 = 0;
        }
    if(0.75<=receive.ele && receive.ele<0.78){
        eleLevel1 = 0;
        eleLevel2 = 1;
        eleLevel3 = 0;
        eleLevel4 = 1;
        eleLevel5 = 0;
        eleLevel6 = 0;
        eleLevel7 = 0;
        }
    if(0.73<=receive.ele && receive.ele<0.75){
        eleLevel1 = 0;
        eleLevel2 = 0;
        eleLevel3 = 1;
        eleLevel4 = 1;
        eleLevel5 = 0;
        eleLevel6 = 0;
        eleLevel7 = 0;
        }
    if(0.67<=receive.ele && receive.ele<0.73){
        eleLevel1 = 0;
        eleLevel2 = 0;
        eleLevel3 = 0;
        eleLevel4 = 1;
        eleLevel5 = 0;
        eleLevel6 = 0;
        eleLevel7 = 0;
        }
    if(0.65<=receive.ele && receive.ele<0.67){
        eleLevel1 = 0;
        eleLevel2 = 0;
        eleLevel3 = 0;
        eleLevel4 = 1;
        eleLevel5 = 1;
        eleLevel6 = 0;
        eleLevel7 = 0;
        }
    if(0.63<=receive.ele && receive.ele<0.65){
        eleLevel1 = 0;
        eleLevel2 = 0;
        eleLevel3 = 0;
        eleLevel4 = 1;
        eleLevel5 = 0;
        eleLevel6 = 1;
        eleLevel7 = 0;
        }
    if(receive.ele<=0.63){
        eleLevel1 = 0;
        eleLevel2 = 0;
        eleLevel3 = 0;
        eleLevel4 = 1;
        eleLevel5 = 0;
        eleLevel6 = 0;
        eleLevel7 = 1;
        }                                
    }
    
void RUD(){
    
    if(0.54<=receive.rud){
        rudLevel1 = 1;
        rudLevel2 = 0;
        rudLevel3 = 0;
        rudLevel4 = 1;
        rudLevel5 = 0;
        rudLevel6 = 0;
        rudLevel7 = 0;
        }
    if(0.52<=receive.rud && receive.rud<0.54){
        rudLevel1 = 0;
        rudLevel2 = 1;
        rudLevel3 = 0;
        rudLevel4 = 1;
        rudLevel5 = 0;
        rudLevel6 = 0;
        rudLevel7 = 0;        
        }
    if(0.49<=receive.rud && receive.rud<0.52){
        rudLevel1 = 0;
        rudLevel2 = 0;
        rudLevel3 = 1;
        rudLevel4 = 1;
        rudLevel5 = 0;
        rudLevel6 = 0;
        rudLevel7 = 0;
        }
    if(0.43<=receive.rud && receive.rud<0.49){
        rudLevel1 = 0;
        rudLevel2 = 0;
        rudLevel3 = 0;
        rudLevel4 = 1;
        rudLevel5 = 0;
        rudLevel6 = 0;
        rudLevel7 = 0;
        }
    if(0.40<=receive.rud && receive.rud<0.43){
        rudLevel1 = 0;
        rudLevel2 = 0;
        rudLevel3 = 0;
        rudLevel4 = 1;
        rudLevel5 = 1;
        rudLevel6 = 0;
        rudLevel7 = 0;
        }
    if(0.38<=receive.rud && receive.rud<0.40){
        rudLevel1 = 0;
        rudLevel2 = 0;
        rudLevel3 = 0;
        rudLevel4 = 1;
        rudLevel5 = 0;
        rudLevel6 = 1;
        rudLevel7 = 0;
        }
    if(receive.rud<0.38){
        rudLevel1 = 0;
        rudLevel2 = 0;
        rudLevel3 = 0;
        rudLevel4 = 1;
        rudLevel5 = 0;
        rudLevel6 = 0;
        rudLevel7 = 1;
        }                            
    }
    
    
void send(){   
        //pc.printf("%f,%f,%f,%f,%f\r\n",receive.height,receive.rot_count,receive.air_speed,receive.ele,receive.rud);
       //display.write(addr, receive, 7, true);

    //lcd.locate(0,0);
    //lcd.printf("abyabya");
    
    lcd.locate(0,0);
    lcd.printf("height:%5.2fm", receive.height);
    
    lcd.locate(0,1);
    lcd.printf("cadence: %3drpm", receive.rot_count/10);
    
    lcd.locate(0,2);
    lcd.printf("speed: %5.2fm/s", receive.air_speed);
    
    
    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);
    pc.printf("divided to mheight:%s,mrot:%s,mspeed:%s,mele:%s,mrud:%s\r\n",mheight,mrot,mspeed,mele,mrud);
    pc.printf("rawReceive %s\n\n",a);
    //pc.printf("%s\r\n",c);
    //pc.printf(Serial1.getc());
    //pc.printf("root2 %c,%c,%c,%c,%c\r\n",a[0],a[1],a[2],a[3],a[4]);
    //pc.printf("%c",);
    }

    
int main(){
    int i=0;//count

    
    ini();
    dispini();
    
    while(1){
            
        //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]);
            while (Serial1.readable() > 0){
                a[i] = Serial1.getc();
               // c[i] = Serial1.getc();

                if(a[i]=='\n'){
 /*                   
                    if(receiveCount == 0){
                        a[i]='\0';
                        receive.height=atof(a);
                        receiveCount++;}
                    if(receiveCount == 1){
                        a[i]='\0';
                        receive.rot_count = atoi(a);
                        receiveCount++;}
                    if(receiveCount == 2){
                        a[i]='\0';
                        receive.air_speed = atof(a);
                        receiveCount++;}
                    if(receiveCount == 3){
                        a[i]='\0';
                        receive.ele = atof(a);
                        receiveCount++;}
                    if(receiveCount == 4){
                        a[i]='\0';
                        receive.rud = atof(a);
                        receiveCount = 0;} 
*/                 
                for(i=0 ; i<5 ; i++)
                    mheight[i] = a[i];
                mheight[5] = '0';
                                  
                for(i=6 ; i<9 ; i++)
                    mrot[i-6] = a[i];
                mrot[3] = '0';

                for(i=10 ; i<15 ; i++)
                    mspeed[i-10] = a[i];
                mspeed[5] = '0';
                
                for(i=16 ; i<24 ; i++)
                    mele[i-16] = a[i];
                mele[8] = '0';
                
                for(i=25 ; i<33 ; i++)
                    mrud[i-25] = a[i];
                mrud[8] = '0';
            
            i = 0;
            receive.height = atof(mheight); 
            receive.rot_count = atof(mrot);
            receive.air_speed = atof(mspeed);
            receive.ele = atof(mele);
            receive.rud = atof(mrud);
            
                            
            
            }else{
                i++;
            }
            

 /*               receive.height = data.height;
                receive.rot_count = (float)data.rot_count;
                receive.air_speed = data.air_speed;
                receive.ele = data.analog[0];
                receive.rud = data.analog[1];*/
             }
          
        
        //lcd.locate(0,0);
        //lcd.printf("hi");
            RUD();
            ELE();
            send();
            wait_ms(1000);

            unsigned long time=t.read_ms()/1000;
            
            if (time%300==0){
                for(beepTimes=0 ; beepTimes<4 ; beepTimes++){
                    beep = 1;
                    beep1 = 1;
                    beep2 = 1;
                    beep3 = 1;
                    beep4 = 1;
                    wait_ms(1000);
                    beep = 0;
                    beep1 = 0;
                    beep2 = 0;
                    beep3 = 0;
                    beep4 = 0;
                    }};
    }
}