Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:0d257bbf5c05
- Child:
- 1:b44f69eb07c4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 11 08:00:49 2021 +0000 @@ -0,0 +1,112 @@ +#include "mbed.h" +#include "rtos.h" +#include "MPU6050.h" + +// déclaration des objets +Serial pc(USBTX, USBRX); +DigitalOut led(LED1); +MPU6050 module(I2C_SDA, I2C_SCL); + +// valeur de Te +float tems = 10; + +// varailble necessire à la mesure de la position angulaire du gyropode +float accelero[3]= {0}; +float gyro[3] = {0}; +float tauFC = 1; // constante de tyemps en seconde du filtre passe bas du filtre complémentaire +float aFC, bFC; // les coefficient du filter passe bas du filtre complémentaire +float angleATG ,angleNF, angleGyro ,omegarGyro, angleGyrop; + + + +int nbInc=0; +char flagInterupt=0; + +void reception(char ch) +{ + static int i=0; // inice du dernier caratère recu + static char chaine[10]; // chaine de stockage des caratères recus + char commande[3]; // chaine contenant la commande + char valeur[6]; // chaine contenant la valeur + + if ((ch==13) or (ch==10)) { + + chaine[i]='\0'; + + // séparation de la commande et de la valeur + strcpy(commande, strtok(chaine, " ")); + strcpy(valeur, strtok(NULL, " ")); + + // affichage de commande et valeur + pc.printf("Commande %s \n\r",commande); + pc.printf("Valeur %s \n\r",valeur); + + // reinitialisation de l indice de chaine + i = 0; + + } else { + chaine[i]=ch; + i++; + } +} + +void interupt() +{ + nbInc++; +//lecture des données de l'accéléro et du gyro + module.getAccelero(accelero); + module.getGyro(gyro); +// + angleATG = atan2(accelero[0],accelero[1]); + omegarGyro = gyro[3]; + + angleNF = angleATG + tauFC * omegarGyro; + angleGyro = aFC*( angleNF + bFC * angleGyrop); + + + + +// memorisation des valeurs precedante pour les filtres recursifs + angleGyrop = angleGyro ; + + + flagInterupt=1; +} + +RtosTimer timer(mbed::callback(interupt),osTimerPeriodic); + +int main() +{ + pc.printf("Test unitaire mecatro \n\r"); + + + + +// initialisation et test de connection du MPU6050 + while (module.testConnection()==0) { + pc.printf("not connected to mpu\n\r"); + wait(1); + } + //changement du l'echelle du module + module.setGyroRange(MPU6050_GYRO_RANGE_2000); + module.setAcceleroRange(MPU6050_ACCELERO_RANGE_2G); + +// calcul des coefficients des filtres + aFC=(float)1/(1+tauFC/(tems/1000)); + bFC=tauFC/(tems/1000); + + + +// initialisation de la latache periodique du noyau multitache + timer.start(tems); + + while(1) { + if (pc.readable()!=0) { + reception(pc.getc()); + } + if (flagInterupt==1) { + pc.printf("Ax = %3.2f, Ay = %3.2f, Az = %3.2f Wx = %3.2f, wy = %3.2f, wz = %3.2f \n\r",accelero[0],accelero[1],accelero[2],gyro[0],gyro[1],gyro[2]); + flagInterupt=0; + } + } +} \ No newline at end of file