Steven Mahasin / Mbed 2 deprecated DreamDungeon

Dependencies:   mbed MotionSensor

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?

UserRevisionLine numberNew 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