Hallo,
ich bastel gerade ein bisschen mit dem MPU6050 rum. Nutze ihn derzeit zum Erfassen der X und Y Achse. Habe aber ein paar "Probleme" mit den Min und Max-Werten. In der Beispielsdatei waren die Werte als int16_t deklariert, somit -32768 - 32767. Diese Extremwerte kann ich aber nicht anfahren. Die Werte spielen im Bereich von ca. -16000 und 16000 ab.
#include "Wire.h"
#include "I2Cdev.h" // https://github.com/jrowberg/i2cdevlib
#include "MPU6050.h" // https://github.com/jrowberg/i2cdevlib
#include <FastSPI_LED2.h> // https://code.google.com/p/fastspi/
MPU6050 accelgyro;
int ax, ay, az;
int axStart, ayStart, azStart;
const int minRaw = -32768;
const int maxRaw = 32767;
const byte minOut = 0;
const byte maxOut = 255;
const byte NUM_LEDS = 1;
const byte DATA_PIN = 6;
CRGB leds[NUM_LEDS];
int rRaw,gRaw,bRaw;
byte r, g, b;
unsigned long lastMillis0;
unsigned long lastMillis1;
unsigned long lastMillis2;
void setup() {
Wire.begin();
Serial.begin(115200);
accelgyro.initialize();
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
// Jede 100ms neue Werte einholen und umrechnen
if(millis() - lastMillis0 > 100) {
lastMillis0 = millis();
accelgyro.getAcceleration(&ax, &ay, &az);
rRaw = map(ax, minRaw, maxRaw, 0, 255);
if(rRaw >= 0 && rRaw <= 255) r = rRaw;
gRaw = map(ay, minRaw, maxRaw, 0, 255);
if(gRaw > 127 && gRaw <= 255) g = gRaw;
leds[0] = CRGB(r,g,0);
FastLED.show();
}
// Jede Sekunde die Werte auf den Seriellen Monitor ausgeben
if(millis() - lastMillis1 > 1000) {
lastMillis1 = millis();
Serial.print(r);
Serial.print("(");
Serial.print(ax);
Serial.print(")");
Serial.print("\t");
Serial.print(g);
Serial.print("(");
Serial.print(ay);
Serial.println(")");
}
}