Victor Szultka
/
CPS_Lab2_3Axis_Acc
3 axis accellerometer for pitch and roll on lcd and serial output
main.cpp@5:5779c52fa70e, 2020-12-05 (annotated)
- Committer:
- saltire78
- Date:
- Sat Dec 05 12:57:45 2020 +0000
- Revision:
- 5:5779c52fa70e
.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |