Go Down

Topic: Gyroscope Library Review Request (Read 995 times) previous topic - next topic

R3dEyedFox

Hello Arduino community! I have been working with the arduino for almost a year now, and recently decided to get more in depth and write my own library. After much research I finally made a library. It doesn't work, at all. That is why I am asking those whom have the greater knowledge than I to review my code.

header:
Code: [Select]
//gyro header

#ifndef gyro_h
#define gyro_h

#include <Wire.h>

class  gyro
{
public:
gyro();
void begin();
void xValue(int x);
void yValue(int y);
void zValue(int z);

private:
void readI2C();
void writeI2C();


};

#endif


code
Code: [Select]
//This is a library for reading and reporting the axis
//states of the sensor.
//Anonymous Parallax
// and Nicolas Guerra-Contreras
//
#include <Wire.h>
#include "gyro.h"

#define CTRL_REG1 0x20
#define CTRL_REG2 0x21
#define CTRL_REG3 0x22
#define CTRL_REG4 0x23
#define Addr = 105;

#define int x
#define int y
#define int z

gyro::gyro(){
}

void gyro::begin() //start the gyro
{
Wire.begin();
writeI2C(CTRL_REG1, 0x1F);    // Turn on all axes, disable power down
    writeI2C(CTRL_REG3, 0x08);    // Enable control ready signal
    writeI2C(CTRL_REG4, 0x80);    // Set scale (500 deg/sec)
    delay(100);                   // Wait to synchronize
}

void gyro::xValue() //gets x value
{
byte MSB, LSB; //byte stores an 8-bit unsigned number(MSB,LSB) from 0 to 255.

MSB = readI2C(0x29); //reads x memreg MSB
LSB = readI2C(0x28); //reads x memreg LSB
x = ((MSB << 8) | LSB); //moves MSB out of memo
}

void gyro::yValue()
{
byte MSB, LSB;

MSB = readI2C(0x2B);
LSB = readI2C(0x2A);
y = ((MSB << 8) | LSB);
}

void gyro::zValue()
{
byte MSB, LSB;

MSB = readI2C(0x2D);
LSB = readI2C(0x2C);
z = ((MSB << *) | LSB);
}

void gyro::readI2C(byte regAddr)
{
Wire.beginTransmission(Addr);
Wire.write(regAddr);                // Register address to read
Wire.endTransmission();             // Terminate request
Wire.requestFrom(Addr, 1);          // Read a byte
while(!Wire.available()) { };       // Wait for receipt
return(Wire.read()); // Get result
}

void gyro::writeI2C(byte regAddr, byte val)
{
Wire.beginTransmission(Addr);
Wire.write(regAddr);
Wire.write(val);
Wire.endTransmission();
}



Virtronics

We recently purchased a l3gd20 board from Pololu which came with a library and example. It took around 10 minutes on a UNO to get the gyro working. Have you had a look at the Pololu library?
www.virtronics.com.au

Go Up