axis data print on USB port.

Dependencies:   FXOS8700Q mbed

Committer:
ravirkiran
Date:
Sun Sep 13 13:35:22 2015 +0000
Revision:
0:46801a23103e
Sample program to get axis data.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ravirkiran 0:46801a23103e 1 /* FXOS8700Q Example Program
ravirkiran 0:46801a23103e 2 * Copyright (c) 2014-2015 ARM Limited
ravirkiran 0:46801a23103e 3 *
ravirkiran 0:46801a23103e 4 * Licensed under the Apache License, Version 2.0 (the "License");
ravirkiran 0:46801a23103e 5 * you may not use this file except in compliance with the License.
ravirkiran 0:46801a23103e 6 * You may obtain a copy of the License at
ravirkiran 0:46801a23103e 7 *
ravirkiran 0:46801a23103e 8 * http://www.apache.org/licenses/LICENSE-2.0
ravirkiran 0:46801a23103e 9 *
ravirkiran 0:46801a23103e 10 * Unless required by applicable law or agreed to in writing, software
ravirkiran 0:46801a23103e 11 * distributed under the License is distributed on an "AS IS" BASIS,
ravirkiran 0:46801a23103e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ravirkiran 0:46801a23103e 13 * See the License for the specific language governing permissions and
ravirkiran 0:46801a23103e 14 * limitations under the License.
ravirkiran 0:46801a23103e 15 */
ravirkiran 0:46801a23103e 16
ravirkiran 0:46801a23103e 17 #include "mbed.h"
ravirkiran 0:46801a23103e 18 #include "FXOS8700Q.h"
ravirkiran 0:46801a23103e 19
ravirkiran 0:46801a23103e 20 Serial pc(USBTX, USBRX);
ravirkiran 0:46801a23103e 21 DigitalOut led_red(LED_RED);
ravirkiran 0:46801a23103e 22 DigitalOut led_green(LED_GREEN);
ravirkiran 0:46801a23103e 23 DigitalIn sw2(SW2);
ravirkiran 0:46801a23103e 24 DigitalIn sw3(SW3);
ravirkiran 0:46801a23103e 25
ravirkiran 0:46801a23103e 26 Ticker tick;
ravirkiran 0:46801a23103e 27 Timer t;
ravirkiran 0:46801a23103e 28 I2C i2c(PTE25, PTE24);
ravirkiran 0:46801a23103e 29 //FXOS8700Q fxos(i2c, FXOS8700CQ_SLAVE_ADDR1);
ravirkiran 0:46801a23103e 30 FXOS8700QAccelerometer acc(i2c, FXOS8700CQ_SLAVE_ADDR1); // Configured for the FRDM-K64F with onboard sensors
ravirkiran 0:46801a23103e 31 FXOS8700QMagnetometer mag(i2c, FXOS8700CQ_SLAVE_ADDR1);
ravirkiran 0:46801a23103e 32 //FXOS8700QAccelerometer acc(i2c, FXOS8700CQ_SLAVE_ADDR0); // Configured for use with the FRDM-MULTI shield
ravirkiran 0:46801a23103e 33 //FXOS8700QMagnetometer mag(i2c, FXOS8700CQ_SLAVE_ADDR0);
ravirkiran 0:46801a23103e 34
ravirkiran 0:46801a23103e 35 static char sw2_debounce = 0;
ravirkiran 0:46801a23103e 36 static char sw3_debounce = 0;
ravirkiran 0:46801a23103e 37 static char sysEnable = 0;
ravirkiran 0:46801a23103e 38
ravirkiran 0:46801a23103e 39 void check_sw2(void)
ravirkiran 0:46801a23103e 40 {
ravirkiran 0:46801a23103e 41 if (sw2 == 0) {
ravirkiran 0:46801a23103e 42 sw2_debounce = 1;
ravirkiran 0:46801a23103e 43 }
ravirkiran 0:46801a23103e 44 else if((sw2_debounce == 1)&&(sw2 == 1))
ravirkiran 0:46801a23103e 45 {
ravirkiran 0:46801a23103e 46 sw2_debounce = 0;
ravirkiran 0:46801a23103e 47 sysEnable = 1;
ravirkiran 0:46801a23103e 48 pc.printf("SW2 button pressed SYSTEM : Enable. \n");
ravirkiran 0:46801a23103e 49 led_red = 1;
ravirkiran 0:46801a23103e 50 led_green = 0;
ravirkiran 0:46801a23103e 51
ravirkiran 0:46801a23103e 52 acc.enable();
ravirkiran 0:46801a23103e 53 mag.enable();
ravirkiran 0:46801a23103e 54 pc.printf("FXOS8700QAccelerometer Who Am I= %X\r\n", acc.whoAmI());
ravirkiran 0:46801a23103e 55 pc.printf("FXOS8700QMagnetometer Who Am I= %X\r\n", acc.whoAmI());
ravirkiran 0:46801a23103e 56 }
ravirkiran 0:46801a23103e 57 }
ravirkiran 0:46801a23103e 58
ravirkiran 0:46801a23103e 59 void check_sw3(void)
ravirkiran 0:46801a23103e 60 {
ravirkiran 0:46801a23103e 61 if (sw3 == 0) {
ravirkiran 0:46801a23103e 62 sw3_debounce = 1;
ravirkiran 0:46801a23103e 63 }
ravirkiran 0:46801a23103e 64 else if((sw3_debounce == 1)&&(sw3 == 1))
ravirkiran 0:46801a23103e 65 {
ravirkiran 0:46801a23103e 66 sw3_debounce = 0;
ravirkiran 0:46801a23103e 67 sysEnable = 0;
ravirkiran 0:46801a23103e 68 pc.printf("SW3 button pressed SYSTEM : Disable. \n");
ravirkiran 0:46801a23103e 69 led_red = 0;
ravirkiran 0:46801a23103e 70 led_green = 0;
ravirkiran 0:46801a23103e 71
ravirkiran 0:46801a23103e 72 acc.disable();
ravirkiran 0:46801a23103e 73 mag.disable();
ravirkiran 0:46801a23103e 74 pc.printf("FXOS8700QAccelerometer Who Am I= %X\r\n", acc.whoAmI());
ravirkiran 0:46801a23103e 75 pc.printf("FXOS8700QMagnetometer Who Am I= %X\r\n", acc.whoAmI());
ravirkiran 0:46801a23103e 76
ravirkiran 0:46801a23103e 77 }
ravirkiran 0:46801a23103e 78 }
ravirkiran 0:46801a23103e 79
ravirkiran 0:46801a23103e 80
ravirkiran 0:46801a23103e 81 motion_data_units_t motion_Data(void)
ravirkiran 0:46801a23103e 82 {
ravirkiran 0:46801a23103e 83 motion_data_units_t acc_data, mag_data;
ravirkiran 0:46801a23103e 84 motion_data_counts_t acc_raw, mag_raw;
ravirkiran 0:46801a23103e 85 float faX, faY, faZ, fmX, fmY, fmZ, tmp_float;
ravirkiran 0:46801a23103e 86 int16_t raX, raY, raZ, rmX, rmY, rmZ, tmp_int;
ravirkiran 0:46801a23103e 87
ravirkiran 0:46801a23103e 88 //while (true) {
ravirkiran 0:46801a23103e 89 // counts based results
ravirkiran 0:46801a23103e 90 acc.getAxis(acc_raw);
ravirkiran 0:46801a23103e 91 mag.getAxis(mag_raw);
ravirkiran 0:46801a23103e 92 pc.printf("ACC: X=%06dd Y=%06dd Z=%06dd \t MAG: X=%06dd Y=%06dd Z=%06dd\r\n", acc_raw.x, acc_raw.y, acc_raw.z, mag_raw.x, mag_raw.y, mag_raw.z);
ravirkiran 0:46801a23103e 93 acc.getX(raX);
ravirkiran 0:46801a23103e 94 acc.getY(raY);
ravirkiran 0:46801a23103e 95 acc.getZ(raZ);
ravirkiran 0:46801a23103e 96 mag.getX(rmX);
ravirkiran 0:46801a23103e 97 mag.getY(rmY);
ravirkiran 0:46801a23103e 98 mag.getZ(rmZ);
ravirkiran 0:46801a23103e 99 pc.printf("ACC: X=%06dd Y=%06dd Z=%06dd \t MAG: X=%06dd Y=%06dd Z=%06dd\r\n", raX, raY, raZ, rmX, rmY, rmZ);
ravirkiran 0:46801a23103e 100 pc.printf("ACC: X=%06dd Y=%06dd Z=%06dd \t MAG: X=%06dd Y=%06dd Z=%06dd\r\n", acc.getX(tmp_int), acc.getY(tmp_int), acc.getZ(tmp_int), mag.getX(tmp_int), mag.getY(tmp_int), mag.getZ(tmp_int));
ravirkiran 0:46801a23103e 101 // unit based results
ravirkiran 0:46801a23103e 102 acc.getAxis(acc_data);
ravirkiran 0:46801a23103e 103 mag.getAxis(mag_data);
ravirkiran 0:46801a23103e 104 pc.printf("ACC: X=%1.4ff Y=%1.4ff Z=%1.4ff \t MAG: X=%4.1ff Y=%4.1ff Z=%4.1ff\r\n", acc_data.x, acc_data.y, acc_data.z, mag_data.x, mag_data.y, mag_data.z);
ravirkiran 0:46801a23103e 105 acc.getX(faX);
ravirkiran 0:46801a23103e 106 acc.getY(faY);
ravirkiran 0:46801a23103e 107 acc.getZ(faZ);
ravirkiran 0:46801a23103e 108 mag.getX(fmX);
ravirkiran 0:46801a23103e 109 mag.getY(fmY);
ravirkiran 0:46801a23103e 110 mag.getZ(fmZ);
ravirkiran 0:46801a23103e 111 pc.printf("ACC: X=%1.4ff Y=%1.4ff Z=%1.4ff \t MAG: X=%4.1ff Y=%4.1ff Z=%4.1ff\r\n", faX, faY, faZ, fmX, fmY, fmZ);
ravirkiran 0:46801a23103e 112 pc.printf("ACC: X=%1.4ff Y=%1.4ff Z=%1.4ff \t MAG: X=%4.1ff Y=%4.1ff Z=%4.1ff\r\n", acc.getX(tmp_float), acc.getY(tmp_float), acc.getZ(tmp_float), mag.getX(tmp_float), mag.getY(tmp_float), mag.getZ(tmp_float));
ravirkiran 0:46801a23103e 113 //wait(5.0f);
ravirkiran 0:46801a23103e 114
ravirkiran 0:46801a23103e 115 return(acc_data);
ravirkiran 0:46801a23103e 116 //}
ravirkiran 0:46801a23103e 117 }
ravirkiran 0:46801a23103e 118 static float lastmotiondetect;
ravirkiran 0:46801a23103e 119 void flip()
ravirkiran 0:46801a23103e 120 {
ravirkiran 0:46801a23103e 121 float currenttime = t.read();
ravirkiran 0:46801a23103e 122 float timeDiff = lastmotiondetect - currenttime;
ravirkiran 0:46801a23103e 123 if(timeDiff > 1.0)
ravirkiran 0:46801a23103e 124 {
ravirkiran 0:46801a23103e 125 led_red = 1;
ravirkiran 0:46801a23103e 126 led_green = 0;
ravirkiran 0:46801a23103e 127 }
ravirkiran 0:46801a23103e 128 }
ravirkiran 0:46801a23103e 129
ravirkiran 0:46801a23103e 130 void blink_GreenLED()
ravirkiran 0:46801a23103e 131 {
ravirkiran 0:46801a23103e 132 led_red = 0;
ravirkiran 0:46801a23103e 133 led_green = 1;
ravirkiran 0:46801a23103e 134 wait(0.1);
ravirkiran 0:46801a23103e 135 led_red = 0;
ravirkiran 0:46801a23103e 136 led_green = 0;
ravirkiran 0:46801a23103e 137 }
ravirkiran 0:46801a23103e 138
ravirkiran 0:46801a23103e 139 int checkData(motion_data_units_t cur, motion_data_units_t prev)
ravirkiran 0:46801a23103e 140 {
ravirkiran 0:46801a23103e 141 if((cur.x == prev.x) ||(cur.y == prev.y) ||(cur.z == prev.z))
ravirkiran 0:46801a23103e 142 {
ravirkiran 0:46801a23103e 143 return 0;
ravirkiran 0:46801a23103e 144 }
ravirkiran 0:46801a23103e 145 else
ravirkiran 0:46801a23103e 146 {
ravirkiran 0:46801a23103e 147 blink_GreenLED();
ravirkiran 0:46801a23103e 148 return 1;
ravirkiran 0:46801a23103e 149 }
ravirkiran 0:46801a23103e 150 }
ravirkiran 0:46801a23103e 151 int main(void)
ravirkiran 0:46801a23103e 152 {
ravirkiran 0:46801a23103e 153 char motiondetect;
ravirkiran 0:46801a23103e 154 pc.baud(115200);
ravirkiran 0:46801a23103e 155 pc.printf("Hello from FRDM-K64F board.\n");
ravirkiran 0:46801a23103e 156 tick.attach(&flip, 1.0);
ravirkiran 0:46801a23103e 157 t.start();
ravirkiran 0:46801a23103e 158 static motion_data_units_t currentData, previousData;
ravirkiran 0:46801a23103e 159
ravirkiran 0:46801a23103e 160 while(1)
ravirkiran 0:46801a23103e 161 {
ravirkiran 0:46801a23103e 162 check_sw2();
ravirkiran 0:46801a23103e 163 check_sw3();
ravirkiran 0:46801a23103e 164 if(sysEnable == 1)
ravirkiran 0:46801a23103e 165 {
ravirkiran 0:46801a23103e 166 currentData = motion_Data();
ravirkiran 0:46801a23103e 167 motiondetect = checkData(currentData, previousData);
ravirkiran 0:46801a23103e 168 if(motiondetect == 1)
ravirkiran 0:46801a23103e 169 {
ravirkiran 0:46801a23103e 170 lastmotiondetect = t.read();
ravirkiran 0:46801a23103e 171 }
ravirkiran 0:46801a23103e 172 //wait(0.2);
ravirkiran 0:46801a23103e 173 }
ravirkiran 0:46801a23103e 174 }
ravirkiran 0:46801a23103e 175
ravirkiran 0:46801a23103e 176
ravirkiran 0:46801a23103e 177 }