Source code for Active Aerodynamics and Drag Reduction System

Dependencies:   mbed Servo mbed-rtos LSM9DS1_Library_cal MPL3115A2

Files at this revision

API Documentation at this revision

Comitter:
cheryldocherty
Date:
Mon Apr 13 14:04:34 2020 +0000
Child:
1:8e8aac99a366
Commit message:
libraries and functions only

Changed in this revision

LSM9DS1_Library_cal.lib Show annotated file Show diff for this revision Revisions of this file
Servo.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /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