11/16

Dependencies:   mbed

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?

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 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 }