0,0 → 1,157 |
/* |
MAG3110 Breakout Example Code |
|
by: Aaron Weiss, aaron at sparkfun dot com |
SparkFun Electronics 2011 |
date: 9/6/11 |
license: beerware, if you use this code and happen to meet me, you |
can by me a beer |
|
The code reads the raw 16-bit x, y, and z values and prints them |
out. This sketch does not use the INT1 pin, nor does it poll for |
new data. |
|
*/ |
|
#include <Wire.h> |
|
#define MAG_ADDR 0x0E //7-bit address for the MAG3110, doesn't change |
|
void setup() |
{ |
Wire.begin(); // join i2c bus (address optional for master) |
Serial.begin(9600); // start serial for output |
config(); // turn the MAG3110 on |
} |
|
void loop() |
{ |
print_values(); |
delay(5); |
} |
|
void config(void) |
{ |
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x11); // cntrl register2 |
Wire.send(0x80); // send 0x80, enable auto resets |
Wire.endTransmission(); // stop transmitting |
|
delay(15); |
|
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x10); // cntrl register1 |
Wire.send(1); // send 0x01, active mode |
Wire.endTransmission(); // stop transmitting |
} |
|
void print_values(void) |
{ |
Serial.print(readx()); |
Serial.print(" "); |
Serial.print(ready()); |
Serial.print(" "); |
Serial.println(readz()); |
} |
|
int readx(void) |
{ |
int xl, xh; //define the MSB and LSB |
|
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x01); // x MSB reg |
Wire.endTransmission(); // stop transmitting |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.requestFrom(MAG_ADDR, 1); // request 1 byte |
while(Wire.available()) // slave may send less than requested |
{ |
xh = Wire.receive(); // receive the byte |
} |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x02); // x LSB reg |
Wire.endTransmission(); // stop transmitting |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.requestFrom(MAG_ADDR, 1); // request 1 byte |
while(Wire.available()) // slave may send less than requested |
{ |
xl = Wire.receive(); // receive the byte |
} |
|
int xout = (xl|(xh << 8)); //concatenate the MSB and LSB |
return xout; |
} |
|
int ready(void) |
{ |
int yl, yh; //define the MSB and LSB |
|
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x03); // y MSB reg |
Wire.endTransmission(); // stop transmitting |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.requestFrom(MAG_ADDR, 1); // request 1 byte |
while(Wire.available()) // slave may send less than requested |
{ |
yh = Wire.receive(); // receive the byte |
} |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x04); // y LSB reg |
Wire.endTransmission(); // stop transmitting |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.requestFrom(MAG_ADDR, 1); // request 1 byte |
while(Wire.available()) // slave may send less than requested |
{ |
yl = Wire.receive(); // receive the byte |
} |
|
int yout = (yl|(yh << 8)); //concatenate the MSB and LSB |
return yout; |
} |
|
int readz(void) |
{ |
int zl, zh; //define the MSB and LSB |
|
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x05); // z MSB reg |
Wire.endTransmission(); // stop transmitting |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.requestFrom(MAG_ADDR, 1); // request 1 byte |
while(Wire.available()) // slave may send less than requested |
{ |
zh = Wire.receive(); // receive the byte |
} |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E |
Wire.send(0x06); // z LSB reg |
Wire.endTransmission(); // stop transmitting |
|
delayMicroseconds(2); //needs at least 1.3us free time between start and stop |
|
Wire.requestFrom(MAG_ADDR, 1); // request 1 byte |
while(Wire.available()) // slave may send less than requested |
{ |
zl = Wire.receive(); // receive the byte |
} |
|
int zout = (zl|(zh << 8)); //concatenate the MSB and LSB |
return zout; |
} |