GY-283 I2C compass sensor module
IC: Honeywell HMC5983 temperature compensated three-axis integrated circuit magnetometer
datasheet
My resulting temperature values makes no sense (ex 608). Should be around 20 (deg C). I can't figure out what I'm doing wrong.
My code:
#include <Wire.h>
#define addr 0x1E //HMC5983 I2C Address
void setup(){
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(addr); //open buffer
Wire.write(0x00); // Set pointer to 'Config Register' (0x00)
Wire.write(0x90); // set Config Register to 0b10010000 (temperature enabled)
Wire.endTransmission(); //write buffer
Wire.beginTransmission(addr);
Wire.write(0x02); // Set pointer to 'Mode Register' (0x02)
Wire.write(0x00); // set Mode Register to 0x00 (Continuous Measurement)
Wire.endTransmission();
}
void loop()
{
uint8_t t_hi, t_lo;
int16_t temp;
Wire.beginTransmission(addr);
Wire.write(0x31); // go to register 49 (temp)
Wire.endTransmission();
Wire.requestFrom(addr, 2); //read two bytes
if(2 <= Wire.available() ){
t_hi = Wire.read(); //MSB temperature
t_lo = Wire.read(); //LSB temperature
}
// Shift values to create properly formed integer (low byte first)
temp = (int16_t)(t_lo | ((int16_t)t_hi << 8));
//Print Temperature
Serial.print("Temperature: "); Serial.println(temp);
delay(1000);
}