test
Dependencies: FATFileSystem MPU9250_SPI mbed-src
Fork of SDFileSystem by
main.cpp@4:dfa8d9858dfb, 2016-02-20 (annotated)
- 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?
User | Revision | Line number | New 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 |