Programme réalisé dans le cadre de projet RICM4 à Polytech Grenoble. Le but est d'instrumenter un monoski qui participer à la course du Défi Foly 2015 à La Clusaz grâce à la carte STM32 Nucleo et ainsi récupérer le mesures sur un carte SD

Dependencies:   Nucleo_Sensor_Shield SDFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SDFileSystem.h"
00003 #include "x_cube_mems.h"
00004 
00005 DigitalIn bouton(USER_BUTTON);
00006 //DigitalOut myled(LED1);
00007 
00008 //Initialisation de la communication avec la carte SD via SPI
00009 SDFileSystem sd(D11, D12, D13, D10, "sd");
00010 
00011 //Déclaration des variables pour les capteurs
00012 volatile float TEMPERATURE_Value_C;
00013 volatile float HUMIDITY_Value;
00014 volatile float PRESSURE_Value;
00015 volatile AxesRaw_TypeDef MAG_Value;
00016 volatile AxesRaw_TypeDef ACC_Value;
00017 volatile AxesRaw_TypeDef GYR_Value;
00018 
00019 
00020 // Creation de l'objet carte MEMS 
00021 static X_CUBE_MEMS *mems_expansion_board = X_CUBE_MEMS::Instance();
00022 
00023 // Fonction permettant la prise de mesure de tous les capteurs instantanément                    
00024 void capture_donnees (){
00025     mems_expansion_board->hts221.GetTemperature((float *)&TEMPERATURE_Value_C);
00026     mems_expansion_board->hts221.GetHumidity((float *)&HUMIDITY_Value);
00027     mems_expansion_board->lps25h.GetPressure((float *)&PRESSURE_Value);
00028     mems_expansion_board->lis3mdl.GetAxes((AxesRaw_TypeDef *)&MAG_Value);
00029     mems_expansion_board->lsm6ds0.Acc_GetAxes((AxesRaw_TypeDef *)&ACC_Value);
00030     mems_expansion_board->lsm6ds0.Gyro_GetAxes((AxesRaw_TypeDef *)&GYR_Value);
00031     }           
00032 
00033 
00034 
00035 int main() {
00036     
00037     // Attente de l'action de l'utilisateur pour lancer la capture des données
00038     while(bouton != 0){
00039         wait(0.1);
00040     }
00041     
00042     mkdir("/sd/DefiFoly2015", 0777);
00043     //Création du fichier s'il n'existe pas et écriture de l'entete utile pour le parser
00044     FILE *fichier = fopen("/sd/DefiFoly2015/run.txt", "a");
00045     fprintf(fichier, "P\tT\tH\tAccX\tAccY\tAccZ\tGyrX\tGyrY\tGyrZ\tMagX\tMagY\tMagZ\n");
00046     
00047     //Capture des données et écriture dans le fichier jusqu'à une pression de bouton
00048     while(bouton != 0){
00049         
00050         capture_donnees();
00051          wait(0.01);
00052         if (fichier != NULL){    
00053         fprintf(fichier,"%f\t%f\t%f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", PRESSURE_Value, TEMPERATURE_Value_C, HUMIDITY_Value, 
00054                                                                             ACC_Value.AXIS_X, ACC_Value.AXIS_Y, ACC_Value.AXIS_Z, 
00055                                                                             GYR_Value.AXIS_X, GYR_Value.AXIS_Y, GYR_Value.AXIS_Z, 
00056                                                                             MAG_Value.AXIS_X, MAG_Value.AXIS_Y, MAG_Value.AXIS_Z);
00057         }
00058        
00059     }
00060     //Fermeture du fichier une fois le run terminé
00061     fclose(fichier);
00062     return 0;
00063 }
00064