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

main.cpp

Committer:
quentin74100
Date:
2015-04-08
Revision:
0:d626d162d0ae

File content as of revision 0:d626d162d0ae:

#include "mbed.h"
#include "SDFileSystem.h"
#include "x_cube_mems.h"

DigitalIn bouton(USER_BUTTON);
//DigitalOut myled(LED1);

//Initialisation de la communication avec la carte SD via SPI
SDFileSystem sd(D11, D12, D13, D10, "sd");

//Déclaration des variables pour les capteurs
volatile float TEMPERATURE_Value_C;
volatile float HUMIDITY_Value;
volatile float PRESSURE_Value;
volatile AxesRaw_TypeDef MAG_Value;
volatile AxesRaw_TypeDef ACC_Value;
volatile AxesRaw_TypeDef GYR_Value;


// Creation de l'objet carte MEMS 
static X_CUBE_MEMS *mems_expansion_board = X_CUBE_MEMS::Instance();

// Fonction permettant la prise de mesure de tous les capteurs instantanément                    
void capture_donnees (){
    mems_expansion_board->hts221.GetTemperature((float *)&TEMPERATURE_Value_C);
    mems_expansion_board->hts221.GetHumidity((float *)&HUMIDITY_Value);
    mems_expansion_board->lps25h.GetPressure((float *)&PRESSURE_Value);
    mems_expansion_board->lis3mdl.GetAxes((AxesRaw_TypeDef *)&MAG_Value);
    mems_expansion_board->lsm6ds0.Acc_GetAxes((AxesRaw_TypeDef *)&ACC_Value);
    mems_expansion_board->lsm6ds0.Gyro_GetAxes((AxesRaw_TypeDef *)&GYR_Value);
    }           



int main() {
    
    // Attente de l'action de l'utilisateur pour lancer la capture des données
    while(bouton != 0){
        wait(0.1);
    }
    
    mkdir("/sd/DefiFoly2015", 0777);
    //Création du fichier s'il n'existe pas et écriture de l'entete utile pour le parser
    FILE *fichier = fopen("/sd/DefiFoly2015/run.txt", "a");
    fprintf(fichier, "P\tT\tH\tAccX\tAccY\tAccZ\tGyrX\tGyrY\tGyrZ\tMagX\tMagY\tMagZ\n");
    
    //Capture des données et écriture dans le fichier jusqu'à une pression de bouton
    while(bouton != 0){
        
        capture_donnees();
         wait(0.01);
        if (fichier != NULL){    
        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, 
                                                                            ACC_Value.AXIS_X, ACC_Value.AXIS_Y, ACC_Value.AXIS_Z, 
                                                                            GYR_Value.AXIS_X, GYR_Value.AXIS_Y, GYR_Value.AXIS_Z, 
                                                                            MAG_Value.AXIS_X, MAG_Value.AXIS_Y, MAG_Value.AXIS_Z);
        }
       
    }
    //Fermeture du fichier une fois le run terminé
    fclose(fichier);
    return 0;
}