cette fois faites import plutot que modifier direct bande de gredins

Dependencies:   GYRO_DISCO_L476VG mbed BSP_DISCO_L476VG COMPASS_DISCO_L476VG

main.cpp

Committer:
Leonnn
Date:
2020-06-16
Revision:
10:9a563a22a5e7
Parent:
9:187f56fa6db5

File content as of revision 10:9a563a22a5e7:

#include "mbed.h"
#include "GYRO_DISCO_L476VG.h"
#include "COMPASS_DISCO_L476VG.h"
#define PI 3.14159265358979323846

double coef[2];
double xn[2];
double yn[2];

COMPASS_DISCO_L476VG compass;
GYRO_DISCO_L476VG gyro;

Serial pc(SERIAL_TX, SERIAL_RX);
Ticker tick_mesure;

volatile bool flag_mesure = 0;

void mesure(void){flag_mesure = 1;}//-------------------------------------------ISR mesure

void coef_filtre_PB(double H0,double f0,double Te,double* coef){
    coef[0] = (H0*Te)/(Te+2*(1/(2*PI*f0)));
    coef[1] = (Te-2*(1/(2*PI*f0)))/(Te+2*(1/(2*PI*f0)));
}

void filtre_PB(double* xn,double* yn,double* coef){
    yn[0] = -coef[1]*yn[1] + coef[0]*(xn[0]+xn[1]);  
    yn[1] = yn[0];
    xn[1] = xn[0];
}

int main()///////////////////////////////////////////////////////////////////////////////////////////
{
    float GyroBuffer[3], offsetGyr, GyrY;
    offsetGyr = 0;
    wait(0.5);
    for(int i=0; i<100; i++){//     --------------------------------------------séquence de mise à 0
        gyro.GetXYZ(GyroBuffer);
        offsetGyr = offsetGyr + GyroBuffer[1];
    }
    offsetGyr = offsetGyr/100;//------------------------------------------------------fin mise à 0
    
    tick_mesure.attach(&mesure, 0.01);
    pc.baud(115200);
    
    unsigned int count = 0;   
    float Gyr_angle = 0;
    float Acc_angle;
    int16_t AccBuffer[3];
    
    coef_filtre_PB((double)1,(double)0.5,(double)0.01,coef);//------------------calcul coeff acc
    
    while(1) { //////////////////////////////////////////////////////////////////////////////////////
        if(flag_mesure){//  mesure Gyro
            gyro.GetXYZ(GyroBuffer);//------------------------------------------get gyro
            GyrY = GyroBuffer[1]-offsetGyr;//--------------------------------------compensation gyro
            Gyr_angle = Gyr_angle + GyrY/100000;//------------------------------clacul gyro (intégration)
            
            compass.AccGetXYZ(AccBuffer); //------------------------------------get acc
            Acc_angle = atan2((float)AccBuffer[0], (float)AccBuffer[2])*180.0/PI-3.32;//calcul acc + compensation
            xn[0] = Acc_angle;//------------------------------------------------début filtrage acc
            filtre_PB(xn,yn,coef);
            Acc_angle = yn[0];//------------------------------------------------fin filtrage acc
            if(count > 9){     
                pc.printf("$%f %f;", Acc_angle, Gyr_angle);
                count = 0;
            }
            else
                count++;
            flag_mesure = 0;
        }
        //wait(0.1);
    }
}