.h file
#include <Arduino.h>
#include <avr/pgmspace.h>
#include <Wire.h>
#include <I2C.h>
#include <HardwareSerial.h>
#include "GSCOPE.h"
//I2C Scanner Derived from code by Nick Gammon
//http://www.gammon.com.au/forum/?id=10896&reply=6#reply6
int GSCOPE::findAddress()
{
int serial_address;
Serial.begin (115200);
Wire.begin();
for (byte i = 1; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
serial_address=int(i);
}
}
return serial_address;
}
int GSCOPE::getGyroX(int L3G4200D_Address)
{
int x;
byte xMSB = readRegister(L3G4200D_Address, 0x29);
byte xLSB = readRegister(L3G4200D_Address, 0x28);
x = ((xMSB << 8) | xLSB);
return x;
}
int GSCOPE::getGyroY(int L3G4200D_Address)
{
int y;
byte yMSB = readRegister(L3G4200D_Address, 0x2B);
byte yLSB = readRegister(L3G4200D_Address, 0x2A);
y = ((yMSB << 8) | yLSB);
return y;
}
int GSCOPE::getGyroZ(int L3G4200D_Address)
{
int z;
byte zMSB = readRegister(L3G4200D_Address, 0x2D);
byte zLSB = readRegister(L3G4200D_Address, 0x2C);
z = ((zMSB << 8) | zLSB);
return z;
}
void GSCOPE::setupL3G4200D(int L3G4200D_Address, int scale)
{
writeRegister(L3G4200D_Address, CTRL_REG1, 0b00001111); // Enable x, y, z and
turn off power down:
writeRegister(L3G4200D_Address, CTRL_REG2, 0b00000000); // If you'd like to
adjust/use the HPF, you can edit the line below to configure CTRL_REG2:
writeRegister(L3G4200D_Address, CTRL_REG3, 0b00001000);
if(scale == 250) writeRegister(L3G4200D_Address, CTRL_REG4, 0b00000000);
if(scale == 500) writeRegister(L3G4200D_Address, CTRL_REG4, 0b00010000);
if(scale == 2000) writeRegister(L3G4200D_Address, CTRL_REG4, 0b00110000);
writeRegister(L3G4200D_Address, CTRL_REG5, 0b00000000);
}
void GSCOPE::writeRegister(int deviceAddress, byte address, byte val)
{
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
int GSCOPE::readRegister(int deviceAddress, byte address){
//int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
//Wire.requestFrom(deviceAddress, 1); // read a byte
//while(!Wire.available()) {} // waiting
//v = Wire.read();
//return v;
if(Wire.requestFrom(deviceAddress, 1) !=1)
return -1;
return Wire.read();
}
.ccp file
#include <Arduino.h>
#include <avr/pgmspace.h>
#include <Wire.h>
#include <I2C.h>
#include <HardwareSerial.h>
#include "GSCOPE.h"
//I2C Scanner Derived from code by Nick Gammon
//http://www.gammon.com.au/forum/?id=10896&reply=6#reply6
int GSCOPE::findAddress()
{
int serial_address;
Serial.begin (115200);
Wire.begin();
for (byte i = 1; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
serial_address=int(i);
}
}
return serial_address;
}
int GSCOPE::getGyroX(int L3G4200D_Address)
{
int x;
byte xMSB = readRegister(L3G4200D_Address, 0x29);
byte xLSB = readRegister(L3G4200D_Address, 0x28);
x = ((xMSB << 8) | xLSB);
return x;
}
int GSCOPE::getGyroY(int L3G4200D_Address)
{
int y;
byte yMSB = readRegister(L3G4200D_Address, 0x2B);
byte yLSB = readRegister(L3G4200D_Address, 0x2A);
y = ((yMSB << 8) | yLSB);
return y;
}
int GSCOPE::getGyroZ(int L3G4200D_Address)
{
int z;
byte zMSB = readRegister(L3G4200D_Address, 0x2D);
byte zLSB = readRegister(L3G4200D_Address, 0x2C);
z = ((zMSB << 8) | zLSB);
return z;
}
void GSCOPE::setupL3G4200D(int L3G4200D_Address, int scale)
{
writeRegister(L3G4200D_Address, CTRL_REG1, 0b00001111); // Enable x, y, z and
turn off power down:
writeRegister(L3G4200D_Address, CTRL_REG2, 0b00000000); // If you'd like to
adjust/use the HPF, you can edit the line below to configure CTRL_REG2:
writeRegister(L3G4200D_Address, CTRL_REG3, 0b00001000);
if(scale == 250) writeRegister(L3G4200D_Address, CTRL_REG4, 0b00000000);
if(scale == 500) writeRegister(L3G4200D_Address, CTRL_REG4, 0b00010000);
if(scale == 2000) writeRegister(L3G4200D_Address, CTRL_REG4, 0b00110000);
writeRegister(L3G4200D_Address, CTRL_REG5, 0b00000000);
}
void GSCOPE::writeRegister(int deviceAddress, byte address, byte val)
{
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
int GSCOPE::readRegister(int deviceAddress, byte address){
//int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
//Wire.requestFrom(deviceAddress, 1); // read a byte
//while(!Wire.available()) {} // waiting
//v = Wire.read();
//return v;
if(Wire.requestFrom(deviceAddress, 1) !=1)
return -1;
return Wire.read();
}
keywords
GSCOPE KEYWORD1
findAddress KEYWORD2
getGyroX KEYWORD2
getGyroY KEYWORD2
getGyroZ KEYWORD2
setupL3G4200D KEYWORD2
writeRegister KEYWORD2
readRegister KEYWORD2
sketch
#include <stdint.h>
#include <GSCOPE.h>
#include <Wire.h>
int serial_address;
void setup()
{
//Initialize gyroscope
Wire.begin();
Serial.begin(9600);
serial_address = GSCOPE.findAddress();
GSCOPE.setupL3G4200D(/*serial_address*/105, 2000);
delay(1500);
}
void loop()
{
}