3 axel Arduino Accelerometer / vinkelgivare (luta / rulle / Yaw) (2 / 4 steg)
Steg 2: Koden!
Sedan laddade jag följande kod från http://www.geeetech.com/wiki/index.php/BMA180_Triple_Axis_Accelerometer_Breakout
BMA180 trippel axel accelerometer exempelkod / /
www.geeetech.com//
//
#include < wire.h >
#define BMA180 0x40 //address av accelerometern
#define RESET 0x10
#define PWR 0x0D
#define BW 0X20
#define utbud 0X35
#define DATA 0x02
//
int offx = 31;
int offy = 47;
int offz =-23;
//
void setup()
{
Serial.BEGIN(9600);
Wire.BEGIN();
Serial.println ("Demo började, initierar sensorer");
AccelerometerInit();
Serial.println ("sensorer har initierats");
}
//
void AccelerometerInit()
//
{
byte temp [1].
byte temp1;
//
writeTo(BMA180,RESET,0xB6);
vakna upp läge
writeTo(BMA180,PWR,0x10);
lågpassfilter,
readFrom (BMA180, BW, 1, temp);
temp1 = temp [0] & 0x0F;
writeTo (BMA180, BW, temp1);
intervallet +/-2g
readFrom (BMA180, intervall, 1, temp);
temp1 = (temp [0] & 0xF1) | 0x04;
writeTo(BMA180,RANGE,temp1);
}
//
void AccelerometerRead()
{
läsa i 3 axel data, är var och en 14 bitar
skriva ut data till terminal
int n = 6;
byte resultat [5].
readFrom (BMA180, DATA, n, resultatet);
int x = ((resultatet [0] | resultat [1] << 8 >> 2) + offx;
flyta x1 = x / 4096.0;
Serial.Print("x=");
Serial.Print(x1);
Serial.Print("g");
//
int y = ((resultat [2] | resultat [3] << 8 >> 2) + offy;
flyta y1 = y/4096.0;
Serial.Print(",y=");
Serial.Print(Y1);
Serial.Print("g");
//
int z = ((resultat [4] | resultat [5] << 8 >> 2) + offz;
flyta z1 = z/4096.0;
Serial.Print(",z=");
Serial.Print(Z1);
Serial.println("g");
}
//
void loop()
{
AccelerometerRead();
Delay(300); sakta ner produktionen
}
//
//---------------- Functions--------------------
Skriver val till adressregister på ACC
void writeTo (int enhet, byte adress, byte val)
{
Wire.beginTransmission(DEVICE); Starta överföringen till ACC
Wire.write(Address); Skicka registren adress
Wire.write(val); Skicka värde att skriva
Wire.endTransmission(); avsluta trnsmisson
}
läser num byte från adressregister i till buff array
void readFrom (int enhet, byte adress, int num, byte buff[])
{
Wire.beginTransmission(DEVICE); Starta överföringen till ACC
Wire.write(Address); Skicka reguster adress
Wire.endTransmission(); slutet överföring
Wire.beginTransmission(DEVICE); Starta överföringen till ACC
Wire.requestFrom(DEVICE,num); begäran 6 bitar från ACC
int jag = 0;
While(Wire.available()) //ACC kan onormala
{
buff [i] = Wire.read(); få en byte
i ++;
}
Wire.endTransmission(); slutet överföring
}