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); } }