Filtre complémentaire

Dependencies:   FastPWM MPU6050 Gyro_Accelerometre mbed

Gyro_Accelerometre_XYZ.cpp

Committer:
SandrineO
Date:
2018-03-06
Revision:
1:aca3c4b9fcfe
Parent:
0:1096fcacf950
Child:
2:41e642ed448d

File content as of revision 1:aca3c4b9fcfe:

#include "mbed.h"
#include "MPU6050.h"
#include "rtos.h"
#include "FastPWM.h"

DigitalOut myled(LED1);

//****************Init Hardware*****************
Serial pc(USBTX, USBRX); // Initialisation de pc tx, rx -> hyperterminal
Serial Bluetooth(PA_9, PA_10); // Initialisation Bluetooth (D1 et D0)
MPU6050 mpu6050(D4, D5); // Initialisation accéléromètre/ liaison I2C (SDA,SCL)
FastPWM motG1 (D9); //Initialisation PWM
FastPWM motG2 (D10);
FastPWM motD1 (D11);
FastPWM motD2 (D12);

//****************Init constantes*****************
bool test_accelero;// tester la connextion accéléro
float accelero[3]; // init tableau xyz accéléro
float gyro[3]; // init tableau xyz gyro
int Te=1000; // période d'échantillonnage en ms
int flag_affichage=0; // drapeau pour l'affichage des valeurs de l'accéléromètre en dehors de la fonction gyro_thread


void gyro_thread() //fct timer
{
    // **********Test connexion accelerometre********
    test_accelero = mpu6050.testConnection();
    if (test_accelero ==1) {
        pc.printf("test accelero ok\r\n");
    } else {
        pc.printf("test accelero non ok\r\n");
    }//fin if test connexion accelerometre


    //***************Lecture des données de l'inclinaison de l'accelerometre************
    mpu6050.getAccelero(accelero); //donne l'acceleration en m/s2
    mpu6050.getGyro(gyro);
    
    motG1.period_us(50);
    motG1.write(0.5+0.05*accelero[0]); //moteur gauche marche avant
    motG2.period_us(50);
    motG2.write(0.5-0.05*accelero[0]); //moteur gauche marche arrière
    motD1.period_us(50);
    motD1.write(0.5+0.05*accelero[0]); //moteur droit marche avant
    motD2.period_us(50);
    motD2.write(0.5-0.05*accelero[0]); //moteur droit marche arrière
    
    flag_affichage=1;// activation du drapeau

}

// ***************Declaration d'un objet RtosTimer (temps réel) ******************
RtosTimer timer(mbed::callback(gyro_thread),osTimerPeriodic);  //  mbed::callback(gyro_thread)-> excècute la fonction gyro_thread     osTimerPeriodic -> de manière répétitive

int main()
{
    timer.start(Te); // en ms   RtosTimer timer executé sur les secondes

    while(1) {

        if(flag_affichage==1) {
            pc.printf("Xaccelero = %lf ; Yaccelero = %lf ; Zaccelero = %lf \r\n",accelero[0],accelero[1],accelero[2]);
            pc.printf("Xgyro = %lf ; Ygyro = %lf ; Zgyro = %lf \r\n",gyro[0],gyro[1],gyro[2]);
            flag_affichage=0;
        }// fin if flag_affichage

    }//fin while(1)
}//fin main