Drivers for the mini robot designed for Princeton's MAE 433 course.

Dependencies:   mbed-dsp mbed-rtos mbed

Dependents:   MAE433_Library_Tester RobotBalancerv2

FXOS8700CQ.hpp

Committer:
Electrotiger
Date:
2016-06-24
Revision:
0:9afc272fa65f
Child:
1:918a505314ea

File content as of revision 0:9afc272fa65f:

/**
 * @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_ */