3 axis accellerometer for pitch and roll on lcd and serial output

Dependencies:   mbed C12832

Committer:
saltire78
Date:
Sat Dec 05 12:57:45 2020 +0000
Revision:
5:5779c52fa70e
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saltire78 5:5779c52fa70e 1 //Uses the measured z-acceleration to drive leds 2 and 3 of the mbed
saltire78 5:5779c52fa70e 2
saltire78 5:5779c52fa70e 3 #include "mbed.h" // add mbed header
saltire78 5:5779c52fa70e 4 #include "MMA7660.h" // add accelerometer header
saltire78 5:5779c52fa70e 5 #include "C12832.h" // add LCD screen header
saltire78 5:5779c52fa70e 6
saltire78 5:5779c52fa70e 7 MMA7660 MMA(p28, p27); // definine accelerometer
saltire78 5:5779c52fa70e 8 Serial pc(USBTX,USBRX); // define serial port tx,rx
saltire78 5:5779c52fa70e 9 C12832 lcd(p5, p7, p6, p8, p11); // define LCD screen
saltire78 5:5779c52fa70e 10 DigitalOut connectionLed(LED1); // define acc status LED
saltire78 5:5779c52fa70e 11 float pi = 3.14159; // abbreviated value for pi
saltire78 5:5779c52fa70e 12
saltire78 5:5779c52fa70e 13 float calculatePitch(float x, float y, float z) // define function to derive pitch angle
saltire78 5:5779c52fa70e 14 {
saltire78 5:5779c52fa70e 15 float pitch = 0.0; // initialise pitch
saltire78 5:5779c52fa70e 16 pitch = atan( x /sqrt((y*y)+(z*z)) ); // define pitch equation
saltire78 5:5779c52fa70e 17 pitch = pitch * (180/pi); // ammend from radians to degrees
saltire78 5:5779c52fa70e 18 return pitch; // return value of pitch
saltire78 5:5779c52fa70e 19 }
saltire78 5:5779c52fa70e 20
saltire78 5:5779c52fa70e 21 float calculateRoll(float x, float y, float z) // define function to derive pitch angle
saltire78 5:5779c52fa70e 22 {
saltire78 5:5779c52fa70e 23 float roll = 0.0; // initialise roll
saltire78 5:5779c52fa70e 24 roll = atan( y /sqrt((x*x)+(z*z)) ); // define roll equation
saltire78 5:5779c52fa70e 25 roll = roll * (180/pi); // ammend from radians to degrees
saltire78 5:5779c52fa70e 26 return roll; // return value of roll
saltire78 5:5779c52fa70e 27 }
saltire78 5:5779c52fa70e 28
saltire78 5:5779c52fa70e 29 int main() // Start of main program
saltire78 5:5779c52fa70e 30 {
saltire78 5:5779c52fa70e 31 if (MMA.testConnection()) // Test if accelerometer functional
saltire78 5:5779c52fa70e 32 connectionLed = 1; // if functional light LED1
saltire78 5:5779c52fa70e 33
saltire78 5:5779c52fa70e 34 while(1) { // continuous operation
saltire78 5:5779c52fa70e 35 float pitchResult = calculatePitch(MMA.x(), MMA.y(), MMA.z()); // define value for pitch
saltire78 5:5779c52fa70e 36 float rollResult = calculateRoll(MMA.x(), MMA.y(), MMA.z()); // define value for roll
saltire78 5:5779c52fa70e 37 lcd.printf("Pitch = %.4f degrees\n\r", pitchResult); // print statement for pitch [mbed]
saltire78 5:5779c52fa70e 38 lcd.printf("Roll = %.4f degrees\n\n\r", rollResult); // print statement for roll [mbed]
saltire78 5:5779c52fa70e 39 pc.printf("Pitch is %.4f degrees, and Roll is %.4f degrees\n\r", pitchResult, rollResult); // print statement for pitch and roll [serial]
saltire78 5:5779c52fa70e 40 wait(5); // delay of 5 seconds between iterations of program
saltire78 5:5779c52fa70e 41 }
saltire78 5:5779c52fa70e 42
saltire78 5:5779c52fa70e 43 }