Thomas Allen
/
AccelerometerTest1611
11/16
main.cpp@0:0dc99d71b2f3, 2015-11-08 (annotated)
- Committer:
- el13ytg
- Date:
- Sun Nov 08 18:02:02 2015 +0000
- Revision:
- 0:0dc99d71b2f3
- Child:
- 1:e41af8c958b8
Version 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el13ytg | 0:0dc99d71b2f3 | 1 | //AccelerometerTest |
el13ytg | 0:0dc99d71b2f3 | 2 | //Toby Galal |
el13ytg | 0:0dc99d71b2f3 | 3 | //6 November 2015 |
el13ytg | 0:0dc99d71b2f3 | 4 | //A program used to gather data from ADXL335 accelerometers and print them to file (.txt) in a MatLab-compliant format |
el13ytg | 0:0dc99d71b2f3 | 5 | |
el13ytg | 0:0dc99d71b2f3 | 6 | #include "mbed.h" |
el13ytg | 0:0dc99d71b2f3 | 7 | |
el13ytg | 0:0dc99d71b2f3 | 8 | //Hardware Initialisation |
el13ytg | 0:0dc99d71b2f3 | 9 | AnalogIn XIn(p15); //X Input |
el13ytg | 0:0dc99d71b2f3 | 10 | AnalogIn YIn(p16); //Y Input |
el13ytg | 0:0dc99d71b2f3 | 11 | AnalogIn ZIn(p17); //Z Input |
el13ytg | 0:0dc99d71b2f3 | 12 | //Serial pc(USBTX, USBRX); //Serial to print readings to terminal |
el13ytg | 0:0dc99d71b2f3 | 13 | Ticker timer; //Timer to call ISR |
el13ytg | 0:0dc99d71b2f3 | 14 | LocalFileSystem local("local"); // create local filesystem |
el13ytg | 0:0dc99d71b2f3 | 15 | BusOut leds(LED4,LED3,LED2,LED1); //debug |
el13ytg | 0:0dc99d71b2f3 | 16 | |
el13ytg | 0:0dc99d71b2f3 | 17 | //Global Variables |
el13ytg | 0:0dc99d71b2f3 | 18 | float XOut, YOut, ZOut; //variables to store XYZ readings |
el13ytg | 0:0dc99d71b2f3 | 19 | float CalX, CalY, CalZ; //variables to store 0G bias readings |
el13ytg | 0:0dc99d71b2f3 | 20 | int flag; //flag for ISR |
el13ytg | 0:0dc99d71b2f3 | 21 | float X[1000], Y[1000], Z[1000]; //arrays to store results |
el13ytg | 0:0dc99d71b2f3 | 22 | int n; //variable to store the number of readings |
el13ytg | 0:0dc99d71b2f3 | 23 | |
el13ytg | 0:0dc99d71b2f3 | 24 | //Function Prototypes |
el13ytg | 0:0dc99d71b2f3 | 25 | void Calibrate(); |
el13ytg | 0:0dc99d71b2f3 | 26 | void ISR(); |
el13ytg | 0:0dc99d71b2f3 | 27 | void Send_Data(); |
el13ytg | 0:0dc99d71b2f3 | 28 | void writeDataToFile(); |
el13ytg | 0:0dc99d71b2f3 | 29 | |
el13ytg | 0:0dc99d71b2f3 | 30 | //Main Function |
el13ytg | 0:0dc99d71b2f3 | 31 | int main() { |
el13ytg | 0:0dc99d71b2f3 | 32 | |
el13ytg | 0:0dc99d71b2f3 | 33 | wait(2.0); //allow accelerometer to stabilise |
el13ytg | 0:0dc99d71b2f3 | 34 | Calibrate(); |
el13ytg | 0:0dc99d71b2f3 | 35 | timer.attach(&ISR, 0.1); //attach ISR function to timer |
el13ytg | 0:0dc99d71b2f3 | 36 | |
el13ytg | 0:0dc99d71b2f3 | 37 | while (n < 1000) { |
el13ytg | 0:0dc99d71b2f3 | 38 | if (flag) { //if flag has been set |
el13ytg | 0:0dc99d71b2f3 | 39 | flag = 0; //reset flag |
el13ytg | 0:0dc99d71b2f3 | 40 | Send_Data(); |
el13ytg | 0:0dc99d71b2f3 | 41 | } |
el13ytg | 0:0dc99d71b2f3 | 42 | } |
el13ytg | 0:0dc99d71b2f3 | 43 | writeDataToFile(); |
el13ytg | 0:0dc99d71b2f3 | 44 | } |
el13ytg | 0:0dc99d71b2f3 | 45 | |
el13ytg | 0:0dc99d71b2f3 | 46 | //Function Definitions |
el13ytg | 0:0dc99d71b2f3 | 47 | void Calibrate() { |
el13ytg | 0:0dc99d71b2f3 | 48 | CalX = XIn.read() * 3.3; //static values |
el13ytg | 0:0dc99d71b2f3 | 49 | CalY = YIn.read() * 3.3; |
el13ytg | 0:0dc99d71b2f3 | 50 | CalZ = ZIn.read() * 3.3; |
el13ytg | 0:0dc99d71b2f3 | 51 | } |
el13ytg | 0:0dc99d71b2f3 | 52 | |
el13ytg | 0:0dc99d71b2f3 | 53 | void ISR() { |
el13ytg | 0:0dc99d71b2f3 | 54 | flag = 1; |
el13ytg | 0:0dc99d71b2f3 | 55 | } |
el13ytg | 0:0dc99d71b2f3 | 56 | |
el13ytg | 0:0dc99d71b2f3 | 57 | void Send_Data() { |
el13ytg | 0:0dc99d71b2f3 | 58 | XOut = (XIn.read() * 3.3) - CalX; //differences |
el13ytg | 0:0dc99d71b2f3 | 59 | YOut = (YIn.read() * 3.3) - CalY; |
el13ytg | 0:0dc99d71b2f3 | 60 | ZOut = (ZIn.read() * 3.3) - CalZ; |
el13ytg | 0:0dc99d71b2f3 | 61 | X[n] = XOut; //store result in array |
el13ytg | 0:0dc99d71b2f3 | 62 | Y[n] = YOut; |
el13ytg | 0:0dc99d71b2f3 | 63 | Z[n] = ZOut; |
el13ytg | 0:0dc99d71b2f3 | 64 | n++; |
el13ytg | 0:0dc99d71b2f3 | 65 | |
el13ytg | 0:0dc99d71b2f3 | 66 | //pc.printf("%d) X = %.2f | Y = %.2f | Z = %.2f\n\r", n, XOut, YOut, ZOut); |
el13ytg | 0:0dc99d71b2f3 | 67 | } |
el13ytg | 0:0dc99d71b2f3 | 68 | |
el13ytg | 0:0dc99d71b2f3 | 69 | void writeDataToFile() { |
el13ytg | 0:0dc99d71b2f3 | 70 | |
el13ytg | 0:0dc99d71b2f3 | 71 | leds = 15; // turn on LEDs for feedback |
el13ytg | 0:0dc99d71b2f3 | 72 | FILE *results = fopen("/local/results.txt", "w"); // open 'results.txt' for writing |
el13ytg | 0:0dc99d71b2f3 | 73 | |
el13ytg | 0:0dc99d71b2f3 | 74 | fprintf(results, "x = ["); //print X array |
el13ytg | 0:0dc99d71b2f3 | 75 | |
el13ytg | 0:0dc99d71b2f3 | 76 | for (int i = 0; i < 999; i++) { |
el13ytg | 0:0dc99d71b2f3 | 77 | fprintf(results, "%.2f,", X[i]); |
el13ytg | 0:0dc99d71b2f3 | 78 | } |
el13ytg | 0:0dc99d71b2f3 | 79 | |
el13ytg | 0:0dc99d71b2f3 | 80 | fprintf(results, "%.2f]\n\r", X[999]); |
el13ytg | 0:0dc99d71b2f3 | 81 | |
el13ytg | 0:0dc99d71b2f3 | 82 | fprintf(results, "y = ["); //print Y array |
el13ytg | 0:0dc99d71b2f3 | 83 | |
el13ytg | 0:0dc99d71b2f3 | 84 | for (int i = 0; i < 999; i++) { |
el13ytg | 0:0dc99d71b2f3 | 85 | fprintf(results, "%.2f,", Y[i]); |
el13ytg | 0:0dc99d71b2f3 | 86 | } |
el13ytg | 0:0dc99d71b2f3 | 87 | |
el13ytg | 0:0dc99d71b2f3 | 88 | fprintf(results, "%.2f]\n\r", Y[999]); |
el13ytg | 0:0dc99d71b2f3 | 89 | |
el13ytg | 0:0dc99d71b2f3 | 90 | fprintf(results, "z = ["); //print Z array |
el13ytg | 0:0dc99d71b2f3 | 91 | |
el13ytg | 0:0dc99d71b2f3 | 92 | for (int i = 0; i < 999; i++) { |
el13ytg | 0:0dc99d71b2f3 | 93 | fprintf(results, "%.2f,", Z[i]); |
el13ytg | 0:0dc99d71b2f3 | 94 | } |
el13ytg | 0:0dc99d71b2f3 | 95 | |
el13ytg | 0:0dc99d71b2f3 | 96 | fprintf(results, "%.2f]\n\r", Z[999]); |
el13ytg | 0:0dc99d71b2f3 | 97 | |
el13ytg | 0:0dc99d71b2f3 | 98 | fclose(results); // close file |
el13ytg | 0:0dc99d71b2f3 | 99 | leds = 0; // turn off LEDs to signify file access has finished |
el13ytg | 0:0dc99d71b2f3 | 100 | } |