test

Dependencies:   FATFileSystem MPU9250_SPI mbed-src

Fork of SDFileSystem by mbed official

Committer:
rllamado
Date:
Sun Feb 21 07:30:40 2016 +0000
Revision:
6:d23780539619
Parent:
5:5bc32d021025
-able to get test rig up and running with BLE NANO; -samples IMU and MIC and prints to SDCARD

Who changed what in which revision?

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