#ifndef COMPASS_CLASS
#define COMPASS_CLASS
//couldn't find any documentation for the HiTechnic NXT Compass Sensor so I used
// http://nxtasy.org/2006/09/02/a-hitechnic-compass-robotc-and-100-lines-of-code
#include "i2c.h"
#include "connection.h"
#define COMPASS_ADDRESS 0x02
//registers
#define COMMAND_REG 0x41
#define DEGREE 0x42
#define DEGREE_HALF 0x43
using namespace std;
/**
* Class for HiTechnic compass sensor
*/
class Compass : public I2c{
public:
/**
* Constructor for the compass sensor
* @param port [which sensor port to use]
* @param *connection [attach a connection]
* @param wait_time [the time in ms between checking for reply]
*(use default wait time otherwise COMMUNICATION_BUS_ERROR will frequently be thrown if sensor is pulled continuously)
* @param i2c_address [set the I2C address of the sensor (just use the default address unless you have done a hack)]
*/
Compass(Sensor_port port, Connection* connection, unsigned int wait_time=40, unsigned char i2c_address = COMPASS_ADDRESS);
~Compass();
/**
* Initiate the sensor
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void init(bool reply=false);
/**
* Read the sensor value
* (init method will be called if the sensor has not been initialized)
* @return degree (0-360) 0= North
*/
int read();
/**
* Get the sensor reading as a string
* (init method will be called if the sensor has not been initialized)
* @return sensor reading as a string + " degrees"
*/
string print();
/**
* Get the sensor type
* @return COMPASS
*/
Sensor_type get_type();
private:
};
#endif