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
Diff: main.cpp
- Revision:
- 0:d626d162d0ae
diff -r 000000000000 -r d626d162d0ae main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 08 09:37:23 2015 +0000 @@ -0,0 +1,64 @@ +#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; +} + \ No newline at end of file