11/16

Dependencies:   mbed

Committer:
el13ytg
Date:
Fri Nov 20 19:27:43 2015 +0000
Revision:
1:e41af8c958b8
Parent:
0:0dc99d71b2f3
Child:
3:08f020c3d2b7
v2.0

Who changed what in which revision?

UserRevisionLine numberNew 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 1:e41af8c958b8 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 1:e41af8c958b8 15 BusOut leds(LED4,LED3,LED2,LED1); //debugio
el13ytg 0:0dc99d71b2f3 16
el13ytg 0:0dc99d71b2f3 17 //Global Variables
el13ytg 0:0dc99d71b2f3 18 float XOut, YOut, ZOut; //variables to store XYZ readings
el13ytg 1:e41af8c958b8 19 float Xo, Yo, Zo; //variables to store 0G bias readings
el13ytg 0:0dc99d71b2f3 20 int flag; //flag for ISR
el13ytg 1:e41af8c958b8 21 float X[2000], Y[2000], Z[2000]; //arrays to store results
el13ytg 1:e41af8c958b8 22 float CalX[20], CalY[20], CalZ[20]; //arrays to store calibration readings
el13ytg 0:0dc99d71b2f3 23 int n; //variable to store the number of readings
el13ytg 0:0dc99d71b2f3 24
el13ytg 0:0dc99d71b2f3 25 //Function Prototypes
el13ytg 0:0dc99d71b2f3 26 void Calibrate();
el13ytg 0:0dc99d71b2f3 27 void ISR();
el13ytg 0:0dc99d71b2f3 28 void Send_Data();
el13ytg 0:0dc99d71b2f3 29 void writeDataToFile();
el13ytg 0:0dc99d71b2f3 30
el13ytg 0:0dc99d71b2f3 31 //Main Function
el13ytg 0:0dc99d71b2f3 32 int main() {
el13ytg 0:0dc99d71b2f3 33
el13ytg 1:e41af8c958b8 34 wait(5.0); //allow accelerometer to stabilise
el13ytg 0:0dc99d71b2f3 35 Calibrate();
el13ytg 1:e41af8c958b8 36 pc.printf("Ready in:");
el13ytg 1:e41af8c958b8 37 for (int i = 10; i > 0; i--) {
el13ytg 1:e41af8c958b8 38 pc.printf("%d\n\r", i);
el13ytg 1:e41af8c958b8 39 wait(1.0);
el13ytg 1:e41af8c958b8 40 }
el13ytg 0:0dc99d71b2f3 41
el13ytg 1:e41af8c958b8 42 timer.attach(&ISR, 0.005); //attach ISR function to timer (100Hz)
el13ytg 1:e41af8c958b8 43
el13ytg 1:e41af8c958b8 44 while (n < 2000) {
el13ytg 0:0dc99d71b2f3 45 if (flag) { //if flag has been set
el13ytg 0:0dc99d71b2f3 46 flag = 0; //reset flag
el13ytg 0:0dc99d71b2f3 47 Send_Data();
el13ytg 0:0dc99d71b2f3 48 }
el13ytg 0:0dc99d71b2f3 49 }
el13ytg 1:e41af8c958b8 50 pc.printf("Writing...\n\r");
el13ytg 0:0dc99d71b2f3 51 writeDataToFile();
el13ytg 1:e41af8c958b8 52 pc.printf("Done.\n\r");
el13ytg 0:0dc99d71b2f3 53 }
el13ytg 0:0dc99d71b2f3 54
el13ytg 0:0dc99d71b2f3 55 //Function Definitions
el13ytg 0:0dc99d71b2f3 56 void Calibrate() {
el13ytg 1:e41af8c958b8 57
el13ytg 1:e41af8c958b8 58 for (int i = 0; i < 20; i++) { //read and store 20 samples
el13ytg 1:e41af8c958b8 59 CalX[i] = XIn.read() * 3.3;
el13ytg 1:e41af8c958b8 60 CalY[i] = YIn.read() * 3.3;
el13ytg 1:e41af8c958b8 61 CalZ[i] = ZIn.read() * 3.3;
el13ytg 1:e41af8c958b8 62 }
el13ytg 1:e41af8c958b8 63
el13ytg 1:e41af8c958b8 64 for (int i = 0; i < 20; i++) { //sum readings
el13ytg 1:e41af8c958b8 65 Xo = Xo + CalX[i];
el13ytg 1:e41af8c958b8 66 Yo = Yo + CalY[i];
el13ytg 1:e41af8c958b8 67 Zo = Zo + CalZ[i];
el13ytg 1:e41af8c958b8 68 }
el13ytg 1:e41af8c958b8 69
el13ytg 1:e41af8c958b8 70 Xo = Xo / 20; //find mean and store it
el13ytg 1:e41af8c958b8 71 Yo = Yo / 20;
el13ytg 1:e41af8c958b8 72 Zo = Zo / 20;
el13ytg 1:e41af8c958b8 73
el13ytg 1:e41af8c958b8 74 pc.printf("Calibration Values = %.3f | %.3f | %.3f\n\r", Xo, Yo, Zo);
el13ytg 0:0dc99d71b2f3 75 }
el13ytg 0:0dc99d71b2f3 76
el13ytg 0:0dc99d71b2f3 77 void ISR() {
el13ytg 0:0dc99d71b2f3 78 flag = 1;
el13ytg 0:0dc99d71b2f3 79 }
el13ytg 0:0dc99d71b2f3 80
el13ytg 0:0dc99d71b2f3 81 void Send_Data() {
el13ytg 1:e41af8c958b8 82 XOut = (XIn.read() * 3.3) - Xo; //differences
el13ytg 1:e41af8c958b8 83 YOut = (YIn.read() * 3.3) - Yo;
el13ytg 1:e41af8c958b8 84 ZOut = (ZIn.read() * 3.3) - Zo;
el13ytg 1:e41af8c958b8 85 X[n] = XOut / 0.3; //convert voltage to g-force (300mv/g) and store in array
el13ytg 1:e41af8c958b8 86 Y[n] = YOut / 0.3;
el13ytg 1:e41af8c958b8 87 Z[n] = ZOut / 0.3;
el13ytg 0:0dc99d71b2f3 88 n++;
el13ytg 0:0dc99d71b2f3 89
el13ytg 1:e41af8c958b8 90 pc.printf("%d) X = %.2f | Y = %.2f | Z = %.2f\n\r", n, XOut, YOut, ZOut);
el13ytg 0:0dc99d71b2f3 91 }
el13ytg 0:0dc99d71b2f3 92
el13ytg 0:0dc99d71b2f3 93 void writeDataToFile() {
el13ytg 0:0dc99d71b2f3 94
el13ytg 0:0dc99d71b2f3 95 leds = 15; // turn on LEDs for feedback
el13ytg 0:0dc99d71b2f3 96 FILE *results = fopen("/local/results.txt", "w"); // open 'results.txt' for writing
el13ytg 0:0dc99d71b2f3 97
el13ytg 0:0dc99d71b2f3 98 fprintf(results, "x = ["); //print X array
el13ytg 0:0dc99d71b2f3 99
el13ytg 1:e41af8c958b8 100 for (int i = 0; i < 1999; i++) {
el13ytg 1:e41af8c958b8 101 fprintf(results, "%.3f,", X[i]);
el13ytg 0:0dc99d71b2f3 102 }
el13ytg 0:0dc99d71b2f3 103
el13ytg 1:e41af8c958b8 104 fprintf(results, "%.3f]\n\r", X[1999]);
el13ytg 0:0dc99d71b2f3 105
el13ytg 0:0dc99d71b2f3 106 fprintf(results, "y = ["); //print Y array
el13ytg 0:0dc99d71b2f3 107
el13ytg 1:e41af8c958b8 108 for (int i = 0; i < 1999; i++) {
el13ytg 1:e41af8c958b8 109 fprintf(results, "%.3f,", Y[i]);
el13ytg 0:0dc99d71b2f3 110 }
el13ytg 0:0dc99d71b2f3 111
el13ytg 1:e41af8c958b8 112 fprintf(results, "%.3f]\n\r", Y[1999]);
el13ytg 0:0dc99d71b2f3 113
el13ytg 0:0dc99d71b2f3 114 fprintf(results, "z = ["); //print Z array
el13ytg 0:0dc99d71b2f3 115
el13ytg 1:e41af8c958b8 116 for (int i = 0; i < 1999; i++) {
el13ytg 1:e41af8c958b8 117 fprintf(results, "%.3f,", Z[i]);
el13ytg 0:0dc99d71b2f3 118 }
el13ytg 0:0dc99d71b2f3 119
el13ytg 1:e41af8c958b8 120 fprintf(results, "%.3f]\n\r", Z[1999]);
el13ytg 0:0dc99d71b2f3 121
el13ytg 0:0dc99d71b2f3 122 fclose(results); // close file
el13ytg 0:0dc99d71b2f3 123 leds = 0; // turn off LEDs to signify file access has finished
el13ytg 0:0dc99d71b2f3 124 }