Lär dig mer om L3GD20 Breakout styrelsen (4 / 16 steg)
Steg 4: Programvara kodning
Här är den kompletta programvara koden:
#include
#define CTRL_REG1 0x20
#define CTRL_REG2 0x21
#define CTRL_REG3 0x22
#define CTRL_REG4 0x23
#define CTRL_REG5 0x24
int L3GD20_Address = 106; I2C adressen till L3GD20
int x;
int y;
int z;
void setup() {
Wire.BEGIN();
Serial.BEGIN(9600);
Serial.println ("starta L3GD20");
setupL3GD20(2000); Konfigurera L3GD20 - 250, 500 eller 2000 grader per sekund
pinMode (2, utgång); X + Ve värde
pinMode (3, OUTPUT); X - Ve värde
pinMode (4, OUTPUT); Y + Ve värde
pinMode (5, OUTPUT); Y - Ve värdet
pinMode (6, OUTPUT); Z + Ve värdet
pinMode (7, OUTPUT); Z - Ve värdet
Delay(100); vänta på sensorn för att vara redo
}
void loop() {
getGyroValues(); Då uppdateras x, y och z med nya värden
Serial.Print("X:");
Serial.Print(x);
Serial.Print ("y");
Serial.Print(y);
Serial.Print ("Z:");
Serial.println(z);
Delay(100); Bara här för att bromsa den seriella att göra det mer lättläst
LED funktioner *** / /
X - placera lysdioder *** / /
om (x > = 1000)
{
digitalWrite (2, hög).
digitalWrite (3, låg).
}
annars om (x < =-1000)
{
digitalWrite (3, hög).
digitalWrite (2, låg).
}
annat
{
digitalWrite (2, låg).
digitalWrite (3, låg).
}
Y - position lysdioder *** / /
om (y > = 1000)
{
digitalWrite (4, hög).
digitalWrite(5,LOW);
}
annars om (y < =-1000)
{
digitalWrite 5, hög,
digitalWrite (4, låg).
}
annat
{
digitalWrite (4, låg).
digitalWrite (5, låg).
}
Z - placera lysdioder *** / /
om (z > = 1000)
{
digitalWrite (6, hög).
digitalWrite (7, låg).
}
annars om (z < =-1000)
{
digitalWrite (7, hög).
digitalWrite (6, låg).
}
annat
{
digitalWrite (7, låg).
digitalWrite (6, låg).
}
LED funcitons ändar *** / /
}
void getGyroValues() {
byte xMSB = readRegister (L3GD20_Address, 0x29);
byte xLSB = readRegister (L3GD20_Address, 0x28);
x = ((xMSB << 8) | xLSB);
byte yMSB = readRegister (L3GD20_Address, 0x2B);
byte yLSB = readRegister (L3GD20_Address, 0x2A);
y = ((yMSB << 8) | yLSB);
byte zMSB = readRegister (L3GD20_Address, 0x2D);
byte zLSB = readRegister (L3GD20_Address, 0x2C);
z = ((zMSB << 8) | zLSB);
}
int setupL3GD20 (int skala) {
Från Jim Lindblom Sparkfuns kod
Aktiverar x, y, z och stäng av avstängning:
writeRegister (L3GD20_Address, CTRL_REG1, 0b00001111);
Om du vill justera/användning av HPF, kan du redigera raden nedan för att konfigurera CTRL_REG2:
writeRegister (L3GD20_Address, CTRL_REG2, 0b00000000);
Konfigurera CTRL_REG3 för att generera data redo avbrott på INT2
Inget avbrott används på INT1, om du vill konfigurera INT1
eller INT2 annars, kontakta databladet:
writeRegister (L3GD20_Address, CTRL_REG3, 0b00001000);
CTRL_REG4 styr den fullskaliga sortiment, bland annat:
IF(Scale == 250) {
writeRegister (L3GD20_Address, CTRL_REG4, 0b00000000);
} annat if(scale == 500) {
writeRegister (L3GD20_Address, CTRL_REG4, 0b00010000);
} annat {
writeRegister (L3GD20_Address, CTRL_REG4, 0b00110000);
}
CTRL_REG5 kontroller högpass filtrering av utgångar, använda den
Om du vill ha:
writeRegister (L3GD20_Address, CTRL_REG5, 0b00000000);
}
void writeRegister (int deviceAddress, byte adress, byte val) {
Wire.beginTransmission(deviceAddress); Starta överföringen till enhet
Wire.write(Address); Skicka registren adress
Wire.write(val); Skicka värde att skriva
Wire.endTransmission(); slutet överföring
}
int readRegister (int deviceAddress, byte adress) {
int v.
Wire.beginTransmission(deviceAddress);
Wire.write(Address); Registrera för att läsa
Wire.endTransmission();
Wire.requestFrom (deviceAddress, 1); Läs en byte
tag (!. Wire.available()) {
väntar på
}
v = Wire.read();
returnera v.
}