Ich habe mir das Datenblatt angesehen und sehr viele Register adressen gefunden. Aber die brache nicht nicht alle. Hab mir nur die nötigen Register rausgesucht die ich zum ansprechen brauche. Nun werden mir die Werte angezeigt vom Beschleunigungssensor. Jedoch bezweifele ich das diese richtig sind. Egal es gerade stehen bleibt oder sich bewegt(da soll sein) ändern sich meine Werte ziemlich sehr auseinander.
Den Beschleunigungssensor direkt auszlesen hat irgendwie nicht geklappt. Aber über dem Gyroskop geht es. Was kann daran nicht stimmen?
#include <Wire.h>
#define GYRO 0x68 // gyro I2C address
#define REG_GYRO_X 0x1D // IMU-3000 Register address for GYRO_XOUT_H
#define AUX_DMP_CONTROLL 0x3D // IMU-3000 Register address for controling digital motion processor and the aux device
#define ACCEL 0x0F // Accel I2C Address
#define KXTF9_FILT_REG 0x21 // Data control reg addr
//#define KXTF9_HPFHZ_50 0x00 // HPF roll off at 100 Hz
//#define KXTF9_LPFHZ_400 0x06 // LPF roll off at 25 hz
#define KXTF9_POWER_CTL 0x1B // Power control reg addr
#define KXTF9_PC0 0x80 // Operating mode bit
#define KXTF9_RES 0x40 // Resolution bit
#define KXTF9_GS2G 0x00 // bits for 2G mode
#define KXTF9_GS4G 0x08 // bits for 4G mode
#define KXTF9_GS8G 0x10 // bits for 8G mode
byte buffer[12]; //Array to store ADC values
int accel_x;
int accel_y;
int accel_z;
int i;
// Write a value to address register on device
void writeTo(int device, byte address, byte val) {
Wire.beginTransmission(device); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
delay(100);
//set accel register data address
writeTo(GYRO, 0x18, 0x06);
// set accel i2c slave address
writeTo(GYRO, 0x14, ACCEL);
writeTo(ACCEL, KXTF9_POWER_CTL, KXTF9_PC0 ); // set accel power control to 'measure'
writeTo(GYRO, AUX_DMP_CONTROLL, 0xEE); //cancel pass through to accel, gyro will now read accel for us
}
void loop() {
// put your main code here, to run repeatedly:
// First set the register start address for X on Gyro
Wire.beginTransmission(GYRO);
Wire.write(REG_GYRO_X); //Register Address GYRO_XOUT_H
Wire.endTransmission();
// New read the 12 data bytes
Wire.beginTransmission(GYRO);
Wire.requestFrom(GYRO, 12); // Read 12 bytes
i = 0;
while (Wire.available())
{
buffer = Wire.read();
-
i++;*
-
}*
-
Wire.endTransmission();*
-
// Accel is LSB first. Also because of orientation of chips*
-
// accel y output is in same orientation as gyro x*
-
// and accel x is gyro -y*
-
accel_y = buffer[7] | buffer[6];*
-
accel_x = buffer[9] | buffer[8];*
-
accel_z = buffer[11] | buffer[10];*
-
Serial.print(accel_x);*
-
Serial.print("\t");*
-
Serial.print(accel_y);*
-
Serial.print("\t");*
-
Serial.print(accel_z);*
-
Serial.println("");*
-
delay(1000);*
}