Source code for Active Aerodynamics and Drag Reduction System
Dependencies: mbed Servo mbed-rtos LSM9DS1_Library_cal MPL3115A2
Revision 0:04fef978a0ab, committed 2020-04-13
- Comitter:
- cheryldocherty
- Date:
- Mon Apr 13 14:04:34 2020 +0000
- Child:
- 1:8e8aac99a366
- Commit message:
- libraries and functions only
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LSM9DS1_Library_cal.lib Mon Apr 13 14:04:34 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/cheryldocherty/code/LSM9DS1_Library_cal/#77083eb00ab0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Servo.lib Mon Apr 13 14:04:34 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/simon/code/Servo/#36b69a7ced07
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Apr 13 14:04:34 2020 +0000 @@ -0,0 +1,106 @@ +#include "mbed.h" +#include "rtos.h" +#include "Servo.h" +#include "LSM9DS1.h" +#define PI 3.14159 // Used in IMU code +#define DECLINATION -4.94 // Declination (degrees) in Atlanta,GA (Used in IMU code) + + +// OBJECTS +Servo servoFrontLeft(p21); +Servo servoFrontRight(p22); +Servo servoBackLeft(p23); +Servo servoBackRight(p24); +LSM9DS1 IMU(p9, p10, 0xD6, 0x3C); +Serial blue(p28,p27); // bluetooth +//BusOut myled(LED1,LED2,LED3,LED4); //bluetooth debugging +Thread thread1; +Serial pc(USBTX, USBRX); // Debugging + + +// VARIABLE DECLARATIONS +volatile char bluetoothRead = 0; + + +// FUNCTION DECLARATIONS +void bluetooth_recv() +{ + bluetoothRead = blue.getc(); + /*if (blue.getc()=='!') { + if (blue.getc()=='B') { //button data + bluetoothRead = blue.getc(); //button number + if ((bluetoothRead>='1')&&(bluetoothRead<='4')) //is a number button 1..4 + myled[bluetoothRead-'1']=blue.getc()-'0'; //turn on/off that num LED + } + } */ +} + +// IMU - caluclate pitch and roll +void printAttitude(float ax, float ay, float az, float mx, float my, float mz) +{ + float roll = atan2(ay, az); + float pitch = atan2(-ax, sqrt(ay * ay + az * az)); + // touchy trig stuff to use arctan to get compass heading (scale is 0..360) + mx = -mx; + float heading; + if (my == 0.0) + heading = (mx < 0.0) ? 180.0 : 0.0; + else + heading = atan2(mx, my)*360.0/(2.0*PI); + //pc.printf("heading atan=%f \n\r",heading); + heading -= DECLINATION; //correct for geo location + if(heading>180.0) heading = heading - 360.0; + else if(heading<-180.0) heading = 360.0 + heading; + else if(heading<0.0) heading = 360.0 + heading; + // Convert everything from radians to degrees: + //heading *= 180.0 / PI; + pitch *= 180.0 / PI; + roll *= 180.0 / PI; + pc.printf("Pitch: %f, Roll: %f degress\n\r",pitch,roll); + pc.printf("Magnetic Heading: %f degress\n\r",heading); +} + +// IMU - read and display magnetometer, gyroscope, acceleration values +void getIMUData() +{ + while(!IMU.magAvailable(X_AXIS)); + IMU.readMag(); + while(!IMU.accelAvailable()); + IMU.readAccel(); + while(!IMU.gyroAvailable()); + IMU.readGyro(); + pc.printf(" X axis Y axis Z axis\n\r"); + pc.printf("gyro: %9f %9f %9f in deg/s\n\r", IMU.calcGyro(IMU.gx), IMU.calcGyro(IMU.gy), IMU.calcGyro(IMU.gz)); + pc.printf("accel: %9f %9f %9f in Gs\n\r", IMU.calcAccel(IMU.ax), IMU.calcAccel(IMU.ay), IMU.calcAccel(IMU.az)); + pc.printf("mag: %9f %9f %9f in gauss\n\r", IMU.calcMag(IMU.mx), IMU.calcMag(IMU.my), IMU.calcMag(IMU.mz)); + printAttitude(IMU.calcAccel(IMU.ax), IMU.calcAccel(IMU.ay), IMU.calcAccel(IMU.az), IMU.calcMag(IMU.mx), + IMU.calcMag(IMU.my), IMU.calcMag(IMU.mz)); +} + + +// THREADS +void thread1Name() { + while (true) { + // things + Thread::wait(100); + } +} + + +int main() { + // initialise IMU + IMU.begin(); + if (!IMU.begin()) { + pc.printf("Failed to communicate with LSM9DS1.\n"); + } + IMU.calibrate(1); + IMU.calibrateMag(0); + + // Start threads + thread1.start(thread1Name); + + while(1) { + // things + Thread::wait(1000); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Mon Apr 13 14:04:34 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed-rtos/#5713cbbdb706
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Apr 13 14:04:34 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file