Sound update

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

Committer:
jstephens78
Date:
Tue Nov 15 04:20:38 2022 +0000
Revision:
7:d27f97ac2bea
Parent:
0:da114b98e013
Child:
8:005b0a85be70
Accelerometer-based control testing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jstephens78 7:d27f97ac2bea 1 // uLCD-144-G2 demo program for uLCD-4GL LCD driver library
jstephens78 7:d27f97ac2bea 2 //
jstephens78 7:d27f97ac2bea 3 #include <cmath>
jstephens78 0:da114b98e013 4 #include "mbed.h"
jstephens78 7:d27f97ac2bea 5 #include "uLCD_4DGL.h"
jstephens78 7:d27f97ac2bea 6 #include "LSM9DS1.h"
jstephens78 7:d27f97ac2bea 7 #define PI 3.14159
jstephens78 7:d27f97ac2bea 8
jstephens78 7:d27f97ac2bea 9 uLCD_4DGL uLCD(p9,p10,p30);
jstephens78 7:d27f97ac2bea 10 LSM9DS1 imu(p28, p27, 0xD6, 0x3C);
jstephens78 7:d27f97ac2bea 11 Serial pc(USBTX, USBRX);
jstephens78 0:da114b98e013 12
jstephens78 7:d27f97ac2bea 13 void getAttitude(LSM9DS1& imu, float& roll, float& pitch, float& yaw)
jstephens78 7:d27f97ac2bea 14 {
jstephens78 7:d27f97ac2bea 15 float ax = imu.calcAccel(imu.ax),
jstephens78 7:d27f97ac2bea 16 ay = imu.calcAccel(imu.ay),
jstephens78 7:d27f97ac2bea 17 az = imu.calcAccel(imu.az),
jstephens78 7:d27f97ac2bea 18 mx = -imu.calcMag(imu.mx),
jstephens78 7:d27f97ac2bea 19 my = imu.calcMag(imu.my),
jstephens78 7:d27f97ac2bea 20 mz = imu.calcMag(imu.mz);
jstephens78 7:d27f97ac2bea 21
jstephens78 7:d27f97ac2bea 22 pitch = atan2(-ax, sqrt(ay * ay + az * az));
jstephens78 7:d27f97ac2bea 23
jstephens78 7:d27f97ac2bea 24 if (az == 0.0) roll = (ay < 0.0) ? 180 : 0.0;
jstephens78 7:d27f97ac2bea 25 else roll = atan2(ay, az);
jstephens78 7:d27f97ac2bea 26
jstephens78 7:d27f97ac2bea 27 if (my == 0.0) yaw = (mx < 0.0) ? 180.0 : 0.0;
jstephens78 7:d27f97ac2bea 28 else yaw = atan2(mx, my);
jstephens78 7:d27f97ac2bea 29
jstephens78 7:d27f97ac2bea 30 if (yaw > 180.0) yaw -=PI;
jstephens78 7:d27f97ac2bea 31 else if (yaw < -180.0) yaw += PI;
jstephens78 7:d27f97ac2bea 32
jstephens78 7:d27f97ac2bea 33 }
jstephens78 0:da114b98e013 34
jstephens78 7:d27f97ac2bea 35 int main()
jstephens78 7:d27f97ac2bea 36 {
jstephens78 7:d27f97ac2bea 37 imu.begin();
jstephens78 7:d27f97ac2bea 38 if (!imu.begin()) {
jstephens78 7:d27f97ac2bea 39 pc.printf("Failed to communicate with LSM9DS1.\n");
jstephens78 7:d27f97ac2bea 40 }
jstephens78 7:d27f97ac2bea 41 imu.calibrate(1);
jstephens78 7:d27f97ac2bea 42
jstephens78 7:d27f97ac2bea 43
jstephens78 7:d27f97ac2bea 44 while (true) {
jstephens78 7:d27f97ac2bea 45 // Read IMU
jstephens78 7:d27f97ac2bea 46 while(!imu.accelAvailable());
jstephens78 7:d27f97ac2bea 47 imu.readAccel();
jstephens78 7:d27f97ac2bea 48
jstephens78 7:d27f97ac2bea 49 while (!imu.magAvailable());
jstephens78 7:d27f97ac2bea 50 imu.readMag();
jstephens78 7:d27f97ac2bea 51
jstephens78 7:d27f97ac2bea 52
jstephens78 7:d27f97ac2bea 53
jstephens78 7:d27f97ac2bea 54 float roll, pitch, yaw;
jstephens78 7:d27f97ac2bea 55 getAttitude(imu, roll, pitch, yaw);
jstephens78 7:d27f97ac2bea 56
jstephens78 7:d27f97ac2bea 57 pc.printf("%7f %7f %7f\r\n", roll, pitch, yaw);
jstephens78 7:d27f97ac2bea 58
jstephens78 7:d27f97ac2bea 59
jstephens78 7:d27f97ac2bea 60 uLCD.cls();
jstephens78 7:d27f97ac2bea 61
jstephens78 7:d27f97ac2bea 62 float x = 64 + roll * 60;
jstephens78 7:d27f97ac2bea 63 float y = 64 + pitch * 60;
jstephens78 7:d27f97ac2bea 64 float dx = 12 * sin(yaw);
jstephens78 7:d27f97ac2bea 65 float dy = 12 * cos(yaw);
jstephens78 7:d27f97ac2bea 66
jstephens78 7:d27f97ac2bea 67 uLCD.circle(x, y, 2, GREEN);
jstephens78 7:d27f97ac2bea 68 uLCD.line(x-dx, y-dy, x+dx, y+dy, GREEN);
jstephens78 7:d27f97ac2bea 69 wait(.05);
jstephens78 0:da114b98e013 70 }
jstephens78 0:da114b98e013 71 }