Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MotionSensor
Peripherals/FXOS8700Q/FXOS8700Q.h@30:ec915d24d3e9, 2019-05-05 (annotated)
- Committer:
- el17sm
- Date:
- Sun May 05 18:04:43 2019 +0000
- Revision:
- 30:ec915d24d3e9
- Parent:
- FXOS8700Q/FXOS8700Q.h@0:8e92b66a0755
Title Screen done;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| el17sm | 0:8e92b66a0755 | 1 | /* FXOS8700Q sensor driver |
| el17sm | 0:8e92b66a0755 | 2 | * Copyright (c) 2014-2015 ARM Limited |
| el17sm | 0:8e92b66a0755 | 3 | * |
| el17sm | 0:8e92b66a0755 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| el17sm | 0:8e92b66a0755 | 5 | * you may not use this file except in compliance with the License. |
| el17sm | 0:8e92b66a0755 | 6 | * You may obtain a copy of the License at |
| el17sm | 0:8e92b66a0755 | 7 | * |
| el17sm | 0:8e92b66a0755 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| el17sm | 0:8e92b66a0755 | 9 | * |
| el17sm | 0:8e92b66a0755 | 10 | * Unless required by applicable law or agreed to in writing, software |
| el17sm | 0:8e92b66a0755 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| el17sm | 0:8e92b66a0755 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| el17sm | 0:8e92b66a0755 | 13 | * See the License for the specific language governing permissions and |
| el17sm | 0:8e92b66a0755 | 14 | * limitations under the License. |
| el17sm | 0:8e92b66a0755 | 15 | */ |
| el17sm | 0:8e92b66a0755 | 16 | |
| el17sm | 0:8e92b66a0755 | 17 | #ifndef FXOS8700Q_H |
| el17sm | 0:8e92b66a0755 | 18 | #define FXOS8700Q_H |
| el17sm | 0:8e92b66a0755 | 19 | |
| el17sm | 0:8e92b66a0755 | 20 | #include "mbed.h" |
| el17sm | 0:8e92b66a0755 | 21 | #include "MotionSensor.h" |
| el17sm | 0:8e92b66a0755 | 22 | |
| el17sm | 0:8e92b66a0755 | 23 | // FXOS8700CQ I2C address |
| el17sm | 0:8e92b66a0755 | 24 | #define FXOS8700CQ_SLAVE_ADDR0 (0x1E<<1) // with pins SA0=0, SA1=0 |
| el17sm | 0:8e92b66a0755 | 25 | #define FXOS8700CQ_SLAVE_ADDR1 (0x1D<<1) // with pins SA0=1, SA1=0 |
| el17sm | 0:8e92b66a0755 | 26 | #define FXOS8700CQ_SLAVE_ADDR2 (0x1C<<1) // with pins SA0=0, SA1=1 |
| el17sm | 0:8e92b66a0755 | 27 | #define FXOS8700CQ_SLAVE_ADDR3 (0x1F<<1) // with pins SA0=1, SA1=1 |
| el17sm | 0:8e92b66a0755 | 28 | // FXOS8700CQ internal register addresses |
| el17sm | 0:8e92b66a0755 | 29 | #define FXOS8700Q_STATUS 0x00 |
| el17sm | 0:8e92b66a0755 | 30 | #define FXOS8700Q_OUT_X_MSB 0x01 |
| el17sm | 0:8e92b66a0755 | 31 | #define FXOS8700Q_OUT_Y_MSB 0x03 |
| el17sm | 0:8e92b66a0755 | 32 | #define FXOS8700Q_OUT_Z_MSB 0x05 |
| el17sm | 0:8e92b66a0755 | 33 | #define FXOS8700Q_M_OUT_X_MSB 0x33 |
| el17sm | 0:8e92b66a0755 | 34 | #define FXOS8700Q_M_OUT_Y_MSB 0x35 |
| el17sm | 0:8e92b66a0755 | 35 | #define FXOS8700Q_M_OUT_Z_MSB 0x37 |
| el17sm | 0:8e92b66a0755 | 36 | #define FXOS8700Q_WHOAMI 0x0D |
| el17sm | 0:8e92b66a0755 | 37 | #define FXOS8700Q_XYZ_DATA_CFG 0x0E |
| el17sm | 0:8e92b66a0755 | 38 | #define FXOS8700Q_CTRL_REG1 0x2A |
| el17sm | 0:8e92b66a0755 | 39 | #define FXOS8700Q_M_CTRL_REG1 0x5B |
| el17sm | 0:8e92b66a0755 | 40 | #define FXOS8700Q_M_CTRL_REG2 0x5C |
| el17sm | 0:8e92b66a0755 | 41 | #define FXOS8700Q_WHOAMI_VAL 0xC7 |
| el17sm | 0:8e92b66a0755 | 42 | |
| el17sm | 0:8e92b66a0755 | 43 | |
| el17sm | 0:8e92b66a0755 | 44 | /** FXOS8700Q accelerometer example |
| el17sm | 0:8e92b66a0755 | 45 | @code |
| el17sm | 0:8e92b66a0755 | 46 | #include "mbed.h" |
| el17sm | 0:8e92b66a0755 | 47 | #include "FXOS8700Q.h" |
| el17sm | 0:8e92b66a0755 | 48 | I2C i2c(PTE25, PTE24); |
| el17sm | 0:8e92b66a0755 | 49 | FXOS8700QAccelerometer acc(i2c, FXOS8700CQ_SLAVE_ADDR1); // Configured for the FRDM-K64F with onboard sensors |
| el17sm | 0:8e92b66a0755 | 50 | FXOS8700QMagnetometer mag(i2c, FXOS8700CQ_SLAVE_ADDR1); |
| el17sm | 0:8e92b66a0755 | 51 | int main(void) |
| el17sm | 0:8e92b66a0755 | 52 | { |
| el17sm | 0:8e92b66a0755 | 53 | motion_data_units_t acc_data, mag_data; |
| el17sm | 0:8e92b66a0755 | 54 | motion_data_counts_t acc_raw, mag_raw; |
| el17sm | 0:8e92b66a0755 | 55 | float faX, faY, faZ, fmX, fmY, fmZ, tmp_float; |
| el17sm | 0:8e92b66a0755 | 56 | int16_t raX, raY, raZ, rmX, rmY, rmZ, tmp_int; |
| el17sm | 0:8e92b66a0755 | 57 | acc.enable(); |
| el17sm | 0:8e92b66a0755 | 58 | mag.enable(); |
| el17sm | 0:8e92b66a0755 | 59 | while (true) { |
| el17sm | 0:8e92b66a0755 | 60 | // counts based results |
| el17sm | 0:8e92b66a0755 | 61 | acc.getAxis(acc_raw); |
| el17sm | 0:8e92b66a0755 | 62 | mag.getAxis(mag_raw); |
| el17sm | 0:8e92b66a0755 | 63 | acc.getX(raX); |
| el17sm | 0:8e92b66a0755 | 64 | acc.getY(raY); |
| el17sm | 0:8e92b66a0755 | 65 | acc.getZ(raZ); |
| el17sm | 0:8e92b66a0755 | 66 | mag.getX(rmX); |
| el17sm | 0:8e92b66a0755 | 67 | mag.getY(rmY); |
| el17sm | 0:8e92b66a0755 | 68 | mag.getZ(rmZ); |
| el17sm | 0:8e92b66a0755 | 69 | // unit based results |
| el17sm | 0:8e92b66a0755 | 70 | acc.getAxis(acc_data); |
| el17sm | 0:8e92b66a0755 | 71 | mag.getAxis(mag_data); |
| el17sm | 0:8e92b66a0755 | 72 | acc.getX(faX); |
| el17sm | 0:8e92b66a0755 | 73 | acc.getY(faY); |
| el17sm | 0:8e92b66a0755 | 74 | acc.getZ(faZ); |
| el17sm | 0:8e92b66a0755 | 75 | mag.getX(fmX); |
| el17sm | 0:8e92b66a0755 | 76 | mag.getY(fmY); |
| el17sm | 0:8e92b66a0755 | 77 | mag.getZ(fmZ); |
| el17sm | 0:8e92b66a0755 | 78 | wait(0.1f); |
| el17sm | 0:8e92b66a0755 | 79 | } |
| el17sm | 0:8e92b66a0755 | 80 | } |
| el17sm | 0:8e92b66a0755 | 81 | @endcode |
| el17sm | 0:8e92b66a0755 | 82 | */ |
| el17sm | 0:8e92b66a0755 | 83 | |
| el17sm | 0:8e92b66a0755 | 84 | /** FXOS8700Q driver class |
| el17sm | 0:8e92b66a0755 | 85 | */ |
| el17sm | 0:8e92b66a0755 | 86 | class FXOS8700Q : public MotionSensor |
| el17sm | 0:8e92b66a0755 | 87 | { |
| el17sm | 0:8e92b66a0755 | 88 | public: |
| el17sm | 0:8e92b66a0755 | 89 | |
| el17sm | 0:8e92b66a0755 | 90 | /** Read a device register |
| el17sm | 0:8e92b66a0755 | 91 | @param addr The address to read from |
| el17sm | 0:8e92b66a0755 | 92 | @param data The data to read from it |
| el17sm | 0:8e92b66a0755 | 93 | @param len The amount of data to read from it |
| el17sm | 0:8e92b66a0755 | 94 | @return 0 if successful, negative number otherwise |
| el17sm | 0:8e92b66a0755 | 95 | */ |
| el17sm | 0:8e92b66a0755 | 96 | void readRegs(uint8_t addr, uint8_t *data, uint32_t len) const; |
| el17sm | 0:8e92b66a0755 | 97 | |
| el17sm | 0:8e92b66a0755 | 98 | /** Read the ID from a whoAmI register |
| el17sm | 0:8e92b66a0755 | 99 | @return The device whoAmI register contents |
| el17sm | 0:8e92b66a0755 | 100 | */ |
| el17sm | 0:8e92b66a0755 | 101 | uint8_t whoAmI(void) const; |
| el17sm | 0:8e92b66a0755 | 102 | |
| el17sm | 0:8e92b66a0755 | 103 | virtual void enable(void) const; |
| el17sm | 0:8e92b66a0755 | 104 | virtual void disable(void) const; |
| el17sm | 0:8e92b66a0755 | 105 | virtual uint32_t sampleRate(uint32_t frequency) const; |
| el17sm | 0:8e92b66a0755 | 106 | virtual uint32_t dataReady(void) const; |
| el17sm | 0:8e92b66a0755 | 107 | |
| el17sm | 0:8e92b66a0755 | 108 | protected: |
| el17sm | 0:8e92b66a0755 | 109 | I2C *_i2c; |
| el17sm | 0:8e92b66a0755 | 110 | uint8_t _addr; |
| el17sm | 0:8e92b66a0755 | 111 | |
| el17sm | 0:8e92b66a0755 | 112 | /** FXOS8700Q constructor |
| el17sm | 0:8e92b66a0755 | 113 | @param i2c a configured i2c object |
| el17sm | 0:8e92b66a0755 | 114 | @param addr addr of the I2C peripheral as wired |
| el17sm | 0:8e92b66a0755 | 115 | */ |
| el17sm | 0:8e92b66a0755 | 116 | FXOS8700Q(I2C &i2c, uint8_t addr); |
| el17sm | 0:8e92b66a0755 | 117 | |
| el17sm | 0:8e92b66a0755 | 118 | /** FXOS8700Q deconstructor |
| el17sm | 0:8e92b66a0755 | 119 | */ |
| el17sm | 0:8e92b66a0755 | 120 | ~FXOS8700Q(); |
| el17sm | 0:8e92b66a0755 | 121 | |
| el17sm | 0:8e92b66a0755 | 122 | void writeRegs(uint8_t *data, uint32_t len) const; |
| el17sm | 0:8e92b66a0755 | 123 | int16_t getSensorAxis(uint8_t addr) const; |
| el17sm | 0:8e92b66a0755 | 124 | }; |
| el17sm | 0:8e92b66a0755 | 125 | |
| el17sm | 0:8e92b66a0755 | 126 | /** FXOS8700QAccelerometer interface |
| el17sm | 0:8e92b66a0755 | 127 | */ |
| el17sm | 0:8e92b66a0755 | 128 | class FXOS8700QAccelerometer : public FXOS8700Q |
| el17sm | 0:8e92b66a0755 | 129 | { |
| el17sm | 0:8e92b66a0755 | 130 | public: |
| el17sm | 0:8e92b66a0755 | 131 | |
| el17sm | 0:8e92b66a0755 | 132 | FXOS8700QAccelerometer(I2C &i2c, uint8_t addr) : FXOS8700Q(i2c, addr) {} |
| el17sm | 0:8e92b66a0755 | 133 | |
| el17sm | 0:8e92b66a0755 | 134 | virtual int16_t getX(int16_t &x) const; |
| el17sm | 0:8e92b66a0755 | 135 | virtual int16_t getY(int16_t &y) const; |
| el17sm | 0:8e92b66a0755 | 136 | virtual int16_t getZ(int16_t &z) const; |
| el17sm | 0:8e92b66a0755 | 137 | virtual float getX(float &x) const; |
| el17sm | 0:8e92b66a0755 | 138 | virtual float getY(float &y) const; |
| el17sm | 0:8e92b66a0755 | 139 | virtual float getZ(float &z) const; |
| el17sm | 0:8e92b66a0755 | 140 | virtual void getAxis(motion_data_counts_t &xyz) const; |
| el17sm | 0:8e92b66a0755 | 141 | virtual void getAxis(motion_data_units_t &xyz) const; |
| el17sm | 0:8e92b66a0755 | 142 | |
| el17sm | 0:8e92b66a0755 | 143 | }; |
| el17sm | 0:8e92b66a0755 | 144 | |
| el17sm | 0:8e92b66a0755 | 145 | /** FXOS8700QMagnetometer interface |
| el17sm | 0:8e92b66a0755 | 146 | */ |
| el17sm | 0:8e92b66a0755 | 147 | class FXOS8700QMagnetometer : public FXOS8700Q |
| el17sm | 0:8e92b66a0755 | 148 | { |
| el17sm | 0:8e92b66a0755 | 149 | public: |
| el17sm | 0:8e92b66a0755 | 150 | |
| el17sm | 0:8e92b66a0755 | 151 | FXOS8700QMagnetometer(I2C &i2c, uint8_t addr) : FXOS8700Q(i2c, addr) {} |
| el17sm | 0:8e92b66a0755 | 152 | |
| el17sm | 0:8e92b66a0755 | 153 | virtual int16_t getX(int16_t &x) const; |
| el17sm | 0:8e92b66a0755 | 154 | virtual int16_t getY(int16_t &y) const; |
| el17sm | 0:8e92b66a0755 | 155 | virtual int16_t getZ(int16_t &z) const; |
| el17sm | 0:8e92b66a0755 | 156 | virtual float getX(float &x) const; |
| el17sm | 0:8e92b66a0755 | 157 | virtual float getY(float &y) const; |
| el17sm | 0:8e92b66a0755 | 158 | virtual float getZ(float &z) const; |
| el17sm | 0:8e92b66a0755 | 159 | virtual void getAxis(motion_data_counts_t &xyz) const; |
| el17sm | 0:8e92b66a0755 | 160 | virtual void getAxis(motion_data_units_t &xyz) const; |
| el17sm | 0:8e92b66a0755 | 161 | |
| el17sm | 0:8e92b66a0755 | 162 | }; |
| el17sm | 0:8e92b66a0755 | 163 | |
| el17sm | 0:8e92b66a0755 | 164 | #endif |