123123123123123123123123123

Dependencies:   mbed

compass.h

Committer:
TonyYI
Date:
2014-07-01
Revision:
0:3417ca0a36c0
Child:
1:cbec1283a16a

File content as of revision 0:3417ca0a36c0:

#ifndef HMC5883L_H
#define HMC5883L_H

#include "mbed.h"

#define HMC5883L_IDENT_A        0x0A // In this case the identification register A is used to identify the devide. ASCII value H
#define HMC5883L_I2C            0x1E // 7-bit address. 0x3C write, 0x3D read.
#define HMC5883L_I2C_WRITE      0x3C // Same as (& 0xFE), ensure that the MSB bit is being set to zero (RW=0 -> Writing)
#define HMC5883L_I2C_READ       0x3D // Same as (| 0x01), ensure that the MSB bit is being set to one  (RW=1 -> Reading)

#define HMC5883L_CONFIG_A       0x00
#define HMC5883L_CONFIG_B       0x01
#define HMC5883L_MODE           0x02
#define HMC5883L_STATUS         0x09

#define HMC5883L_X_MSB          0x03
#define HMC5883L_X_LSB          0x04
#define HMC5883L_Z_MSB          0x05
#define HMC5883L_Z_LSB          0x06
#define HMC5883L_Y_MSB          0x07
#define HMC5883L_Y_LSB          0x08
#define PI       3.14159265
#define SDA      p9
#define SCL      p10

#define DECLINATIONANGLE  -0.0457
#define OFFSET 0

#include <math.h>

class HMC5883L 
{

public:

    HMC5883L(PinName sda, PinName scl);
    float getMx();
    float getMy();
    float getMz();
    
    void setDeclination(float declinationAngle);
    void setOffset(int offset);
    
    unsigned short get_degree();
private:
    void Write(char reg_address, char data);
    char Read(char data);
    void MultiByteRead(char address, char* output, int size); 
    I2C i2c;
    float declinationAngle;
    int offset;
};

#endif /* HMC5883L_H */