Werte auslesen und in Winkel umrechnen
Dependencies: mbed
main.cpp
- Committer:
- Heidl
- Date:
- 2015-09-30
- Revision:
- 0:d1960beb98fe
File content as of revision 0:d1960beb98fe:
#include "MPU6050.h" #include "Serial_HL.h" #include "math.h" BusOut leds(LED4,LED3,LED2,LED1); DigitalOut mpu6050Address (p29); SerialBLK pc(USBTX, USBRX); SvProtocol ua0(&pc); void CommandHandler(); int setAddress (int address) { return address-0x68; // This function determines the address of the sensor via the AD0-pin. } // If it should be 0x68, the AD0-pin is set to GND (0), otherwise it's set to VCC (1). int16_t accelX; double sinX; int16_t angleX; int16_t gyroXRate; int16_t gyroXAngle; main() { ua0.SvMessage("MPU6050-Test"); // Meldung zum PC senden mpu6050Address = setAddress(MPU6050_DEFAULT_ADDRESS); MPU6050 mpu6050; mpu6050.initialize(); //für Ausgabe in Terminal "//" von debug-Befehlen entfernen //mpu6050.setDLPFMode(MPU6050_DLPF_BW_98); //mpu6050.setFullScaleGyroRange(MPU6050_GYRO_FS_2000); accelX = mpu6050.getAccelerationX(); //mpu6050.debugSerial.printf("Beschleunigung in x-Richtung: %d\n\r", accelX); sinX = (double)accelX/16384; angleX = (int16_t) asin(sinX)*57.296; //mpu6050.debugSerial.printf("Neigung: %f\n\r", angleX*57.296); Timer stw; stw.start(); // Timer gyro; gyro.start(); while(1) { CommandHandler(); /* if (gyro.read_us()>125) { gyro.reset(); gyroXRate = mpu6050.getRotationX(); gyroXRate = gyroXRate*0.125+3; gyroXRate = gyroXRate*0.000125; gyroXAngle = gyroXAngle + gyroXRate; } */ accelX = mpu6050.getAccelerationX(); if( (stw.read_ms()>10) ) // 100Hz { // dieser Teil wird mit 100Hz aufgerufen stw.reset(); sinX = (double)accelX/16384; angleX = (float)asin(sinX)*57.296; if( ua0.acqON ) { // nur wenn vom PC aus das Senden eingeschaltet wurde // wird auch etwas gesendet ua0.WriteSvI16(1, angleX-1); // ua0.WriteSvI16(2, gyroXAngle); } } } } void CommandHandler() { uint8_t cmd; int16_t idata1, idata2; // Fragen ob überhaupt etwas im RX-Reg steht if( !pc.IsDataAvail() ) return; // wenn etwas im RX-Reg steht // Kommando lesen cmd = ua0.GetCommand(); if( cmd==3 ) { idata1 = ua0.ReadI16(); leds = idata1; ua0.SvMessage("Leds schalten"); } if( cmd==4 ) { idata1 = leds; ua0.SvPrintf("LEDS %d", idata1); } }