Drivers for the mini robot designed for Princeton's MAE 433 course.
Dependencies: mbed-dsp mbed-rtos mbed
Dependents: MAE433_Library_Tester RobotBalancerv2
Diff: FXOS8700CQ.hpp
- Revision:
- 0:9afc272fa65f
- Child:
- 1:918a505314ea
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FXOS8700CQ.hpp Fri Jun 24 21:03:20 2016 +0000 @@ -0,0 +1,76 @@ +/** + * @file FXOS8700CQ.hpp + * @author Weimen Li + * @date June 5th, 2016 + * @class FXOS8700CQ + * @brief This class represents the FXOS8700CQ sensor. Only accelerometer reading is currently supported. + */ + +#ifndef FXOS8700CQ_HPP_ +#define FXOS8700CQ_HPP_ +#include <mbed.h> + +class FXOS8700CQ { +public: + /// Possible accelerometer sensitivity settings. + enum AccelerometerSensitivity {TWO, FOUR, EIGHT}; + /** + * @brief Constructor for the FXOS8700CQ Accelerometer/Magnetometer. + * @param SDA The SDA Pin. + * @param SCL the SCL Pin. + * @param INT1 The pin that the INT1 line is connected to. + * @param INT2 The pin that the INT2 line is connect to. + * @param setting (optional) The maximum measurement acceleration in g's. May be TWO, FOUR, or EIGHT for + * +/- 2/4/8 g's. A smaller maximum measurement allows for greater sensitivity. + */ + FXOS8700CQ(PinName SDA, PinName SCL, PinName INT1, PinName INT2, AccelerometerSensitivity setting = TWO); + virtual ~FXOS8700CQ(); + /** + * @brief Read data from the accelerometer. Takes pointers to floats that store these variables. + * Example code: + * @code + * float xAccel; + * float yAccel; + * float zAccel; + * ... + * readAccelerometer(&xAccel, &yAccel, &zAccel); + * ... + * @endcode + */ + void readAccelerometer(float *xAccel, float *yAccel, float *zAccel); + /** + * @brief Set offset compensation values that are subtracted from the readings to zero them. + */ + void setOffset(float x, float y, float z) { + xOffset = x; + yOffset = y; + zOffset = z; + } +private: + /// Member function to handle data-ready interrupt. + void dataReadyISR(void); +private: + /// I2C Object to handle bus communications. + I2C I2CObj; + /// Interrupt object for a data-ready signal. + InterruptIn dataReadyInt; + /// The accelerometer sensitivity setting specified by the caller. + const AccelerometerSensitivity accelSensitivitySetting; + /// The conversion constant to convert the read int16_t type data to a float. + const float accelInt2Float; + /// The latest x Acceleration value in g's. + float lastxAccel; + /// The latest y Acceleration value in g's. + float lastyAccel; + /// The latest z Acceleration values in g's. + float lastzAccel; + /// The x offset + float xOffset; + /// The y offset + float yOffset; + /// The z offset + float zOffset; +}; + +#endif /* FXOS8700CQ_HPP_ */ +