11
int L3G4200D_Address = 104; //I2C address of the L3G4200D
18
void writeRegister(int deviceAddress, byte address, byte val) {
19
Wire.beginTransmission(deviceAddress); // start transmission to device
20
Wire.write(address); // send register address
21
Wire.write(val); // send value to write
22
Wire.endTransmission(); // end transmission
25
int readRegister(int deviceAddress, byte address){
28
Wire.beginTransmission(deviceAddress);
29
Wire.write(address); // register to read
30
Wire.endTransmission();
32
Wire.requestFrom(deviceAddress, 1); // read a byte
34
while(!Wire.available()) {
44
byte xMSB = readRegister(L3G4200D_Address, 0x29);
45
byte xLSB = readRegister(L3G4200D_Address, 0x28);
46
x = ((xMSB << 8) | xLSB);
48
byte yMSB = readRegister(L3G4200D_Address, 0x2B);
49
byte yLSB = readRegister(L3G4200D_Address, 0x2A);
50
y = ((yMSB << 8) | yLSB);
52
byte zMSB = readRegister(L3G4200D_Address, 0x2D);
53
byte zLSB = readRegister(L3G4200D_Address, 0x2C);
54
z = ((zMSB << 8) | zLSB);
57
int setupL3G4200D(int scale){
58
//From Jim Lindblom of Sparkfun's code
60
// Enable x, y, z and turn off power down:
61
writeRegister(L3G4200D_Address, CTRL_REG1, 0b00001111);
63
// If you'd like to adjust/use the HPF, you can edit the line below to configure CTRL_REG2:
64
writeRegister(L3G4200D_Address, CTRL_REG2, 0b00000000);
66
// Configure CTRL_REG3 to generate data ready interrupt on INT2
67
// No interrupts used on INT1, if you'd like to configure INT1
68
// or INT2 otherwise, consult the datasheet:
69
writeRegister(L3G4200D_Address, CTRL_REG3, 0b00001000);
71
// CTRL_REG4 controls the full-scale range, among other things:
74
writeRegister(L3G4200D_Address, CTRL_REG4, 0b00000000);
75
}else if(scale == 500){
76
writeRegister(L3G4200D_Address, CTRL_REG4, 0b00010000);
78
writeRegister(L3G4200D_Address, CTRL_REG4, 0b00110000);
81
// CTRL_REG5 controls high-pass filtering of outputs, use it
83
writeRegister(L3G4200D_Address, CTRL_REG5, 0b00000000);
92
Serial.println("starting up L3G4200D");
93
setupL3G4200D(2000); // Configure L3G4200 - 250, 500 or 2000 deg/sec
95
delay(1500); //wait for the sensor to be ready
99
getGyroValues(); // This will update x, y, and z with new values
110
delay(100); //Just here to slow down the serial to make it more readable