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

Committer:
quentin74100
Date:
Wed Apr 08 09:37:23 2015 +0000
Revision:
0:d626d162d0ae
Capture des donn?es du capteur MEMS et ?criture sur carte SD avec STM32 Nucleo F401RE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
quentin74100 0:d626d162d0ae 1 #include "mbed.h"
quentin74100 0:d626d162d0ae 2 #include "SDFileSystem.h"
quentin74100 0:d626d162d0ae 3 #include "x_cube_mems.h"
quentin74100 0:d626d162d0ae 4
quentin74100 0:d626d162d0ae 5 DigitalIn bouton(USER_BUTTON);
quentin74100 0:d626d162d0ae 6 //DigitalOut myled(LED1);
quentin74100 0:d626d162d0ae 7
quentin74100 0:d626d162d0ae 8 //Initialisation de la communication avec la carte SD via SPI
quentin74100 0:d626d162d0ae 9 SDFileSystem sd(D11, D12, D13, D10, "sd");
quentin74100 0:d626d162d0ae 10
quentin74100 0:d626d162d0ae 11 //Déclaration des variables pour les capteurs
quentin74100 0:d626d162d0ae 12 volatile float TEMPERATURE_Value_C;
quentin74100 0:d626d162d0ae 13 volatile float HUMIDITY_Value;
quentin74100 0:d626d162d0ae 14 volatile float PRESSURE_Value;
quentin74100 0:d626d162d0ae 15 volatile AxesRaw_TypeDef MAG_Value;
quentin74100 0:d626d162d0ae 16 volatile AxesRaw_TypeDef ACC_Value;
quentin74100 0:d626d162d0ae 17 volatile AxesRaw_TypeDef GYR_Value;
quentin74100 0:d626d162d0ae 18
quentin74100 0:d626d162d0ae 19
quentin74100 0:d626d162d0ae 20 // Creation de l'objet carte MEMS
quentin74100 0:d626d162d0ae 21 static X_CUBE_MEMS *mems_expansion_board = X_CUBE_MEMS::Instance();
quentin74100 0:d626d162d0ae 22
quentin74100 0:d626d162d0ae 23 // Fonction permettant la prise de mesure de tous les capteurs instantanément
quentin74100 0:d626d162d0ae 24 void capture_donnees (){
quentin74100 0:d626d162d0ae 25 mems_expansion_board->hts221.GetTemperature((float *)&TEMPERATURE_Value_C);
quentin74100 0:d626d162d0ae 26 mems_expansion_board->hts221.GetHumidity((float *)&HUMIDITY_Value);
quentin74100 0:d626d162d0ae 27 mems_expansion_board->lps25h.GetPressure((float *)&PRESSURE_Value);
quentin74100 0:d626d162d0ae 28 mems_expansion_board->lis3mdl.GetAxes((AxesRaw_TypeDef *)&MAG_Value);
quentin74100 0:d626d162d0ae 29 mems_expansion_board->lsm6ds0.Acc_GetAxes((AxesRaw_TypeDef *)&ACC_Value);
quentin74100 0:d626d162d0ae 30 mems_expansion_board->lsm6ds0.Gyro_GetAxes((AxesRaw_TypeDef *)&GYR_Value);
quentin74100 0:d626d162d0ae 31 }
quentin74100 0:d626d162d0ae 32
quentin74100 0:d626d162d0ae 33
quentin74100 0:d626d162d0ae 34
quentin74100 0:d626d162d0ae 35 int main() {
quentin74100 0:d626d162d0ae 36
quentin74100 0:d626d162d0ae 37 // Attente de l'action de l'utilisateur pour lancer la capture des données
quentin74100 0:d626d162d0ae 38 while(bouton != 0){
quentin74100 0:d626d162d0ae 39 wait(0.1);
quentin74100 0:d626d162d0ae 40 }
quentin74100 0:d626d162d0ae 41
quentin74100 0:d626d162d0ae 42 mkdir("/sd/DefiFoly2015", 0777);
quentin74100 0:d626d162d0ae 43 //Création du fichier s'il n'existe pas et écriture de l'entete utile pour le parser
quentin74100 0:d626d162d0ae 44 FILE *fichier = fopen("/sd/DefiFoly2015/run.txt", "a");
quentin74100 0:d626d162d0ae 45 fprintf(fichier, "P\tT\tH\tAccX\tAccY\tAccZ\tGyrX\tGyrY\tGyrZ\tMagX\tMagY\tMagZ\n");
quentin74100 0:d626d162d0ae 46
quentin74100 0:d626d162d0ae 47 //Capture des données et écriture dans le fichier jusqu'à une pression de bouton
quentin74100 0:d626d162d0ae 48 while(bouton != 0){
quentin74100 0:d626d162d0ae 49
quentin74100 0:d626d162d0ae 50 capture_donnees();
quentin74100 0:d626d162d0ae 51 wait(0.01);
quentin74100 0:d626d162d0ae 52 if (fichier != NULL){
quentin74100 0:d626d162d0ae 53 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,
quentin74100 0:d626d162d0ae 54 ACC_Value.AXIS_X, ACC_Value.AXIS_Y, ACC_Value.AXIS_Z,
quentin74100 0:d626d162d0ae 55 GYR_Value.AXIS_X, GYR_Value.AXIS_Y, GYR_Value.AXIS_Z,
quentin74100 0:d626d162d0ae 56 MAG_Value.AXIS_X, MAG_Value.AXIS_Y, MAG_Value.AXIS_Z);
quentin74100 0:d626d162d0ae 57 }
quentin74100 0:d626d162d0ae 58
quentin74100 0:d626d162d0ae 59 }
quentin74100 0:d626d162d0ae 60 //Fermeture du fichier une fois le run terminé
quentin74100 0:d626d162d0ae 61 fclose(fichier);
quentin74100 0:d626d162d0ae 62 return 0;
quentin74100 0:d626d162d0ae 63 }
quentin74100 0:d626d162d0ae 64