code for the speed robot

Dependencies:   MPU6050-DMP mbed PololuQTRSensors vl53l0x

gyro.h

Committer:
deepanaishtaweera174
Date:
2019-10-01
Revision:
8:d7941bcd9981
Parent:
7:fd80a0d11658

File content as of revision 8:d7941bcd9981:

void DmpDataReady();

void InitMPU()
{
    InterruptIn dmpInterrupt(INTERRUPT_PIN);
    mpu.initialize();  
    wait(0.2);
    devStatus = mpu.dmpInitialize();
    PrintSerial("Dmp Initialized!");

    mpu.setXGyroOffset(98);
    mpu.setYGyroOffset(-24);
    mpu.setZGyroOffset(0);
    mpu.setZAccelOffset(1788);

    if (devStatus == 0)
    {
        mpu.setDMPEnabled(true);
        dmpInterrupt.rise(&DmpDataReady);
        
        mpuIntStatus = mpu.getIntStatus();
        dmpReady = true;
        packetSize = mpu.dmpGetFIFOPacketSize();
        // mpu.resetFIFO();
        // fifoCount = mpu.getFIFOCount();
        PrintSerial("DMP Began");
    }
    else
    {
    }
}

void DmpDataReady()
{
    mpuInterrupt = true;
}

void DMPMath()
{
    mpu.dmpGetQuaternion(&q, fifoBuffer);
    mpu.dmpGetGravity(&gravity, &q);
    mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
    zAngle = (int)ypr[0] * 180 / M_PI;
    xAngle = (int)ypr[1] * 180 / M_PI;
    if (zAngle < 0)
    {
        zAngle += 360;
    }
    if (xAngle < 0)
    {
        xAngle += 360;
    }
}

void GetAngles(bool silentMode)
{
    if (!dmpReady)
        return;
    while (!mpuInterrupt && fifoCount < packetSize)
    {
        if (mpuInterrupt && fifoCount < packetSize)
        {
            fifoCount = mpu.getFIFOCount();
        }
    }

    mpuInterrupt = false;
    mpuIntStatus = mpu.getIntStatus();
    fifoCount = mpu.getFIFOCount();
    if ((mpuIntStatus & 0x10) || fifoCount == 1024)
    {
        mpu.resetFIFO();
        fifoCount = mpu.getFIFOCount();
        while (!mpuInterrupt)
        {
        }
    }
    if (mpuIntStatus & 0x02)
    {
        while (fifoCount < packetSize)
            fifoCount = mpu.getFIFOCount();
        mpu.getFIFOBytes(fifoBuffer, packetSize);
        fifoCount -= packetSize;
        DMPMath();
        if (!silentMode)
        {
            printf("%d\n",(int)zAngle);
        }
    }
}