test

Dependencies:   FATFileSystem MPU9250_SPI mbed-src

Fork of SDFileSystem by mbed official

Committer:
rllamado
Date:
Sat Feb 20 04:02:21 2016 +0000
Revision:
4:dfa8d9858dfb
Child:
5:5bc32d021025
- reads imu and prints to sd card

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rllamado 4:dfa8d9858dfb 1 #include "mbed.h"
rllamado 4:dfa8d9858dfb 2 #include "SDFileSystem.h"
rllamado 4:dfa8d9858dfb 3 #include "MPU9250.h"
rllamado 4:dfa8d9858dfb 4 #include "InterruptManager.h"
rllamado 4:dfa8d9858dfb 5
rllamado 4:dfa8d9858dfb 6 #define BLENANO
rllamado 4:dfa8d9858dfb 7
rllamado 4:dfa8d9858dfb 8 /* Pin Definitions */
rllamado 4:dfa8d9858dfb 9 #ifdef BLENANO
rllamado 4:dfa8d9858dfb 10 #define MOSI p9
rllamado 4:dfa8d9858dfb 11 #define MISO p11
rllamado 4:dfa8d9858dfb 12 #define SCLK p8
rllamado 4:dfa8d9858dfb 13 #define CS_SD p10
rllamado 4:dfa8d9858dfb 14 #define CS_MPU p29
rllamado 4:dfa8d9858dfb 15 #define BUTTON p28
rllamado 4:dfa8d9858dfb 16 #define MIC p5
rllamado 4:dfa8d9858dfb 17 #define LOAD_CELL p4
rllamado 4:dfa8d9858dfb 18 #define LED p15
rllamado 4:dfa8d9858dfb 19 #else
rllamado 4:dfa8d9858dfb 20 #define MOSI p20
rllamado 4:dfa8d9858dfb 21 #define MISO p22
rllamado 4:dfa8d9858dfb 22 #define SCLK p25
rllamado 4:dfa8d9858dfb 23 #define CS_SD p23
rllamado 4:dfa8d9858dfb 24 #define CS_MPU p21
rllamado 4:dfa8d9858dfb 25 #define BUTTON p17
rllamado 4:dfa8d9858dfb 26 #define MIC p5
rllamado 4:dfa8d9858dfb 27 #define LOAD_CELL p4
rllamado 4:dfa8d9858dfb 28 #define LED p15
rllamado 4:dfa8d9858dfb 29 #endif
rllamado 4:dfa8d9858dfb 30
rllamado 4:dfa8d9858dfb 31 /* Un/comment to determine which tests will be run */
rllamado 4:dfa8d9858dfb 32 //#define IMU_TEST
rllamado 4:dfa8d9858dfb 33 #define MIC_TEST
rllamado 4:dfa8d9858dfb 34 //#define LOAD_TEST
rllamado 4:dfa8d9858dfb 35
rllamado 4:dfa8d9858dfb 36 /* Parameters for sampling */
rllamado 4:dfa8d9858dfb 37 #define FILE_NAME "trick"
rllamado 4:dfa8d9858dfb 38 #define SAMPLE_RATE 1000
rllamado 4:dfa8d9858dfb 39
rllamado 4:dfa8d9858dfb 40 /* Objects used */
rllamado 4:dfa8d9858dfb 41 DigitalOut led(LED);
rllamado 4:dfa8d9858dfb 42 AnalogIn mic(MIC);
rllamado 4:dfa8d9858dfb 43 InterruptIn button(BUTTON);
rllamado 4:dfa8d9858dfb 44 Ticker timer;
rllamado 4:dfa8d9858dfb 45 SPI spi(MOSI, MISO, SCLK);
rllamado 4:dfa8d9858dfb 46 SDFileSystem sd(MOSI, MISO, SCLK, CS_SD, "sd");
rllamado 4:dfa8d9858dfb 47 mpu9250_spi imu(spi , CS_MPU);
rllamado 4:dfa8d9858dfb 48
rllamado 4:dfa8d9858dfb 49 /* Flags for sampling */
rllamado 4:dfa8d9858dfb 50 #define IMU_FLAG (1<<1U)
rllamado 4:dfa8d9858dfb 51 #define MIC_FLAG (1<<2U)
rllamado 4:dfa8d9858dfb 52 #define CREATE_FILE (1<<3U)
rllamado 4:dfa8d9858dfb 53 #define CLOSE_FILE (1<<4U)
rllamado 4:dfa8d9858dfb 54
rllamado 4:dfa8d9858dfb 55 /* Status */
rllamado 4:dfa8d9858dfb 56 #define START_SAMPLE 1
rllamado 4:dfa8d9858dfb 57 #define END_SAMPLE 0
rllamado 4:dfa8d9858dfb 58
rllamado 4:dfa8d9858dfb 59 static uint16_t status = 0;
rllamado 4:dfa8d9858dfb 60 static int button_status = START_SAMPLE;
rllamado 4:dfa8d9858dfb 61 static uint16_t file_count = 0;
rllamado 4:dfa8d9858dfb 62
rllamado 4:dfa8d9858dfb 63 static float sample_rate = (1/(float)SAMPLE_RATE) ;
rllamado 4:dfa8d9858dfb 64
rllamado 4:dfa8d9858dfb 65 static FILE *fp = NULL;
rllamado 4:dfa8d9858dfb 66 static char file_name[17];
rllamado 4:dfa8d9858dfb 67
rllamado 4:dfa8d9858dfb 68 static void openNextFile(void)
rllamado 4:dfa8d9858dfb 69 {
rllamado 4:dfa8d9858dfb 70
rllamado 4:dfa8d9858dfb 71 if( fp ){
rllamado 4:dfa8d9858dfb 72 fclose(fp);
rllamado 4:dfa8d9858dfb 73 }
rllamado 4:dfa8d9858dfb 74
rllamado 4:dfa8d9858dfb 75 snprintf(file_name, sizeof(file_name), "/sd/%s_%02d.txt", FILE_NAME, ++file_count);
rllamado 4:dfa8d9858dfb 76 FILE *fp = fopen(file_name, "w");
rllamado 4:dfa8d9858dfb 77 fprintf(fp, "Sample Rate: %d Hz\n", SAMPLE_RATE);
rllamado 4:dfa8d9858dfb 78
rllamado 4:dfa8d9858dfb 79 }
rllamado 4:dfa8d9858dfb 80
rllamado 4:dfa8d9858dfb 81 static void button_interrupt(void)
rllamado 4:dfa8d9858dfb 82 {
rllamado 4:dfa8d9858dfb 83
rllamado 4:dfa8d9858dfb 84 //CREATE FILE
rllamado 4:dfa8d9858dfb 85 if ( button_status == START_SAMPLE ){
rllamado 4:dfa8d9858dfb 86 status |= CREATE_FILE;
rllamado 4:dfa8d9858dfb 87 button_status = END_SAMPLE;
rllamado 4:dfa8d9858dfb 88
rllamado 4:dfa8d9858dfb 89 //CLOSE FILE
rllamado 4:dfa8d9858dfb 90 } else if ( button_status == END_SAMPLE ){
rllamado 4:dfa8d9858dfb 91 status |= CLOSE_FILE;
rllamado 4:dfa8d9858dfb 92 button_status = START_SAMPLE;
rllamado 4:dfa8d9858dfb 93 }
rllamado 4:dfa8d9858dfb 94
rllamado 4:dfa8d9858dfb 95 }
rllamado 4:dfa8d9858dfb 96
rllamado 4:dfa8d9858dfb 97 static void timer_interrupt(void)
rllamado 4:dfa8d9858dfb 98 {
rllamado 4:dfa8d9858dfb 99
rllamado 4:dfa8d9858dfb 100 if ( button_status == END_SAMPLE ){
rllamado 4:dfa8d9858dfb 101 //ENABLE SAMPLE FLAGS
rllamado 4:dfa8d9858dfb 102 #ifdef IMU_TEST
rllamado 4:dfa8d9858dfb 103 status |= IMU_FLAG;
rllamado 4:dfa8d9858dfb 104 #endif
rllamado 4:dfa8d9858dfb 105
rllamado 4:dfa8d9858dfb 106 #ifdef MIC_TEST
rllamado 4:dfa8d9858dfb 107 status |= MIC_FLAG;
rllamado 4:dfa8d9858dfb 108 #endif
rllamado 4:dfa8d9858dfb 109
rllamado 4:dfa8d9858dfb 110 #ifdef LOAD_TEST
rllamado 4:dfa8d9858dfb 111 status |= LOAD_FLAG;
rllamado 4:dfa8d9858dfb 112 #endif
rllamado 4:dfa8d9858dfb 113 }
rllamado 4:dfa8d9858dfb 114
rllamado 4:dfa8d9858dfb 115 }
rllamado 4:dfa8d9858dfb 116
rllamado 4:dfa8d9858dfb 117 int main()
rllamado 4:dfa8d9858dfb 118 {
rllamado 4:dfa8d9858dfb 119
rllamado 4:dfa8d9858dfb 120 #ifdef IMU_TEST
rllamado 4:dfa8d9858dfb 121 //initialize imu
rllamado 4:dfa8d9858dfb 122 imu.init(1, BITS_DLPF_CFG_2100HZ_NOLPF);
rllamado 4:dfa8d9858dfb 123 #endif
rllamado 4:dfa8d9858dfb 124
rllamado 4:dfa8d9858dfb 125 //set up button as active low to trigger file creation
rllamado 4:dfa8d9858dfb 126 // #ifndef BLENANO
rllamado 4:dfa8d9858dfb 127 // button.mode(PullUp);
rllamado 4:dfa8d9858dfb 128 // #endif
rllamado 4:dfa8d9858dfb 129 button.fall(&button_interrupt);
rllamado 4:dfa8d9858dfb 130 timer.attach(&timer_interrupt, sample_rate );
rllamado 4:dfa8d9858dfb 131 led.write(0);
rllamado 4:dfa8d9858dfb 132
rllamado 4:dfa8d9858dfb 133 snprintf(file_name, sizeof(file_name), "/sd/%s_%02d.txt", FILE_NAME, ++file_count);
rllamado 4:dfa8d9858dfb 134 FILE *fp = fopen(file_name, "w");
rllamado 4:dfa8d9858dfb 135
rllamado 4:dfa8d9858dfb 136 do {
rllamado 4:dfa8d9858dfb 137
rllamado 4:dfa8d9858dfb 138 wait(0.5);
rllamado 4:dfa8d9858dfb 139 led.write(!led.read());
rllamado 4:dfa8d9858dfb 140
rllamado 4:dfa8d9858dfb 141 } while ( fp == NULL );
rllamado 4:dfa8d9858dfb 142
rllamado 4:dfa8d9858dfb 143 fprintf(fp, "Sample Rate: %d Hz\n", SAMPLE_RATE);
rllamado 4:dfa8d9858dfb 144
rllamado 4:dfa8d9858dfb 145 while(1){
rllamado 4:dfa8d9858dfb 146
rllamado 4:dfa8d9858dfb 147 if ( status & CREATE_FILE ){
rllamado 4:dfa8d9858dfb 148 led.write(1);
rllamado 4:dfa8d9858dfb 149 openNextFile();
rllamado 4:dfa8d9858dfb 150 status ^= CREATE_FILE;
rllamado 4:dfa8d9858dfb 151 }
rllamado 4:dfa8d9858dfb 152
rllamado 4:dfa8d9858dfb 153 #ifdef IMU_TEST
rllamado 4:dfa8d9858dfb 154 if ( status & IMU_FLAG ){
rllamado 4:dfa8d9858dfb 155 led.write(!led.read());
rllamado 4:dfa8d9858dfb 156 imu.read_all();
rllamado 4:dfa8d9858dfb 157
rllamado 4:dfa8d9858dfb 158 #ifndef MIC_TEST
rllamado 4:dfa8d9858dfb 159 fprintf(fp, "%5d\t%5d\t%5d\t%5d\t%5d\t%5d\t%5d\t%5d\t%5d\n", (signed int) imu.gyroscope_data[0],
rllamado 4:dfa8d9858dfb 160 (signed int) imu.gyroscope_data[1],
rllamado 4:dfa8d9858dfb 161 (signed int) imu.gyroscope_data[2],
rllamado 4:dfa8d9858dfb 162 (signed int) imu.accelerometer_data[0],
rllamado 4:dfa8d9858dfb 163 (signed int) imu.accelerometer_data[1],
rllamado 4:dfa8d9858dfb 164 (signed int) imu.accelerometer_data[2],
rllamado 4:dfa8d9858dfb 165 (signed int) imu.Magnetometer[0],
rllamado 4:dfa8d9858dfb 166 (signed int) imu.Magnetometer[1],
rllamado 4:dfa8d9858dfb 167 (signed int) imu.Magnetometer[2] );
rllamado 4:dfa8d9858dfb 168 #endif
rllamado 4:dfa8d9858dfb 169
rllamado 4:dfa8d9858dfb 170 status ^= IMU_FLAG;
rllamado 4:dfa8d9858dfb 171 }
rllamado 4:dfa8d9858dfb 172 #endif
rllamado 4:dfa8d9858dfb 173
rllamado 4:dfa8d9858dfb 174 #ifdef MIC_TEST
rllamado 4:dfa8d9858dfb 175 if ( status & MIC_FLAG ){
rllamado 4:dfa8d9858dfb 176
rllamado 4:dfa8d9858dfb 177 #ifndef IMU_TEST
rllamado 4:dfa8d9858dfb 178 fprintf(fp, "%d\n", mic.read_u16());
rllamado 4:dfa8d9858dfb 179
rllamado 4:dfa8d9858dfb 180 #else
rllamado 4:dfa8d9858dfb 181 fprintf(fp, "%5d\t%5d\t%5d\t%5d\t%5d\t%5d\t%5d\t%5d\t%5d\t%4d\n", (signed int) imu.gyroscope_data[0],
rllamado 4:dfa8d9858dfb 182 (signed int) imu.gyroscope_data[1],
rllamado 4:dfa8d9858dfb 183 (signed int) imu.gyroscope_data[2],
rllamado 4:dfa8d9858dfb 184 (signed int) imu.accelerometer_data[0],
rllamado 4:dfa8d9858dfb 185 (signed int) imu.accelerometer_data[1],
rllamado 4:dfa8d9858dfb 186 (signed int) imu.accelerometer_data[2],
rllamado 4:dfa8d9858dfb 187 (signed int) imu.Magnetometer[0],
rllamado 4:dfa8d9858dfb 188 (signed int) imu.Magnetometer[1],
rllamado 4:dfa8d9858dfb 189 (signed int) imu.Magnetometer[2],
rllamado 4:dfa8d9858dfb 190 mic.read_u16() );
rllamado 4:dfa8d9858dfb 191 #endif
rllamado 4:dfa8d9858dfb 192
rllamado 4:dfa8d9858dfb 193 status ^= MIC_FLAG;
rllamado 4:dfa8d9858dfb 194
rllamado 4:dfa8d9858dfb 195 }
rllamado 4:dfa8d9858dfb 196 #endif
rllamado 4:dfa8d9858dfb 197
rllamado 4:dfa8d9858dfb 198 if ( status & CLOSE_FILE ){
rllamado 4:dfa8d9858dfb 199 led.write(0);
rllamado 4:dfa8d9858dfb 200 fclose(fp);
rllamado 4:dfa8d9858dfb 201 status ^= CLOSE_FILE;
rllamado 4:dfa8d9858dfb 202 }
rllamado 4:dfa8d9858dfb 203
rllamado 4:dfa8d9858dfb 204 }
rllamado 4:dfa8d9858dfb 205
rllamado 4:dfa8d9858dfb 206 }
rllamado 4:dfa8d9858dfb 207