Minor fixes

Dependencies:   LSM9DS1_Library SDFileSystem mbed nrf51_rtc

Fork of LSM303DLHTest by Toshihisa T

Committer:
afmiee
Date:
Wed Jul 27 21:55:46 2016 +0000
Revision:
11:a246c67d44b0
Parent:
10:e7ab0493ed9f
Child:
12:f361ccfc191e
This version can do Buttons or motion depending on the MOTION definition. It also has FIFO enable to try to capture data when the door is being open. The best accelerometer threshold was 0x0C.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
afmiee 5:b1a689c55f59 1 // Latch Inc.
afmiee 5:b1a689c55f59 2 // Antonio F Mondragon
afmiee 5:b1a689c55f59 3 // 20160714
afmiee 5:b1a689c55f59 4 // for the Adafruit 9DOF Modulke and the Sparkfun microSD card shield
tosihisa 0:750784997b84 5
tosihisa 0:750784997b84 6 #include "mbed.h"
afmiee 6:9db9f4bfaf98 7 #include "LSM9DS1.h"
afmiee 5:b1a689c55f59 8 #include "SDFileSystem.h"
afmiee 5:b1a689c55f59 9 #include "nrf51_rtc.h"
afmiee 5:b1a689c55f59 10
afmiee 5:b1a689c55f59 11 #define M_PI 3.14158
afmiee 11:a246c67d44b0 12 //#define DEBUG 1 // Print Debug information to serial terminal
afmiee 11:a246c67d44b0 13 #define MOTION 1 // Define if operated by motion or by buttons
afmiee 10:e7ab0493ed9f 14
afmiee 10:e7ab0493ed9f 15 // define threshold and Duration registers for interrupts
afmiee 10:e7ab0493ed9f 16 #define ACT_THS_REG 0x10 // 0x04
afmiee 10:e7ab0493ed9f 17 #define ACT_DUR_REG 0x02 // 0x05
afmiee 5:b1a689c55f59 18
afmiee 11:a246c67d44b0 19 #define INT_GEN_THS_X_XL_REG 0x0C // 0x07
afmiee 10:e7ab0493ed9f 20 #define INT_GEN_THS_Y_YL_REG 0xFF // 0x08
afmiee 11:a246c67d44b0 21 #define INT_GEN_THS_Z_XL_REG 0x0C // 0x09
afmiee 10:e7ab0493ed9f 22 #define INT_GEN_DUR_XL_REG 0x00 // 0x0A
afmiee 10:e7ab0493ed9f 23
afmiee 10:e7ab0493ed9f 24 #define INT_GEN_THS_XHL_G_REG 0x0300 // 0x31-32
afmiee 10:e7ab0493ed9f 25 #define INT_GEN_THS_YHL_G_REG 0x0300 // 0x33-34
afmiee 10:e7ab0493ed9f 26 #define INT_GEN_THS_ZHL_G_REG 0x0300 // 0x35-36
afmiee 10:e7ab0493ed9f 27 #define INT_GEN_DUR_G_REG 0x02 // 0x37
afmiee 10:e7ab0493ed9f 28
afmiee 11:a246c67d44b0 29 #define LED_ON 0
afmiee 11:a246c67d44b0 30 #define LED_OFF 01
afmiee 11:a246c67d44b0 31 #define DBG_ACTIVE 0
afmiee 11:a246c67d44b0 32 #define DBG_INACTIVE 1
afmiee 11:a246c67d44b0 33
afmiee 10:e7ab0493ed9f 34 typedef unsigned long int ulint;
afmiee 11:a246c67d44b0 35
afmiee 5:b1a689c55f59 36 // Create objects
afmiee 5:b1a689c55f59 37 Serial debug(USBTX,USBRX);
afmiee 5:b1a689c55f59 38 // For Nordic
afmiee 6:9db9f4bfaf98 39 LSM9DS1 lol(p30, p7, 0xD6, 0x3C);
afmiee 7:cbfdcc57f110 40 I2C i2c(p30, p7);
afmiee 10:e7ab0493ed9f 41
afmiee 5:b1a689c55f59 42 // Create the SD filesystem
afmiee 5:b1a689c55f59 43 SDFileSystem sd(p25, p28, p29, p20, "sd"); // MOSI, MISO, SCLK, SSEL
afmiee 5:b1a689c55f59 44
afmiee 5:b1a689c55f59 45 // Create a ticker to use the nRF51 RTC
afmiee 5:b1a689c55f59 46 Ticker flipper;
afmiee 5:b1a689c55f59 47
afmiee 11:a246c67d44b0 48 #ifdef MOTION
afmiee 11:a246c67d44b0 49 // Assign interrupts to Interrupts from LSM9DS1
afmiee 9:61fcd186ac50 50 InterruptIn int1(p12); // Start sampling
afmiee 11:a246c67d44b0 51 InterruptIn int2(p13); // Stop sampling
afmiee 11:a246c67d44b0 52 #else
afmiee 11:a246c67d44b0 53 // Assign interrupts to Buttons 1 and 2 on nrf51-DK
afmiee 11:a246c67d44b0 54 InterruptIn but1(p17); // Start sampling
afmiee 11:a246c67d44b0 55 InterruptIn but2(p18); // Stop sampling
afmiee 11:a246c67d44b0 56 #endif
afmiee 5:b1a689c55f59 57
afmiee 5:b1a689c55f59 58 // LED definitions
afmiee 5:b1a689c55f59 59 DigitalOut led1(LED1);
afmiee 5:b1a689c55f59 60 DigitalOut led2(LED2);
afmiee 11:a246c67d44b0 61 DigitalOut led3(LED3);
afmiee 11:a246c67d44b0 62
afmiee 11:a246c67d44b0 63 DigitalOut dbg1(p24);
afmiee 11:a246c67d44b0 64 DigitalOut dbg2(p0);
afmiee 5:b1a689c55f59 65
afmiee 5:b1a689c55f59 66 // Global variables
afmiee 11:a246c67d44b0 67 volatile int start = 0;
afmiee 11:a246c67d44b0 68 volatile int stop = 0;
afmiee 10:e7ab0493ed9f 69 time_t seconds;
afmiee 5:b1a689c55f59 70
afmiee 10:e7ab0493ed9f 71 FILE *fpA;
afmiee 10:e7ab0493ed9f 72 FILE *fpG;
afmiee 10:e7ab0493ed9f 73 FILE *fpM;
afmiee 7:cbfdcc57f110 74
afmiee 10:e7ab0493ed9f 75 char filename[80];
afmiee 10:e7ab0493ed9f 76 char secs_str[80];
afmiee 7:cbfdcc57f110 77
afmiee 11:a246c67d44b0 78 uint8_t I2CreadByte(uint8_t address, uint8_t subAddress);
afmiee 11:a246c67d44b0 79 uint8_t I2CreadBytes(uint8_t address, uint8_t subAddress, uint8_t * dest, uint8_t count);
afmiee 11:a246c67d44b0 80 int file_rename(const char *oldfname, const char *newfname);
afmiee 11:a246c67d44b0 81 int file_copy (const char *src, const char *dst);
afmiee 11:a246c67d44b0 82 void start_smpl();
afmiee 11:a246c67d44b0 83 void stop_smpl();
afmiee 11:a246c67d44b0 84 void parp( int times );
afmiee 11:a246c67d44b0 85 void flip();
afmiee 11:a246c67d44b0 86 void print_config_int_registers( void );
afmiee 11:a246c67d44b0 87 void open_temp_files( void );
afmiee 11:a246c67d44b0 88 void rename_files( void );
afmiee 11:a246c67d44b0 89 void DumpAccelGyroRegs( void );
afmiee 11:a246c67d44b0 90
afmiee 11:a246c67d44b0 91
afmiee 11:a246c67d44b0 92 int main()
afmiee 11:a246c67d44b0 93 {
afmiee 11:a246c67d44b0 94 led1 = 1;
afmiee 11:a246c67d44b0 95 led2 = 1;
afmiee 11:a246c67d44b0 96
afmiee 11:a246c67d44b0 97 // debug pins
afmiee 11:a246c67d44b0 98 dbg1 = DBG_INACTIVE;
afmiee 11:a246c67d44b0 99 dbg2 = DBG_INACTIVE;
afmiee 11:a246c67d44b0 100
afmiee 11:a246c67d44b0 101 struct tm t;
afmiee 11:a246c67d44b0 102 start = 0;
afmiee 11:a246c67d44b0 103 stop = 0;
afmiee 11:a246c67d44b0 104
afmiee 11:a246c67d44b0 105 #ifdef MOTION
afmiee 11:a246c67d44b0 106 int1.fall(&start_smpl);
afmiee 11:a246c67d44b0 107 int2.fall(&stop_smpl);
afmiee 11:a246c67d44b0 108 #else
afmiee 11:a246c67d44b0 109 but1.rise(&start_smpl);
afmiee 11:a246c67d44b0 110 but2.rise(&stop_smpl);
afmiee 11:a246c67d44b0 111 #endif
afmiee 11:a246c67d44b0 112
afmiee 11:a246c67d44b0 113 // Attach functions to interrupts
afmiee 11:a246c67d44b0 114 flipper.attach(&flip, 1.0); // the address of the function to be attached (flip) and the interval (2 seconds)
afmiee 11:a246c67d44b0 115
afmiee 11:a246c67d44b0 116 // Enable serial port
afmiee 11:a246c67d44b0 117 debug.format(8,Serial::None,1);
afmiee 11:a246c67d44b0 118 debug.baud(115200);
afmiee 11:a246c67d44b0 119
afmiee 11:a246c67d44b0 120 #ifdef DEBUG
afmiee 11:a246c67d44b0 121 debug.printf("LSM9DS1 Test\x0d\x0a");
afmiee 11:a246c67d44b0 122 #endif
afmiee 11:a246c67d44b0 123
afmiee 11:a246c67d44b0 124 // Initialize 9DOF
afmiee 11:a246c67d44b0 125 if (!lol.begin()) {
afmiee 11:a246c67d44b0 126 debug.printf("Failed to communicate with LSM9DS1.\n");
afmiee 11:a246c67d44b0 127 wait(0.5);
afmiee 11:a246c67d44b0 128 while(1) {
afmiee 11:a246c67d44b0 129 led1 = !led1;
afmiee 11:a246c67d44b0 130 wait(0.5);
afmiee 11:a246c67d44b0 131 }
afmiee 11:a246c67d44b0 132 } else {
afmiee 11:a246c67d44b0 133 debug.printf("Communication with the LSM9DS1 successfully\n\r");
afmiee 11:a246c67d44b0 134 }
afmiee 11:a246c67d44b0 135
afmiee 11:a246c67d44b0 136 lol.calibrate(true);
afmiee 11:a246c67d44b0 137 lol.setFIFO(FIFO_CONT, 0x1F);
afmiee 11:a246c67d44b0 138
afmiee 11:a246c67d44b0 139 lol.getStatus();
afmiee 11:a246c67d44b0 140 lol.getAccelIntSrc();
afmiee 11:a246c67d44b0 141 lol.readAccel();
afmiee 11:a246c67d44b0 142 lol.readGyro();
afmiee 11:a246c67d44b0 143
afmiee 11:a246c67d44b0 144 #ifdef MOTION
afmiee 11:a246c67d44b0 145 // Configure
afmiee 11:a246c67d44b0 146 lol.configAccelThs((uint8_t)INT_GEN_THS_X_XL_REG, X_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_X_XL (07h)
afmiee 11:a246c67d44b0 147 lol.configAccelThs((uint8_t)INT_GEN_THS_Y_YL_REG, Y_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_Y_XL (08h)
afmiee 11:a246c67d44b0 148 lol.configAccelThs((uint8_t)INT_GEN_THS_Z_XL_REG, Z_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_Z_XL (09h)
afmiee 11:a246c67d44b0 149
afmiee 11:a246c67d44b0 150 lol.configGyroThs((int16_t )INT_GEN_THS_XHL_G_REG, X_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_X_G (31h - 32h)
afmiee 11:a246c67d44b0 151 lol.configGyroThs((int16_t )INT_GEN_THS_YHL_G_REG, Y_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_Y_G (33h - 34h)
afmiee 11:a246c67d44b0 152 lol.configGyroThs((int16_t )INT_GEN_THS_ZHL_G_REG, Z_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_Z_G (35h - 36h)
afmiee 11:a246c67d44b0 153 //lol.configGyroInt(ZHIE_G|YHIE_G|XHIE_G, false, false); // INT_GEN_CFG_G (30h)
afmiee 11:a246c67d44b0 154
afmiee 11:a246c67d44b0 155 lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 156 lol.configInt(XG_INT2, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 157 #endif
afmiee 11:a246c67d44b0 158
afmiee 11:a246c67d44b0 159 #ifdef DEBUG
afmiee 11:a246c67d44b0 160 print_config_int_registers();
afmiee 11:a246c67d44b0 161 #endif
afmiee 11:a246c67d44b0 162 // Dump all registers
afmiee 11:a246c67d44b0 163 //DumpAccelGyroRegs();
afmiee 11:a246c67d44b0 164 // // Initialize current time if needed
afmiee 11:a246c67d44b0 165 // printf("Enter current date and time:\n");
afmiee 11:a246c67d44b0 166 // printf("YYYY MM DD HH MM SS[enter]\n");
afmiee 11:a246c67d44b0 167 // scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
afmiee 11:a246c67d44b0 168 // , &t.tm_hour, &t.tm_min, &t.tm_sec);
afmiee 11:a246c67d44b0 169
afmiee 11:a246c67d44b0 170 // adjust for tm structure required values
afmiee 11:a246c67d44b0 171 t.tm_year = t.tm_year - 1900;
afmiee 11:a246c67d44b0 172 t.tm_mon = t.tm_mon - 1;
afmiee 11:a246c67d44b0 173
afmiee 11:a246c67d44b0 174 // set the time
afmiee 11:a246c67d44b0 175 rtc.set_time(mktime(&t));
afmiee 11:a246c67d44b0 176 // Set the interrupt service routines
afmiee 11:a246c67d44b0 177
afmiee 11:a246c67d44b0 178 // Wait for the start Signal generated by the accelerometer interrupt
afmiee 11:a246c67d44b0 179 #ifdef MOTION
afmiee 11:a246c67d44b0 180 // Read the interrupt to clear it
afmiee 11:a246c67d44b0 181 lol.getStatus();
afmiee 11:a246c67d44b0 182 lol.getAccelIntSrc();
afmiee 11:a246c67d44b0 183 // Disable the interrupt
afmiee 11:a246c67d44b0 184 lol.configAccelInt(0, false); // INT_GEN_CFG_XL (06h)
afmiee 11:a246c67d44b0 185 lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 186 #endif
afmiee 11:a246c67d44b0 187
afmiee 11:a246c67d44b0 188
afmiee 11:a246c67d44b0 189 while(1) {
afmiee 11:a246c67d44b0 190 #ifdef MOTION
afmiee 11:a246c67d44b0 191 lol.getStatus();
afmiee 11:a246c67d44b0 192 lol.getAccelIntSrc();
afmiee 11:a246c67d44b0 193 lol.readAccel();
afmiee 11:a246c67d44b0 194 lol.getGyroIntSrc();
afmiee 11:a246c67d44b0 195 lol.readGyro();
afmiee 11:a246c67d44b0 196 // Disable the interrupt
afmiee 11:a246c67d44b0 197 lol.configAccelInt(0, false); // INT_GEN_CFG_XL (06h)
afmiee 11:a246c67d44b0 198 lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 199 // Read the interrupt to clear it
afmiee 11:a246c67d44b0 200 #endif
afmiee 11:a246c67d44b0 201 // Create temporary files
afmiee 11:a246c67d44b0 202 led3 = LED_ON;
afmiee 11:a246c67d44b0 203 open_temp_files();
afmiee 11:a246c67d44b0 204 led3 = LED_OFF;
afmiee 11:a246c67d44b0 205 #ifdef DEBUG
afmiee 11:a246c67d44b0 206 debug.printf( "\n\r");
afmiee 11:a246c67d44b0 207 debug.printf( "Status (27h) %02x\n\r", lol.getStatus()); // STATUS_REG (27h)
afmiee 11:a246c67d44b0 208 debug.printf( "GyroIntSrc (14h) %02x\n\r", lol.getGyroIntSrc()); // INT_GEN_SRC_G (14h)
afmiee 11:a246c67d44b0 209 debug.printf( "AccelIntSrc(26h) %02x\n\r", lol.getAccelIntSrc()); // INT_GEN_SRC_XL (26h)
afmiee 11:a246c67d44b0 210 debug.printf( "MagIntSrc (31h) %02x\n\r", lol.getMagIntSrc()); // INT_SRC_M (31h)
afmiee 11:a246c67d44b0 211 debug.printf( "Inactivity (17h) %02x\n\r", lol.getInactivity()); // STATUS_REG (17h)
afmiee 11:a246c67d44b0 212 debug.printf( "\n\r");
afmiee 11:a246c67d44b0 213 #endif
afmiee 11:a246c67d44b0 214 #ifdef DEBUG
afmiee 11:a246c67d44b0 215 print_config_int_registers();
afmiee 11:a246c67d44b0 216 #endif
afmiee 11:a246c67d44b0 217 #ifdef MOTION
afmiee 11:a246c67d44b0 218 // Program the motion interrupt on accelerometer
afmiee 11:a246c67d44b0 219 lol.configAccelInt(ZHIE_XL|YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h)
afmiee 11:a246c67d44b0 220 lol.configInt(XG_INT1, INT1_IG_XL, INT_ACTIVE_LOW, INT_PUSH_PULL); // INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 221 #endif
afmiee 11:a246c67d44b0 222 // Check for button 1 pressed or
afmiee 11:a246c67d44b0 223 // Wait for the start Signal generated by the accelerometer interrupt
afmiee 11:a246c67d44b0 224 // Depends if MOTION is defined
afmiee 11:a246c67d44b0 225 #ifdef DEBUG
afmiee 11:a246c67d44b0 226 #ifdef MOTION
afmiee 11:a246c67d44b0 227 debug.printf("Waiting for motion to start sampling\n\r");
afmiee 11:a246c67d44b0 228 #else
afmiee 11:a246c67d44b0 229 debug.printf("Waiting for Button 1 to be pressed to start sampling\n\r");
afmiee 11:a246c67d44b0 230 #endif
afmiee 11:a246c67d44b0 231 #endif
afmiee 11:a246c67d44b0 232 while(start==0);
afmiee 11:a246c67d44b0 233 dbg1 = DBG_ACTIVE;
afmiee 11:a246c67d44b0 234 dbg2 = DBG_INACTIVE;
afmiee 11:a246c67d44b0 235 #ifdef DEBUG
afmiee 11:a246c67d44b0 236 #ifdef MOTION
afmiee 11:a246c67d44b0 237 debug.printf("Motion Detected\n\r");
afmiee 11:a246c67d44b0 238 #else
afmiee 11:a246c67d44b0 239 debug.printf("Button 1 pressed\n\r");
afmiee 11:a246c67d44b0 240 #endif
afmiee 11:a246c67d44b0 241 #endif
afmiee 11:a246c67d44b0 242 #ifdef MOTION
afmiee 11:a246c67d44b0 243 // Reset the Interrupt
afmiee 11:a246c67d44b0 244 lol.getStatus();
afmiee 11:a246c67d44b0 245 lol.getAccelIntSrc();
afmiee 11:a246c67d44b0 246
afmiee 11:a246c67d44b0 247 // Disable the interrupt
afmiee 11:a246c67d44b0 248 lol.configAccelInt(0, false); // INT_GEN_CFG_XL (06h)
afmiee 11:a246c67d44b0 249 lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 250 // Read the interrupt to clear it
afmiee 11:a246c67d44b0 251 #endif
afmiee 11:a246c67d44b0 252 #ifdef DEBUG
afmiee 11:a246c67d44b0 253 debug.printf("Started sampling\n\r");
afmiee 11:a246c67d44b0 254 // Get the time and create a file with the number of seconds in hex appended
afmiee 11:a246c67d44b0 255 #endif
afmiee 11:a246c67d44b0 256 // Caoture the seconds since Turn-on to name the files
afmiee 11:a246c67d44b0 257 seconds = rtc.time();
afmiee 11:a246c67d44b0 258 sprintf(secs_str, "%s", ctime(&seconds));
afmiee 11:a246c67d44b0 259 #ifdef DEBUG
afmiee 11:a246c67d44b0 260 debug.printf("\n\rStarted at: %s\n\r\n\r", secs_str );
afmiee 11:a246c67d44b0 261 #endif
afmiee 11:a246c67d44b0 262 #ifdef MOTION
afmiee 11:a246c67d44b0 263 // program inactivity timer
afmiee 11:a246c67d44b0 264 lol.configInactivity(ACT_THS_REG, ACT_DUR_REG, true);
afmiee 11:a246c67d44b0 265 lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 266 #endif
afmiee 11:a246c67d44b0 267 //Execute until inactivity timer is triggered
afmiee 11:a246c67d44b0 268 #ifdef DEBUG
afmiee 11:a246c67d44b0 269 print_config_int_registers();
afmiee 11:a246c67d44b0 270 #endif
afmiee 11:a246c67d44b0 271
afmiee 11:a246c67d44b0 272 while(!stop) {
afmiee 11:a246c67d44b0 273 dbg1 = DBG_INACTIVE;
afmiee 11:a246c67d44b0 274 dbg2 = DBG_ACTIVE;
afmiee 11:a246c67d44b0 275 if (lol.accelAvailable()) {
afmiee 11:a246c67d44b0 276 lol.readAccel();
afmiee 11:a246c67d44b0 277 #ifdef DEBUG
afmiee 11:a246c67d44b0 278 debug.printf("ACC %d, %d, %d\n\r", lol.ax, lol.ay, lol.az);
afmiee 11:a246c67d44b0 279 #endif
afmiee 11:a246c67d44b0 280 fprintf(fpA, "%d, %d, %d\n\r", lol.ax, lol.ay, lol.az);
afmiee 11:a246c67d44b0 281 }
afmiee 11:a246c67d44b0 282 if ( lol.magAvailable(X_AXIS) && lol.magAvailable(Y_AXIS) && lol.magAvailable(Z_AXIS)) {
afmiee 11:a246c67d44b0 283 lol.readMag();
afmiee 11:a246c67d44b0 284 #ifdef DEBUG
afmiee 11:a246c67d44b0 285 debug.printf("MAG %d, %d, %d\n\r", lol.mx, lol.my, lol.mz);
afmiee 11:a246c67d44b0 286 #endif
afmiee 11:a246c67d44b0 287 fprintf(fpM, "%d, %d, %d\n\r", lol.mx, lol.my, lol.mz);
afmiee 11:a246c67d44b0 288 }
afmiee 11:a246c67d44b0 289 if ( lol.gyroAvailable()) {
afmiee 11:a246c67d44b0 290 lol.readGyro();
afmiee 11:a246c67d44b0 291 #ifdef DEBUG
afmiee 11:a246c67d44b0 292 debug.printf("GYR %d, %d, %d\n\r", lol.gx, lol.gy, lol.gz);
afmiee 11:a246c67d44b0 293 #endif
afmiee 11:a246c67d44b0 294 fprintf(fpG, "%d, %d, %d\n\r", lol.gx, lol.gy, lol.gz);
afmiee 11:a246c67d44b0 295 }
afmiee 11:a246c67d44b0 296 }
afmiee 11:a246c67d44b0 297 #ifdef MOTION
afmiee 11:a246c67d44b0 298 //Disable inactivity interrupt
afmiee 11:a246c67d44b0 299 lol.configInt(XG_INT2, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22)
afmiee 11:a246c67d44b0 300 #endif
afmiee 11:a246c67d44b0 301 // Stop Sampling and close file
afmiee 11:a246c67d44b0 302 //parp(10);
afmiee 11:a246c67d44b0 303 #ifdef DEBUG
afmiee 11:a246c67d44b0 304 debug.printf("Stopped sampling\n\r");
afmiee 11:a246c67d44b0 305 #endif
afmiee 11:a246c67d44b0 306 led3 = LED_ON;
afmiee 11:a246c67d44b0 307 fclose(fpA);
afmiee 11:a246c67d44b0 308 fclose(fpM);
afmiee 11:a246c67d44b0 309 fclose(fpG);
afmiee 11:a246c67d44b0 310 rename_files();
afmiee 11:a246c67d44b0 311 led3 = LED_OFF;
afmiee 11:a246c67d44b0 312 }
afmiee 11:a246c67d44b0 313 }
afmiee 11:a246c67d44b0 314
afmiee 7:cbfdcc57f110 315 uint8_t I2CreadByte(uint8_t address, uint8_t subAddress)
afmiee 7:cbfdcc57f110 316 {
afmiee 7:cbfdcc57f110 317 char data;
afmiee 7:cbfdcc57f110 318 char temp= subAddress;
afmiee 7:cbfdcc57f110 319
afmiee 7:cbfdcc57f110 320 i2c.write(address, &temp, 1);
afmiee 7:cbfdcc57f110 321 int a = i2c.read(address, &data, 1);
afmiee 7:cbfdcc57f110 322 return data;
afmiee 5:b1a689c55f59 323 }
afmiee 5:b1a689c55f59 324
afmiee 8:8f4d7f1c588f 325 uint8_t I2CreadBytes(uint8_t address, uint8_t subAddress, uint8_t * dest, uint8_t count)
afmiee 8:8f4d7f1c588f 326 {
afmiee 8:8f4d7f1c588f 327 int i;
afmiee 8:8f4d7f1c588f 328 char temp_dest[count];
afmiee 8:8f4d7f1c588f 329 char temp = subAddress;
afmiee 8:8f4d7f1c588f 330 i2c.write(address, &temp, 1);
afmiee 8:8f4d7f1c588f 331 i2c.read(address, temp_dest, count);
afmiee 8:8f4d7f1c588f 332
afmiee 8:8f4d7f1c588f 333 //i2c doesn't take uint8_ts, but rather chars so do this nasty af conversion
afmiee 8:8f4d7f1c588f 334 for (i=0; i < count; i++) {
afmiee 8:8f4d7f1c588f 335 dest[i] = temp_dest[i];
afmiee 8:8f4d7f1c588f 336 }
afmiee 8:8f4d7f1c588f 337 return count;
afmiee 8:8f4d7f1c588f 338 }
afmiee 10:e7ab0493ed9f 339 //***********************************************************
afmiee 10:e7ab0493ed9f 340 // file_rename: renames a file (via copy & delete).
afmiee 10:e7ab0493ed9f 341 // Moves data instead of adjusting the file name in the
afmiee 10:e7ab0493ed9f 342 // file directory. Checks to insure the file was renamed.
afmiee 10:e7ab0493ed9f 343 // Returns -1 = error; 0 = success
afmiee 10:e7ab0493ed9f 344 //***********************************************************
afmiee 10:e7ab0493ed9f 345 int file_rename(const char *oldfname, const char *newfname)
afmiee 10:e7ab0493ed9f 346 {
afmiee 10:e7ab0493ed9f 347 int retval = 0;
afmiee 10:e7ab0493ed9f 348 int ch;
afmiee 8:8f4d7f1c588f 349
afmiee 10:e7ab0493ed9f 350 FILE *fpold = fopen(oldfname, "r"); // src file
afmiee 10:e7ab0493ed9f 351 FILE *fpnew = fopen(newfname, "w"); // dest file
afmiee 8:8f4d7f1c588f 352
afmiee 10:e7ab0493ed9f 353 while (1) { // Copy src to dest
afmiee 10:e7ab0493ed9f 354 ch = fgetc(fpold); // until src EOF read.
afmiee 10:e7ab0493ed9f 355 if (ch == EOF) break;
afmiee 10:e7ab0493ed9f 356 fputc(ch, fpnew);
afmiee 10:e7ab0493ed9f 357 }
afmiee 10:e7ab0493ed9f 358
afmiee 10:e7ab0493ed9f 359 fclose(fpnew);
afmiee 10:e7ab0493ed9f 360 fclose(fpold);
afmiee 10:e7ab0493ed9f 361
afmiee 10:e7ab0493ed9f 362 fpnew = fopen(newfname, "r"); // Reopen dest to insure
afmiee 10:e7ab0493ed9f 363 if(fpnew == NULL) { // that it was created.
afmiee 10:e7ab0493ed9f 364 retval = (-1); // Return Error.
afmiee 10:e7ab0493ed9f 365 } else {
afmiee 10:e7ab0493ed9f 366 fclose(fpnew);
afmiee 10:e7ab0493ed9f 367 remove(oldfname); // Remove original file.
afmiee 10:e7ab0493ed9f 368 retval = (0); // Return Success.
afmiee 10:e7ab0493ed9f 369 }
afmiee 10:e7ab0493ed9f 370 return (retval);
afmiee 10:e7ab0493ed9f 371 }
afmiee 10:e7ab0493ed9f 372
afmiee 10:e7ab0493ed9f 373 //***********************************************************
afmiee 10:e7ab0493ed9f 374 // file_copy: Copies a file
afmiee 10:e7ab0493ed9f 375 // Checks to insure destination file was created.
afmiee 10:e7ab0493ed9f 376 // Returns -1 = error; 0 = success
afmiee 10:e7ab0493ed9f 377 //***********************************************************
afmiee 10:e7ab0493ed9f 378 int file_copy (const char *src, const char *dst)
afmiee 10:e7ab0493ed9f 379 {
afmiee 10:e7ab0493ed9f 380 int retval = 0;
afmiee 10:e7ab0493ed9f 381 int ch;
afmiee 10:e7ab0493ed9f 382
afmiee 10:e7ab0493ed9f 383 FILE *fpsrc = fopen(src, "r"); // src file
afmiee 10:e7ab0493ed9f 384 FILE *fpdst = fopen(dst, "w"); // dest file
afmiee 10:e7ab0493ed9f 385
afmiee 10:e7ab0493ed9f 386 while (1) { // Copy src to dest
afmiee 10:e7ab0493ed9f 387 ch = fgetc(fpsrc); // until src EOF read.
afmiee 10:e7ab0493ed9f 388 if (ch == EOF) break;
afmiee 10:e7ab0493ed9f 389 fputc(ch, fpdst);
afmiee 10:e7ab0493ed9f 390 }
afmiee 10:e7ab0493ed9f 391 fclose(fpsrc);
afmiee 10:e7ab0493ed9f 392 fclose(fpdst);
afmiee 10:e7ab0493ed9f 393
afmiee 10:e7ab0493ed9f 394 fpdst = fopen(dst, "r"); // Reopen dest to insure
afmiee 10:e7ab0493ed9f 395 if(fpdst == NULL) { // that it was created.
afmiee 10:e7ab0493ed9f 396 retval = (-1); // Return error.
afmiee 10:e7ab0493ed9f 397 } else {
afmiee 10:e7ab0493ed9f 398 fclose(fpdst);
afmiee 10:e7ab0493ed9f 399 retval = (0); // Return success.
afmiee 10:e7ab0493ed9f 400 }
afmiee 10:e7ab0493ed9f 401 return (retval);
afmiee 10:e7ab0493ed9f 402 }
afmiee 10:e7ab0493ed9f 403 // Generated when button 1 is pressed on rising edge START
afmiee 10:e7ab0493ed9f 404 // Modified to be generated by Interrupt 1
afmiee 10:e7ab0493ed9f 405 void start_smpl()
afmiee 10:e7ab0493ed9f 406 {
afmiee 10:e7ab0493ed9f 407 start = 1;
afmiee 10:e7ab0493ed9f 408 stop = 0;
afmiee 11:a246c67d44b0 409 //dbg1 = 1;
afmiee 11:a246c67d44b0 410 //dbg2 = 0;
afmiee 10:e7ab0493ed9f 411 }
afmiee 10:e7ab0493ed9f 412
afmiee 10:e7ab0493ed9f 413 // Generated when button 1 is pressed on rising edge STOP
afmiee 10:e7ab0493ed9f 414 // Modified to be generated by Interrupt 2
afmiee 10:e7ab0493ed9f 415 void stop_smpl()
afmiee 10:e7ab0493ed9f 416 {
afmiee 10:e7ab0493ed9f 417 stop = 1;
afmiee 10:e7ab0493ed9f 418 start = 0;
afmiee 11:a246c67d44b0 419 //dbg1 = 0;
afmiee 11:a246c67d44b0 420 //dbg2 = 1;
afmiee 10:e7ab0493ed9f 421 }
afmiee 10:e7ab0493ed9f 422
afmiee 10:e7ab0493ed9f 423 void parp( int times )
afmiee 10:e7ab0493ed9f 424 {
afmiee 10:e7ab0493ed9f 425 int i;
afmiee 10:e7ab0493ed9f 426 for( i = 0; i < times; i++) {
afmiee 11:a246c67d44b0 427 led1 = LED_ON;
afmiee 10:e7ab0493ed9f 428 wait( 0.05);
afmiee 11:a246c67d44b0 429 led1 = LED_OFF;
afmiee 10:e7ab0493ed9f 430 wait( 0.05);
afmiee 10:e7ab0493ed9f 431 }
afmiee 10:e7ab0493ed9f 432 led2 = 1;
afmiee 10:e7ab0493ed9f 433 }
afmiee 11:a246c67d44b0 434
afmiee 10:e7ab0493ed9f 435 // Flipped every second
afmiee 10:e7ab0493ed9f 436 void flip()
afmiee 10:e7ab0493ed9f 437 {
afmiee 11:a246c67d44b0 438 led2 = LED_ON;
afmiee 10:e7ab0493ed9f 439 wait(0.01);
afmiee 11:a246c67d44b0 440 led2 = LED_OFF;
afmiee 11:a246c67d44b0 441 if ( start && !stop ) {
afmiee 11:a246c67d44b0 442 led1 = LED_ON;
afmiee 10:e7ab0493ed9f 443 wait(0.01);
afmiee 11:a246c67d44b0 444 led1 = LED_OFF;
afmiee 10:e7ab0493ed9f 445 }
afmiee 10:e7ab0493ed9f 446 }
afmiee 10:e7ab0493ed9f 447
afmiee 10:e7ab0493ed9f 448 void print_config_int_registers( void )
afmiee 10:e7ab0493ed9f 449 {
afmiee 10:e7ab0493ed9f 450 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 451 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 452 debug.printf( "INT1_CTRL (0Ch) %02x\n\r", I2CreadByte(0xD6, 0x0C));
afmiee 10:e7ab0493ed9f 453 debug.printf( "INT2_CTRL (0Dh) %02x\n\r", I2CreadByte(0xD6, 0x0D));
afmiee 10:e7ab0493ed9f 454 debug.printf( "CTRL_REG8 (22h) %02x\n\r", I2CreadByte(0xD6, 0x22));
afmiee 10:e7ab0493ed9f 455 debug.printf( "STATUS_REG (27h) %02x\n\r", I2CreadByte(0xD6, 0x27));
afmiee 10:e7ab0493ed9f 456 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 457 debug.printf( "INT_GEN_CFG_XL (06h) %02x\n\r", I2CreadByte(0xD6, 0x06));
afmiee 10:e7ab0493ed9f 458 debug.printf( "INT_GEN_SRC_XL (26h) %02x\n\r", I2CreadByte(0xD6, 0x26));
afmiee 10:e7ab0493ed9f 459 debug.printf( "INT_GEN_THS_X_XL (07h) %02x\n\r", I2CreadByte(0xD6, 0x07));
afmiee 10:e7ab0493ed9f 460 debug.printf( "INT_GEN_THS_Y_XL (08h) %02x\n\r", I2CreadByte(0xD6, 0x08));
afmiee 10:e7ab0493ed9f 461 debug.printf( "INT_GEN_THS_Z_XL (09h) %02x\n\r", I2CreadByte(0xD6, 0x09));
afmiee 10:e7ab0493ed9f 462 debug.printf( "INT_GEN_DUR_XL (0ah) %02x\n\r", I2CreadByte(0xD6, 0x0a));
afmiee 10:e7ab0493ed9f 463 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 464 debug.printf( "INT_GEN_CFG_G (30h) %02x\n\r", I2CreadByte(0xD6, 0x30));
afmiee 10:e7ab0493ed9f 465 debug.printf( "INT_GEN_SRC_G (14h) %02x\n\r", I2CreadByte(0xD6, 0x14));
afmiee 10:e7ab0493ed9f 466 debug.printf( "INT_GEN_THS_XH_G (31h) %02x\n\r", I2CreadByte(0xD6, 0x31));
afmiee 10:e7ab0493ed9f 467 debug.printf( "INT_GEN_THS_XL_G (32h) %02x\n\r", I2CreadByte(0xD6, 0x32));
afmiee 10:e7ab0493ed9f 468 debug.printf( "INT_GEN_THS_YH_G (33h) %02x\n\r", I2CreadByte(0xD6, 0x33));
afmiee 10:e7ab0493ed9f 469 debug.printf( "INT_GEN_THS_YL_G (34h) %02x\n\r", I2CreadByte(0xD6, 0x34));
afmiee 10:e7ab0493ed9f 470 debug.printf( "INT_GEN_THS_ZH_G (35h) %02x\n\r", I2CreadByte(0xD6, 0x35));
afmiee 10:e7ab0493ed9f 471 debug.printf( "INT_GEN_THS_ZL_G (36h) %02x\n\r", I2CreadByte(0xD6, 0x36));
afmiee 10:e7ab0493ed9f 472 debug.printf( "INT_GEN_DUR_G (37h) %02x\n\r", I2CreadByte(0xD6, 0x37));
afmiee 10:e7ab0493ed9f 473 #endif
afmiee 10:e7ab0493ed9f 474 }
afmiee 10:e7ab0493ed9f 475
afmiee 10:e7ab0493ed9f 476 void open_temp_files( void )
afmiee 10:e7ab0493ed9f 477 {
afmiee 11:a246c67d44b0 478 debug.printf("\n\r");
afmiee 10:e7ab0493ed9f 479 fpA = fopen("/sd/ACC.csv", "w");
afmiee 10:e7ab0493ed9f 480 // Verify that file can be created
afmiee 10:e7ab0493ed9f 481 if ( fpA == NULL ) {
afmiee 10:e7ab0493ed9f 482 debug.printf("Cannot create file ACC.csv\n\r");
afmiee 10:e7ab0493ed9f 483 wait(0.5);
afmiee 10:e7ab0493ed9f 484 while(1) {
afmiee 10:e7ab0493ed9f 485 led1 = !led1;
afmiee 10:e7ab0493ed9f 486 wait(0.5);
afmiee 10:e7ab0493ed9f 487 }
afmiee 10:e7ab0493ed9f 488 } else
afmiee 10:e7ab0493ed9f 489 debug.printf("File ACC.csv created successfully\n\r");
afmiee 10:e7ab0493ed9f 490
afmiee 10:e7ab0493ed9f 491 fpG = fopen("/sd/GYR.csv", "w");
afmiee 10:e7ab0493ed9f 492 // Verify that file can be created
afmiee 10:e7ab0493ed9f 493 if ( fpG == NULL ) {
afmiee 10:e7ab0493ed9f 494 debug.printf("Cannot create file GYR.csv\n\r");
afmiee 10:e7ab0493ed9f 495 wait(0.5);
afmiee 10:e7ab0493ed9f 496 while(1) {
afmiee 10:e7ab0493ed9f 497 led1 = !led1;
afmiee 10:e7ab0493ed9f 498 wait(0.5);
afmiee 10:e7ab0493ed9f 499 }
afmiee 10:e7ab0493ed9f 500 } else
afmiee 10:e7ab0493ed9f 501 debug.printf("File GYR.csv created successfully\n\r");
afmiee 10:e7ab0493ed9f 502
afmiee 10:e7ab0493ed9f 503 fpM = fopen("/sd/MAG.csv", "w");
afmiee 10:e7ab0493ed9f 504 // Verify that file can be created
afmiee 10:e7ab0493ed9f 505 if ( fpM == NULL ) {
afmiee 10:e7ab0493ed9f 506 debug.printf("Cannot create file MAG.csv\n\r");
afmiee 10:e7ab0493ed9f 507 wait(0.5);
afmiee 10:e7ab0493ed9f 508 while(1) {
afmiee 10:e7ab0493ed9f 509 led1 = !led1;
afmiee 10:e7ab0493ed9f 510 wait(0.5);
afmiee 10:e7ab0493ed9f 511 }
afmiee 10:e7ab0493ed9f 512 } else
afmiee 10:e7ab0493ed9f 513 debug.printf("File MAG.csv created successfully\n\r");
afmiee 10:e7ab0493ed9f 514 }
afmiee 10:e7ab0493ed9f 515
afmiee 10:e7ab0493ed9f 516 void rename_files( void )
afmiee 10:e7ab0493ed9f 517 {
afmiee 10:e7ab0493ed9f 518 sprintf(filename, "/sd/latch9DOFA_%08x.csv",seconds);
afmiee 11:a246c67d44b0 519 debug.printf("\n\r");
afmiee 11:a246c67d44b0 520 if((file_copy("/sd/ACC.csv",filename )) == 0) {
afmiee 11:a246c67d44b0 521 debug.printf("File ACC.csv copied successfully to %s\n\r", filename);
afmiee 10:e7ab0493ed9f 522 } else {
afmiee 11:a246c67d44b0 523 debug.printf("Error: unable to copy the file ACC.csv");
afmiee 10:e7ab0493ed9f 524 }
afmiee 10:e7ab0493ed9f 525 sprintf(filename, "/sd/latch9DOFM_%08x.csv",seconds);
afmiee 11:a246c67d44b0 526 if((file_copy("/sd/MAG.csv",filename )) == 0) {
afmiee 11:a246c67d44b0 527 debug.printf("File MAG.csv copied successfully to %s\n\r", filename);
afmiee 10:e7ab0493ed9f 528 } else {
afmiee 11:a246c67d44b0 529 debug.printf("Error: unable to copy the file MAG.csv");
afmiee 10:e7ab0493ed9f 530 }
afmiee 10:e7ab0493ed9f 531 sprintf(filename, "/sd/latch9DOFG_%08x.csv",seconds);
afmiee 11:a246c67d44b0 532 if((file_copy("/sd/GYR.csv",filename )) == 0) {
afmiee 11:a246c67d44b0 533 debug.printf("File GYR.csv copied successfully to %s\n\r", filename);
afmiee 10:e7ab0493ed9f 534 } else {
afmiee 11:a246c67d44b0 535 debug.printf("Error: unable to copy the file GYR.csv");
afmiee 10:e7ab0493ed9f 536 }
afmiee 10:e7ab0493ed9f 537 }
afmiee 8:8f4d7f1c588f 538
afmiee 8:8f4d7f1c588f 539 void DumpAccelGyroRegs( void )
afmiee 8:8f4d7f1c588f 540 {
afmiee 8:8f4d7f1c588f 541 char dest[ 0x34 ];
afmiee 8:8f4d7f1c588f 542 int i;
afmiee 8:8f4d7f1c588f 543
afmiee 8:8f4d7f1c588f 544 debug.printf("\n\r");
afmiee 9:61fcd186ac50 545 I2CreadBytes( 0xD6, 0x04, (uint8_t *)dest, 0x34 );
afmiee 9:61fcd186ac50 546
afmiee 8:8f4d7f1c588f 547 for( i = 0; i < 0x34; i++ ) {
afmiee 9:61fcd186ac50 548 //I2CreadByte(0xD6, i + 0x04);
afmiee 8:8f4d7f1c588f 549 switch( i + 0x04 ) {
afmiee 8:8f4d7f1c588f 550 case 0x04:
afmiee 8:8f4d7f1c588f 551 debug.printf("ACT_THS 0x04 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 552 break;
afmiee 8:8f4d7f1c588f 553 case 0x05:
afmiee 8:8f4d7f1c588f 554 debug.printf("ACT_DUR 0x05 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 555 break;
afmiee 8:8f4d7f1c588f 556 case 0x06:
afmiee 8:8f4d7f1c588f 557 debug.printf("INT_GEN_CFG_XL 0x06 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 558 break;
afmiee 8:8f4d7f1c588f 559 case 0x07:
afmiee 8:8f4d7f1c588f 560 debug.printf("INT_GEN_THS_X_XL 0x07 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 561 break;
afmiee 8:8f4d7f1c588f 562 case 0x08:
afmiee 8:8f4d7f1c588f 563 debug.printf("INT_GEN_THS_Y_XL 0x08 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 564 break;
afmiee 8:8f4d7f1c588f 565 case 0x09:
afmiee 8:8f4d7f1c588f 566 debug.printf("INT_GEN_THS_Z_XL 0x09 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 567 break;
afmiee 8:8f4d7f1c588f 568 case 0x0A:
afmiee 8:8f4d7f1c588f 569 debug.printf("INT_GEN_DUR_XL 0x0A %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 570 break;
afmiee 8:8f4d7f1c588f 571 case 0x0B:
afmiee 8:8f4d7f1c588f 572 debug.printf("REFERENCE_G 0x0B %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 573 break;
afmiee 8:8f4d7f1c588f 574 case 0x0C:
afmiee 8:8f4d7f1c588f 575 debug.printf("INT1_CTRL 0x0C %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 576 break;
afmiee 8:8f4d7f1c588f 577 case 0x0D:
afmiee 8:8f4d7f1c588f 578 debug.printf("INT2_CTRL 0x0D %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 579 break;
afmiee 8:8f4d7f1c588f 580 case 0x0F:
afmiee 8:8f4d7f1c588f 581 debug.printf("WHO_AM_I_XG 0x0F %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 582 break;
afmiee 8:8f4d7f1c588f 583 case 0x10:
afmiee 8:8f4d7f1c588f 584 debug.printf("CTRL_REG1_G 0x10 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 585 break;
afmiee 8:8f4d7f1c588f 586 case 0x11:
afmiee 8:8f4d7f1c588f 587 debug.printf("CTRL_REG2_G 0x11 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 588 break;
afmiee 8:8f4d7f1c588f 589 case 0x12:
afmiee 8:8f4d7f1c588f 590 debug.printf("CTRL_REG3_G 0x12 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 591 break;
afmiee 8:8f4d7f1c588f 592 case 0x13:
afmiee 8:8f4d7f1c588f 593 debug.printf("ORIENT_CFG_G 0x13 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 594 break;
afmiee 8:8f4d7f1c588f 595 case 0x14:
afmiee 8:8f4d7f1c588f 596 debug.printf("INT_GEN_SRC_G 0x14 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 597 break;
afmiee 8:8f4d7f1c588f 598 case 0x15:
afmiee 8:8f4d7f1c588f 599 debug.printf("OUT_TEMP_L 0x15 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 600 break;
afmiee 8:8f4d7f1c588f 601 case 0x16:
afmiee 8:8f4d7f1c588f 602 debug.printf("OUT_TEMP_H 0x16 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 603 break;
afmiee 8:8f4d7f1c588f 604 case 0x17:
afmiee 8:8f4d7f1c588f 605 debug.printf("STATUS_REG_0 0x17 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 606 break;
afmiee 8:8f4d7f1c588f 607 case 0x18:
afmiee 8:8f4d7f1c588f 608 debug.printf("OUT_X_L_G 0x18 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 609 break;
afmiee 8:8f4d7f1c588f 610 case 0x19:
afmiee 8:8f4d7f1c588f 611 debug.printf("OUT_X_H_G 0x19 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 612 break;
afmiee 8:8f4d7f1c588f 613 case 0x1A:
afmiee 8:8f4d7f1c588f 614 debug.printf("OUT_Y_L_G 0x1A %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 615 break;
afmiee 8:8f4d7f1c588f 616 case 0x1B:
afmiee 8:8f4d7f1c588f 617 debug.printf("OUT_Y_H_G 0x1B %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 618 break;
afmiee 8:8f4d7f1c588f 619 case 0x1C:
afmiee 8:8f4d7f1c588f 620 debug.printf("OUT_Z_L_G 0x1C %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 621 break;
afmiee 8:8f4d7f1c588f 622 case 0x1D:
afmiee 8:8f4d7f1c588f 623 debug.printf("OUT_Z_H_G 0x1D %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 624 break;
afmiee 8:8f4d7f1c588f 625 case 0x1E:
afmiee 8:8f4d7f1c588f 626 debug.printf("CTRL_REG4 0x1E %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 627 break;
afmiee 8:8f4d7f1c588f 628 case 0x1F:
afmiee 8:8f4d7f1c588f 629 debug.printf("CTRL_REG5_XL 0x1F %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 630 break;
afmiee 8:8f4d7f1c588f 631 case 0x20:
afmiee 8:8f4d7f1c588f 632 debug.printf("CTRL_REG6_XL 0x20 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 633 break;
afmiee 8:8f4d7f1c588f 634 case 0x21:
afmiee 8:8f4d7f1c588f 635 debug.printf("CTRL_REG7_XL 0x21 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 636 break;
afmiee 8:8f4d7f1c588f 637 case 0x22:
afmiee 8:8f4d7f1c588f 638 debug.printf("CTRL_REG8 0x22 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 639 break;
afmiee 8:8f4d7f1c588f 640 case 0x23:
afmiee 8:8f4d7f1c588f 641 debug.printf("CTRL_REG9 0x23 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 642 break;
afmiee 8:8f4d7f1c588f 643 case 0x24:
afmiee 8:8f4d7f1c588f 644 debug.printf("CTRL_REG10 0x24 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 645 break;
afmiee 8:8f4d7f1c588f 646 case 0x26:
afmiee 8:8f4d7f1c588f 647 debug.printf("INT_GEN_SRC_XL 0x26 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 648 break;
afmiee 8:8f4d7f1c588f 649 case 0x27:
afmiee 8:8f4d7f1c588f 650 debug.printf("STATUS_REG_1 0x27 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 651 break;
afmiee 8:8f4d7f1c588f 652 case 0x28:
afmiee 8:8f4d7f1c588f 653 debug.printf("OUT_X_L_XL 0x28 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 654 break;
afmiee 8:8f4d7f1c588f 655 case 0x29:
afmiee 8:8f4d7f1c588f 656 debug.printf("OUT_X_H_XL 0x29 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 657 break;
afmiee 8:8f4d7f1c588f 658 case 0x2A:
afmiee 8:8f4d7f1c588f 659 debug.printf("OUT_Y_L_XL 0x2A %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 660 break;
afmiee 8:8f4d7f1c588f 661 case 0x2B:
afmiee 8:8f4d7f1c588f 662 debug.printf("OUT_Y_H_XL 0x2B %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 663 break;
afmiee 8:8f4d7f1c588f 664 case 0x2C:
afmiee 8:8f4d7f1c588f 665 debug.printf("OUT_Z_L_XL 0x2C %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 666 break;
afmiee 8:8f4d7f1c588f 667 case 0x2D:
afmiee 8:8f4d7f1c588f 668 debug.printf("OUT_Z_H_XL 0x2D %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 669 break;
afmiee 8:8f4d7f1c588f 670 case 0x2E:
afmiee 8:8f4d7f1c588f 671 debug.printf("FIFO_CTRL 0x2E %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 672 break;
afmiee 8:8f4d7f1c588f 673 case 0x2F:
afmiee 8:8f4d7f1c588f 674 debug.printf("FIFO_SRC 0x2F %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 675 break;
afmiee 8:8f4d7f1c588f 676 case 0x30:
afmiee 8:8f4d7f1c588f 677 debug.printf("INT_GEN_CFG_G 0x30 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 678 break;
afmiee 8:8f4d7f1c588f 679 case 0x31:
afmiee 8:8f4d7f1c588f 680 debug.printf("INT_GEN_THS_XH_G 0x31 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 681 break;
afmiee 8:8f4d7f1c588f 682 case 0x32:
afmiee 8:8f4d7f1c588f 683 debug.printf("INT_GEN_THS_XL_G 0x32 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 684 break;
afmiee 8:8f4d7f1c588f 685 case 0x33:
afmiee 8:8f4d7f1c588f 686 debug.printf("INT_GEN_THS_YH_G 0x33 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 687 break;
afmiee 8:8f4d7f1c588f 688 case 0x34:
afmiee 8:8f4d7f1c588f 689 debug.printf("INT_GEN_THS_YL_G 0x34 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 690 break;
afmiee 8:8f4d7f1c588f 691 case 0x35:
afmiee 8:8f4d7f1c588f 692 debug.printf("INT_GEN_THS_ZH_G 0x35 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 693 break;
afmiee 8:8f4d7f1c588f 694 case 0x36:
afmiee 8:8f4d7f1c588f 695 debug.printf("INT_GEN_THS_ZL_G 0x36 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 696 break;
afmiee 8:8f4d7f1c588f 697 case 0x37:
afmiee 8:8f4d7f1c588f 698 debug.printf("INT_GEN_DUR_G 0x37 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 699 break;
afmiee 8:8f4d7f1c588f 700 default:
afmiee 8:8f4d7f1c588f 701 debug.printf("Register Not Valid 0x%02x\n\r");
afmiee 8:8f4d7f1c588f 702 break;
afmiee 8:8f4d7f1c588f 703 }
afmiee 8:8f4d7f1c588f 704 }
afmiee 8:8f4d7f1c588f 705 }
afmiee 8:8f4d7f1c588f 706
afmiee 8:8f4d7f1c588f 707
afmiee 5:b1a689c55f59 708
afmiee 10:e7ab0493ed9f 709 #define DEPTH 64
afmiee 10:e7ab0493ed9f 710 #define DEPP2 6
afmiee 9:61fcd186ac50 711
afmiee 9:61fcd186ac50 712
afmiee 10:e7ab0493ed9f 713 ulint mag_vec( int ax, int ay, int az )
afmiee 10:e7ab0493ed9f 714 {
afmiee 10:e7ab0493ed9f 715 static int x[DEPTH];
afmiee 10:e7ab0493ed9f 716 static int y[DEPTH];
afmiee 10:e7ab0493ed9f 717 static int z[DEPTH];
afmiee 8:8f4d7f1c588f 718
afmiee 10:e7ab0493ed9f 719 int i;
afmiee 10:e7ab0493ed9f 720 int sx,sy,sz;
afmiee 10:e7ab0493ed9f 721
afmiee 10:e7ab0493ed9f 722 x[0] = ax;
afmiee 10:e7ab0493ed9f 723 y[0] = ay;
afmiee 10:e7ab0493ed9f 724 z[0] = az;
afmiee 10:e7ab0493ed9f 725 sx = 0;
afmiee 10:e7ab0493ed9f 726 sy = 0;
afmiee 10:e7ab0493ed9f 727 sz = 0;
afmiee 8:8f4d7f1c588f 728
afmiee 10:e7ab0493ed9f 729 for( i = 0; i < DEPTH; i++ ) {
afmiee 10:e7ab0493ed9f 730 sx+= x[i];
afmiee 10:e7ab0493ed9f 731 sy+= y[i];
afmiee 10:e7ab0493ed9f 732 sz+= z[i];
afmiee 10:e7ab0493ed9f 733 }
afmiee 10:e7ab0493ed9f 734 sx >>= DEPP2;
afmiee 10:e7ab0493ed9f 735 sy >>= DEPP2;
afmiee 10:e7ab0493ed9f 736 sz >>= DEPP2;
afmiee 9:61fcd186ac50 737
afmiee 10:e7ab0493ed9f 738 for( i = 0; i < DEPTH-1; i++ ) {
afmiee 10:e7ab0493ed9f 739 x[i+1] = x[i];
afmiee 10:e7ab0493ed9f 740 y[i+1] = y[i];
afmiee 10:e7ab0493ed9f 741 z[i+1] = z[i];
afmiee 6:9db9f4bfaf98 742 }
afmiee 10:e7ab0493ed9f 743 return( (ulint)(sx*sx + sy*sy + sz*sz) );
tosihisa 4:3c677edffb13 744 }
afmiee 7:cbfdcc57f110 745
afmiee 7:cbfdcc57f110 746
afmiee 10:e7ab0493ed9f 747 ulint maxvec( ulint vec, int reset )
afmiee 10:e7ab0493ed9f 748 {
afmiee 10:e7ab0493ed9f 749 ulint static max;
afmiee 7:cbfdcc57f110 750
afmiee 10:e7ab0493ed9f 751 if( reset == 0 )
afmiee 10:e7ab0493ed9f 752 max = 0;
afmiee 10:e7ab0493ed9f 753
afmiee 10:e7ab0493ed9f 754 if ( vec > max ) {
afmiee 10:e7ab0493ed9f 755 max = vec;
afmiee 10:e7ab0493ed9f 756 }
afmiee 10:e7ab0493ed9f 757 return( max );
afmiee 10:e7ab0493ed9f 758 }
afmiee 10:e7ab0493ed9f 759
afmiee 10:e7ab0493ed9f 760 ulint minvec( ulint vec, int reset )
afmiee 10:e7ab0493ed9f 761 {
afmiee 10:e7ab0493ed9f 762 ulint static min;
afmiee 10:e7ab0493ed9f 763 if ( reset == 0)
afmiee 10:e7ab0493ed9f 764 min = 0xFFFFFFFF;
afmiee 10:e7ab0493ed9f 765
afmiee 10:e7ab0493ed9f 766 if ( vec < min ) {
afmiee 10:e7ab0493ed9f 767 min = vec;
afmiee 10:e7ab0493ed9f 768 }
afmiee 10:e7ab0493ed9f 769 return( min );
afmiee 10:e7ab0493ed9f 770
afmiee 10:e7ab0493ed9f 771 }
afmiee 10:e7ab0493ed9f 772
afmiee 10:e7ab0493ed9f 773