This project logs 6-axis data to a connected SD card for later analysis. This project demonstrates the use of the SD file system, I2C as well as interrupt input and digital input/output.

Dependencies:   SDFileSystem mbed

Committer:
Kas_Lewis
Date:
Mon Jul 27 17:20:03 2015 +0000
Revision:
0:fe17733d483f
This is a working version of a 6-axis data logger using the FRDM-KL25Z and the FRDM-STBC-AGM01 that contains a FXOS8700C and FXAS8700C. The data is logged to a .txt file on a SD card for plotting on a PC at a later date.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kas_Lewis 0:fe17733d483f 1 #include "mbed.h"
Kas_Lewis 0:fe17733d483f 2 #include "SDFileSystem.h"
Kas_Lewis 0:fe17733d483f 3
Kas_Lewis 0:fe17733d483f 4 //FXOS8700CQ
Kas_Lewis 0:fe17733d483f 5 #define FXOS_ADDRESS_W 0x3C
Kas_Lewis 0:fe17733d483f 6 #define FXOS_ADDRESS_R 0x3D
Kas_Lewis 0:fe17733d483f 7 #define FXOS_STATUS 0x00
Kas_Lewis 0:fe17733d483f 8 #define FXOS_OUT_X_MSB 0x01
Kas_Lewis 0:fe17733d483f 9 #define FXOS_F_SETUP 0x09
Kas_Lewis 0:fe17733d483f 10 #define FXOS_TRIG_CFG 0x0A
Kas_Lewis 0:fe17733d483f 11 #define FXOS_SYS_MOD 0x0B
Kas_Lewis 0:fe17733d483f 12 #define FXOS_INT_SOURCE 0x0C
Kas_Lewis 0:fe17733d483f 13 #define FXOS_WHO_AM_I 0x0D
Kas_Lewis 0:fe17733d483f 14 #define FXOS_ID 0xC7
Kas_Lewis 0:fe17733d483f 15 #define FXOS_XYZ_DATA_CFG 0x0E
Kas_Lewis 0:fe17733d483f 16 #define FXOS_TRANSIENT_CFG 0x1D
Kas_Lewis 0:fe17733d483f 17 #define FXOS_TRANSIENT_SRC 0x1E
Kas_Lewis 0:fe17733d483f 18 #define FXOS_ASLP_COUNT 0x29
Kas_Lewis 0:fe17733d483f 19 #define FXOS_CTRL_REG_1 0x2A
Kas_Lewis 0:fe17733d483f 20 #define FXOS_CTRL_REG_2 0x2B
Kas_Lewis 0:fe17733d483f 21 #define FXOS_CTRL_REG_3 0x2C
Kas_Lewis 0:fe17733d483f 22 #define FXOS_CTRL_REG_4 0x2D
Kas_Lewis 0:fe17733d483f 23 #define FXOS_CTRL_REG_5 0x2E
Kas_Lewis 0:fe17733d483f 24 #define FXOS_OFF_X 0x2F
Kas_Lewis 0:fe17733d483f 25 #define FXOS_OFF_Y 0x30
Kas_Lewis 0:fe17733d483f 26 #define FXOS_OFF_Z 0x31
Kas_Lewis 0:fe17733d483f 27 #define FXOS_TEMP 0x51
Kas_Lewis 0:fe17733d483f 28 #define FXOS_M_CTRL_REG_1 0x5B
Kas_Lewis 0:fe17733d483f 29 #define FXOS_M_CTRL_REG_2 0x5C
Kas_Lewis 0:fe17733d483f 30 #define FXOS_M_CTRL_REG_3 0x5D
Kas_Lewis 0:fe17733d483f 31
Kas_Lewis 0:fe17733d483f 32 //FXAS21002C
Kas_Lewis 0:fe17733d483f 33 #define FXAS_ADDRESS_W 0x40
Kas_Lewis 0:fe17733d483f 34 #define FXAS_ADDRESS_R 0x41
Kas_Lewis 0:fe17733d483f 35 #define FXAS_STATUS 0x00
Kas_Lewis 0:fe17733d483f 36 #define FXAS_OUT_X_MSB 0x01
Kas_Lewis 0:fe17733d483f 37 #define FXAS_F_SETUP 0x09
Kas_Lewis 0:fe17733d483f 38 #define FXAS_F_EVENT 0x0A
Kas_Lewis 0:fe17733d483f 39 #define FXAS_INT_SRC_FLAG 0x0B
Kas_Lewis 0:fe17733d483f 40 #define FXAS_WHO_AM_I 0x0C
Kas_Lewis 0:fe17733d483f 41 #define FXAS_ID 0xD7
Kas_Lewis 0:fe17733d483f 42 #define FXAS_CTRL_REG_0 0x0D
Kas_Lewis 0:fe17733d483f 43 #define FXAS_RT_CFG 0x0E
Kas_Lewis 0:fe17733d483f 44 #define FXAS_TEMP 0x12
Kas_Lewis 0:fe17733d483f 45 #define FXAS_CTRL_REG_1 0x13
Kas_Lewis 0:fe17733d483f 46 #define FXAS_CTRL_REG_2 0x14
Kas_Lewis 0:fe17733d483f 47 #define FXAS_CTRL_REG_3 0x15
Kas_Lewis 0:fe17733d483f 48
Kas_Lewis 0:fe17733d483f 49 //Global variables
Kas_Lewis 0:fe17733d483f 50 int FXAS_FIFO_FULL_FLAG = 0;
Kas_Lewis 0:fe17733d483f 51 int FXOS_FIFO_FULL_FLAG = 0;
Kas_Lewis 0:fe17733d483f 52 char fxos_data_1[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Kas_Lewis 0:fe17733d483f 53 char fxas_data_1[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Kas_Lewis 0:fe17733d483f 54
Kas_Lewis 0:fe17733d483f 55 //Setup UART to PC
Kas_Lewis 0:fe17733d483f 56 Serial pc(USBTX, USBRX);
Kas_Lewis 0:fe17733d483f 57
Kas_Lewis 0:fe17733d483f 58 //Setup I2C
Kas_Lewis 0:fe17733d483f 59 I2C sensors(PTE0, PTE1);
Kas_Lewis 0:fe17733d483f 60
Kas_Lewis 0:fe17733d483f 61 //FXOS8700C Control Pins
Kas_Lewis 0:fe17733d483f 62 InterruptIn fxos_int1_8700(PTD4); //INT1-8700
Kas_Lewis 0:fe17733d483f 63 InterruptIn fxos_int2_8700(PTA4); //INT2-8700
Kas_Lewis 0:fe17733d483f 64
Kas_Lewis 0:fe17733d483f 65 //FXAS21002C Control Pins
Kas_Lewis 0:fe17733d483f 66 InterruptIn fxas_int1_21002(PTA5); //INT1-21002
Kas_Lewis 0:fe17733d483f 67 InterruptIn fxas_int2_21002(PTA13); //INT2-21002
Kas_Lewis 0:fe17733d483f 68
Kas_Lewis 0:fe17733d483f 69 //SD File System
Kas_Lewis 0:fe17733d483f 70 SDFileSystem sd(PTD2, PTD3, PTD1, PTD0, "sd");
Kas_Lewis 0:fe17733d483f 71
Kas_Lewis 0:fe17733d483f 72 ////LED Setup
Kas_Lewis 0:fe17733d483f 73 DigitalOut led_1(LED1, 1); //red
Kas_Lewis 0:fe17733d483f 74 DigitalOut led_2(LED2, 1); //green
Kas_Lewis 0:fe17733d483f 75 //DigitalOut led_3(LED3, 1); //blue <- NB!! Wont play nice with SDFileSystem
Kas_Lewis 0:fe17733d483f 76
Kas_Lewis 0:fe17733d483f 77 //****************************************************************//
Kas_Lewis 0:fe17733d483f 78 //Functions
Kas_Lewis 0:fe17733d483f 79 int i2c_write(char address, char device_register, char data){
Kas_Lewis 0:fe17733d483f 80 sensors.start();
Kas_Lewis 0:fe17733d483f 81 sensors.write((char)address);
Kas_Lewis 0:fe17733d483f 82 sensors.write((char)device_register);
Kas_Lewis 0:fe17733d483f 83 sensors.write((char)data);
Kas_Lewis 0:fe17733d483f 84 sensors.stop();
Kas_Lewis 0:fe17733d483f 85 return 0;
Kas_Lewis 0:fe17733d483f 86 }
Kas_Lewis 0:fe17733d483f 87
Kas_Lewis 0:fe17733d483f 88 int i2c_write(char address, char device_register, int stop){
Kas_Lewis 0:fe17733d483f 89 sensors.start();
Kas_Lewis 0:fe17733d483f 90 sensors.write((char)address);
Kas_Lewis 0:fe17733d483f 91 sensors.write((char)device_register);
Kas_Lewis 0:fe17733d483f 92 if(stop == 1){
Kas_Lewis 0:fe17733d483f 93 sensors.stop();
Kas_Lewis 0:fe17733d483f 94 }
Kas_Lewis 0:fe17733d483f 95 return 0;
Kas_Lewis 0:fe17733d483f 96 }
Kas_Lewis 0:fe17733d483f 97
Kas_Lewis 0:fe17733d483f 98 char i2c_read(char address, char device_register){
Kas_Lewis 0:fe17733d483f 99 char data;
Kas_Lewis 0:fe17733d483f 100
Kas_Lewis 0:fe17733d483f 101 sensors.start();
Kas_Lewis 0:fe17733d483f 102 sensors.write(address);
Kas_Lewis 0:fe17733d483f 103 sensors.write(device_register);
Kas_Lewis 0:fe17733d483f 104 sensors.start();
Kas_Lewis 0:fe17733d483f 105 sensors.write(address | 0x01);
Kas_Lewis 0:fe17733d483f 106 data = (char)sensors.read(0);
Kas_Lewis 0:fe17733d483f 107 sensors.stop();
Kas_Lewis 0:fe17733d483f 108 return data;
Kas_Lewis 0:fe17733d483f 109 }
Kas_Lewis 0:fe17733d483f 110
Kas_Lewis 0:fe17733d483f 111 int i2c_write_verify(char address, char device_register, char data){
Kas_Lewis 0:fe17733d483f 112 char return_data;
Kas_Lewis 0:fe17733d483f 113 int return_val;
Kas_Lewis 0:fe17733d483f 114
Kas_Lewis 0:fe17733d483f 115 sensors.start();
Kas_Lewis 0:fe17733d483f 116 sensors.write((char)address);
Kas_Lewis 0:fe17733d483f 117 sensors.write((char)device_register);
Kas_Lewis 0:fe17733d483f 118 sensors.write((char)data);
Kas_Lewis 0:fe17733d483f 119 sensors.stop();
Kas_Lewis 0:fe17733d483f 120
Kas_Lewis 0:fe17733d483f 121 sensors.start();
Kas_Lewis 0:fe17733d483f 122 sensors.write(address);
Kas_Lewis 0:fe17733d483f 123 sensors.write(device_register);
Kas_Lewis 0:fe17733d483f 124 sensors.start();
Kas_Lewis 0:fe17733d483f 125 sensors.write(address | 0x01);
Kas_Lewis 0:fe17733d483f 126 return_data = sensors.read(0);
Kas_Lewis 0:fe17733d483f 127 sensors.stop();
Kas_Lewis 0:fe17733d483f 128
Kas_Lewis 0:fe17733d483f 129 if (return_data == data){
Kas_Lewis 0:fe17733d483f 130 return_val = 0;
Kas_Lewis 0:fe17733d483f 131 }
Kas_Lewis 0:fe17733d483f 132 else{
Kas_Lewis 0:fe17733d483f 133 return_val = -1;
Kas_Lewis 0:fe17733d483f 134 }
Kas_Lewis 0:fe17733d483f 135 return return_val;
Kas_Lewis 0:fe17733d483f 136 }
Kas_Lewis 0:fe17733d483f 137
Kas_Lewis 0:fe17733d483f 138 int fxas_init() {
Kas_Lewis 0:fe17733d483f 139 int return_val = 0;
Kas_Lewis 0:fe17733d483f 140 int sensor_id = 0;
Kas_Lewis 0:fe17733d483f 141
Kas_Lewis 0:fe17733d483f 142 sensor_id = i2c_read(FXAS_ADDRESS_W, FXAS_WHO_AM_I);
Kas_Lewis 0:fe17733d483f 143 // pc.printf("Expected ID from FXAS21002C is 0xD7\n\r");
Kas_Lewis 0:fe17733d483f 144 // pc.printf("Returned value: %X\n\n\r", sensor_id);
Kas_Lewis 0:fe17733d483f 145
Kas_Lewis 0:fe17733d483f 146 if (sensor_id == FXAS_ID){
Kas_Lewis 0:fe17733d483f 147 return_val = 0;
Kas_Lewis 0:fe17733d483f 148 return_val += i2c_write_verify(FXAS_ADDRESS_W, FXAS_CTRL_REG_1, 0x00);
Kas_Lewis 0:fe17733d483f 149 return_val += i2c_write_verify(FXAS_ADDRESS_W, FXAS_F_SETUP, 0x00);
Kas_Lewis 0:fe17733d483f 150 return_val += i2c_write_verify(FXAS_ADDRESS_W, FXAS_F_SETUP, 0x57);
Kas_Lewis 0:fe17733d483f 151 return_val += i2c_write_verify(FXAS_ADDRESS_W, FXAS_CTRL_REG_0, 0x03);
Kas_Lewis 0:fe17733d483f 152
Kas_Lewis 0:fe17733d483f 153 return_val += i2c_write_verify(FXAS_ADDRESS_W, FXAS_CTRL_REG_2, 0xC2);
Kas_Lewis 0:fe17733d483f 154 return_val += i2c_write_verify(FXAS_ADDRESS_W, FXAS_CTRL_REG_3, 0x08);
Kas_Lewis 0:fe17733d483f 155 return_val += i2c_write_verify(FXAS_ADDRESS_W, FXAS_CTRL_REG_1, 0x13);
Kas_Lewis 0:fe17733d483f 156 }
Kas_Lewis 0:fe17733d483f 157 else{
Kas_Lewis 0:fe17733d483f 158 return_val = -1;
Kas_Lewis 0:fe17733d483f 159 }
Kas_Lewis 0:fe17733d483f 160 return return_val;
Kas_Lewis 0:fe17733d483f 161 }
Kas_Lewis 0:fe17733d483f 162
Kas_Lewis 0:fe17733d483f 163 int fxos_init() {
Kas_Lewis 0:fe17733d483f 164 int return_val = 0;
Kas_Lewis 0:fe17733d483f 165 int sensor_id = 0;
Kas_Lewis 0:fe17733d483f 166
Kas_Lewis 0:fe17733d483f 167 sensor_id = i2c_read(FXOS_ADDRESS_W, FXOS_WHO_AM_I);
Kas_Lewis 0:fe17733d483f 168 // pc.printf("Expected ID from FXOS8700CQ is 0xC7\n\r");
Kas_Lewis 0:fe17733d483f 169 // pc.printf("Returned value: %X\n\n\r", sensor_id);
Kas_Lewis 0:fe17733d483f 170
Kas_Lewis 0:fe17733d483f 171 if (sensor_id == FXOS_ID){
Kas_Lewis 0:fe17733d483f 172 return_val = 0;
Kas_Lewis 0:fe17733d483f 173 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_CTRL_REG_1, 0x00);
Kas_Lewis 0:fe17733d483f 174 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_F_SETUP, 0x00);
Kas_Lewis 0:fe17733d483f 175 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_F_SETUP, 0x57);
Kas_Lewis 0:fe17733d483f 176 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_ASLP_COUNT, 0xFF);
Kas_Lewis 0:fe17733d483f 177 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_XYZ_DATA_CFG, 0x02);
Kas_Lewis 0:fe17733d483f 178 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_CTRL_REG_2, 0x00);
Kas_Lewis 0:fe17733d483f 179 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_CTRL_REG_3, 0x02);
Kas_Lewis 0:fe17733d483f 180 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_CTRL_REG_4, 0x41); //Enable FIFO & DRDY Interrupts
Kas_Lewis 0:fe17733d483f 181 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_CTRL_REG_5, 0x40); //FIFO -> Int_1, DRDY -> Imt_2
Kas_Lewis 0:fe17733d483f 182 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_M_CTRL_REG_1, 0x00);
Kas_Lewis 0:fe17733d483f 183 return_val += i2c_write_verify(FXOS_ADDRESS_W, FXOS_CTRL_REG_1, 0x21);
Kas_Lewis 0:fe17733d483f 184 }
Kas_Lewis 0:fe17733d483f 185 else{
Kas_Lewis 0:fe17733d483f 186 return_val = -1;
Kas_Lewis 0:fe17733d483f 187 }
Kas_Lewis 0:fe17733d483f 188 return return_val;
Kas_Lewis 0:fe17733d483f 189 }
Kas_Lewis 0:fe17733d483f 190
Kas_Lewis 0:fe17733d483f 191 //Interrupt for FXAS21002 INT_1
Kas_Lewis 0:fe17733d483f 192 void read_fxas_data(){
Kas_Lewis 0:fe17733d483f 193 // //Read data from FXAS21002 sensor
Kas_Lewis 0:fe17733d483f 194 if(FXAS_FIFO_FULL_FLAG != 2){
Kas_Lewis 0:fe17733d483f 195 FXAS_FIFO_FULL_FLAG = 1;
Kas_Lewis 0:fe17733d483f 196 }
Kas_Lewis 0:fe17733d483f 197 }
Kas_Lewis 0:fe17733d483f 198
Kas_Lewis 0:fe17733d483f 199 //Interrupt for FXOS8700S INT_1
Kas_Lewis 0:fe17733d483f 200 void read_fxos_data(){
Kas_Lewis 0:fe17733d483f 201 //Read data from FXOS8700C sensor
Kas_Lewis 0:fe17733d483f 202 if(FXOS_FIFO_FULL_FLAG != 2){
Kas_Lewis 0:fe17733d483f 203 FXOS_FIFO_FULL_FLAG = 1;
Kas_Lewis 0:fe17733d483f 204 }
Kas_Lewis 0:fe17733d483f 205 }
Kas_Lewis 0:fe17733d483f 206
Kas_Lewis 0:fe17733d483f 207 int main() {
Kas_Lewis 0:fe17733d483f 208 int initilised = 0;
Kas_Lewis 0:fe17733d483f 209 int index = 0;
Kas_Lewis 0:fe17733d483f 210 int test_index = 0;
Kas_Lewis 0:fe17733d483f 211 int fxos_data_flag_1 = 0;
Kas_Lewis 0:fe17733d483f 212 int fxas_data_flag_1 = 0;
Kas_Lewis 0:fe17733d483f 213
Kas_Lewis 0:fe17733d483f 214 //Configure interrupts
Kas_Lewis 0:fe17733d483f 215 fxas_int1_21002.rise(&read_fxas_data);//FIFO -> Int_1
Kas_Lewis 0:fe17733d483f 216 // fxas_int2_21002.rise(&read_fxas_data);//DRDY -> Int_2
Kas_Lewis 0:fe17733d483f 217 fxos_int1_8700.rise(&read_fxos_data);//FIFO -> Int_1
Kas_Lewis 0:fe17733d483f 218 // fxos_int2_8700.rise(&read_fxos_data);//DRDY -> Int_2
Kas_Lewis 0:fe17733d483f 219
Kas_Lewis 0:fe17733d483f 220 sensors.frequency(450000);
Kas_Lewis 0:fe17733d483f 221 pc.baud(115200);
Kas_Lewis 0:fe17733d483f 222
Kas_Lewis 0:fe17733d483f 223 mkdir("/sd/sensor_data", 0777);
Kas_Lewis 0:fe17733d483f 224 FILE *fp = fopen("/sd/sensor_data/data.txt", "w");
Kas_Lewis 0:fe17733d483f 225 if(fp == NULL) {
Kas_Lewis 0:fe17733d483f 226 error("Could not open file for write\n");
Kas_Lewis 0:fe17733d483f 227 }
Kas_Lewis 0:fe17733d483f 228 fprintf(fp, "Gyro X,\tGyro Y,\tGyro Z,\t\tAcc X,\tACC Y,\tACC Z\n\r\n\r\n\r\n\r");
Kas_Lewis 0:fe17733d483f 229 fclose(fp);
Kas_Lewis 0:fe17733d483f 230
Kas_Lewis 0:fe17733d483f 231 //Initlilise the FXOS8700CQ Accelorometer & the FXAS21002C Gyroscope
Kas_Lewis 0:fe17733d483f 232 initilised = fxas_init() & fxos_init();
Kas_Lewis 0:fe17733d483f 233 // pc.printf("Returned value: %d\n\n\r", initilised);
Kas_Lewis 0:fe17733d483f 234
Kas_Lewis 0:fe17733d483f 235 while(1) {
Kas_Lewis 0:fe17733d483f 236 if (FXOS_FIFO_FULL_FLAG == 1){//0.976mg * (fxos_data >> 2) = total g force (8g scale)
Kas_Lewis 0:fe17733d483f 237 FXOS_FIFO_FULL_FLAG = 0;
Kas_Lewis 0:fe17733d483f 238 i2c_write(FXOS_ADDRESS_W, FXOS_STATUS, 0);
Kas_Lewis 0:fe17733d483f 239 sensors.read(FXOS_ADDRESS_R, fxos_data_1, 139, false);//Reads the status register on every pass 0x06 -> 0x00
Kas_Lewis 0:fe17733d483f 240 fxos_data_flag_1 = 1;
Kas_Lewis 0:fe17733d483f 241 }
Kas_Lewis 0:fe17733d483f 242
Kas_Lewis 0:fe17733d483f 243 if (FXAS_FIFO_FULL_FLAG == 1){//7.8125mdps * fxas_data = total degrees per second (250dps scale)
Kas_Lewis 0:fe17733d483f 244 FXAS_FIFO_FULL_FLAG = 0;
Kas_Lewis 0:fe17733d483f 245 i2c_write(FXAS_ADDRESS_W, FXAS_STATUS, 0);
Kas_Lewis 0:fe17733d483f 246 sensors.read(FXAS_ADDRESS_R, fxas_data_1, 139, false);//Reads the status register on the first if set to otherwise 0x06 -> 0x01
Kas_Lewis 0:fe17733d483f 247 fxas_data_flag_1 = 1;
Kas_Lewis 0:fe17733d483f 248 }
Kas_Lewis 0:fe17733d483f 249
Kas_Lewis 0:fe17733d483f 250
Kas_Lewis 0:fe17733d483f 251 if ((fxos_data_flag_1 == 1) && (fxas_data_flag_1 == 1)){
Kas_Lewis 0:fe17733d483f 252 //Store data on SD card
Kas_Lewis 0:fe17733d483f 253 if (test_index == 0){// <--------- Just till a proper file closing system can be implemented
Kas_Lewis 0:fe17733d483f 254 fp = fopen("/sd/sensor_data/data.txt", "a");
Kas_Lewis 0:fe17733d483f 255 if(fp == NULL) {
Kas_Lewis 0:fe17733d483f 256 error("Could not open file for write\n");
Kas_Lewis 0:fe17733d483f 257 }
Kas_Lewis 0:fe17733d483f 258 }
Kas_Lewis 0:fe17733d483f 259
Kas_Lewis 0:fe17733d483f 260 for (index = 1; index < 139; index += 6){
Kas_Lewis 0:fe17733d483f 261 //move data to SD card
Kas_Lewis 0:fe17733d483f 262 fprintf(fp, "%d\t%d\t%d\t\t", ((int16_t)((fxos_data_1[(index + 0)] << 8) | fxos_data_1[(index + 1)]) >> 2),
Kas_Lewis 0:fe17733d483f 263 ((int16_t)((fxos_data_1[(index + 2)] << 8) | fxos_data_1[(index + 3)]) >> 2),
Kas_Lewis 0:fe17733d483f 264 ((int16_t)((fxos_data_1[(index + 4)] << 8) | fxos_data_1[(index + 5)]) >> 2));
Kas_Lewis 0:fe17733d483f 265
Kas_Lewis 0:fe17733d483f 266 fprintf(fp, "%d\t%d\t%d\n\r\n\r", ((int16_t)((fxas_data_1[(index + 0)] << 8) | fxas_data_1[(index + 1)])),
Kas_Lewis 0:fe17733d483f 267 ((int16_t)((fxas_data_1[(index + 2)] << 8) | fxas_data_1[(index + 3)])),
Kas_Lewis 0:fe17733d483f 268 ((int16_t)((fxas_data_1[(index + 4)] << 8) | fxas_data_1[(index + 5)])));
Kas_Lewis 0:fe17733d483f 269 }
Kas_Lewis 0:fe17733d483f 270
Kas_Lewis 0:fe17733d483f 271 fxos_data_flag_1 = 0;
Kas_Lewis 0:fe17733d483f 272 fxas_data_flag_1 = 0;
Kas_Lewis 0:fe17733d483f 273 test_index++;
Kas_Lewis 0:fe17733d483f 274 if (test_index == 30){// <--------- Just till a proper file closing system can be implemented
Kas_Lewis 0:fe17733d483f 275 fclose(fp);
Kas_Lewis 0:fe17733d483f 276 test_index = 0;
Kas_Lewis 0:fe17733d483f 277 }
Kas_Lewis 0:fe17733d483f 278 for (int i = 0; i < 210; i++){
Kas_Lewis 0:fe17733d483f 279 fxos_data_1[i] = 0;
Kas_Lewis 0:fe17733d483f 280 fxas_data_1[i] = 0;
Kas_Lewis 0:fe17733d483f 281 }
Kas_Lewis 0:fe17733d483f 282 }
Kas_Lewis 0:fe17733d483f 283 }
Kas_Lewis 0:fe17733d483f 284 }