Ravkiran Ramanath
/
AxisData
axis data print on USB port.
main.cpp@0:46801a23103e, 2015-09-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |