Sound update

Dependencies:   4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed

main.cpp

Committer:
jstephens78
Date:
19 months ago
Revision:
7:d27f97ac2bea
Parent:
0:da114b98e013
Child:
8:005b0a85be70

File content as of revision 7:d27f97ac2bea:

// uLCD-144-G2 demo program for uLCD-4GL LCD driver library
//
#include <cmath>
#include "mbed.h"
#include "uLCD_4DGL.h"
#include "LSM9DS1.h"
#define PI 3.14159

uLCD_4DGL uLCD(p9,p10,p30);
LSM9DS1 imu(p28, p27, 0xD6, 0x3C);
Serial pc(USBTX, USBRX);

void getAttitude(LSM9DS1& imu, float& roll, float& pitch, float& yaw)
{
    float ax = imu.calcAccel(imu.ax),
          ay = imu.calcAccel(imu.ay),
          az = imu.calcAccel(imu.az),
          mx = -imu.calcMag(imu.mx),
          my = imu.calcMag(imu.my),
          mz = imu.calcMag(imu.mz);

    pitch = atan2(-ax, sqrt(ay * ay + az * az));

    if (az == 0.0)  roll = (ay < 0.0) ? 180 : 0.0;
    else            roll = atan2(ay, az);
        
    if (my == 0.0)  yaw = (mx < 0.0) ? 180.0 : 0.0;
    else            yaw = atan2(mx, my);
    
    if (yaw > 180.0)        yaw -=PI;
    else if (yaw < -180.0)  yaw += PI;

}

int main()
{
    imu.begin();
    if (!imu.begin()) {
        pc.printf("Failed to communicate with LSM9DS1.\n");
    }
    imu.calibrate(1);


    while (true) {
        // Read IMU
        while(!imu.accelAvailable());
        imu.readAccel();

        while (!imu.magAvailable());
        imu.readMag();



        float roll, pitch, yaw;
        getAttitude(imu, roll, pitch, yaw);

        pc.printf("%7f %7f %7f\r\n", roll, pitch, yaw);


        uLCD.cls();

        float x = 64 + roll * 60;
        float y = 64 + pitch * 60;
        float dx = 12 * sin(yaw);
        float dy = 12 * cos(yaw);

        uLCD.circle(x, y, 2, GREEN);
        uLCD.line(x-dx, y-dy, x+dx, y+dy, GREEN);
        wait(.05);
    }
}