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@0:d626d162d0ae, 2015-04-08 (annotated)
- 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?
User | Revision | Line number | New 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 |