11/16

Dependencies:   mbed

Committer:
el13ytg
Date:
Sun Nov 22 00:10:04 2015 +0000
Revision:
3:08f020c3d2b7
Parent:
1:e41af8c958b8
v3.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
el13ytg 0:0dc99d71b2f3 15 //Global Variables
el13ytg 3:08f020c3d2b7 16 float X, Y, Z; //variables to store XYZ readings
el13ytg 1:e41af8c958b8 17 float Xo, Yo, Zo; //variables to store 0G bias readings
el13ytg 0:0dc99d71b2f3 18 int flag; //flag for ISR
el13ytg 3:08f020c3d2b7 19 float CalX[1000], CalY[1000], CalZ[1000]; //arrays to store calibration readings
el13ytg 3:08f020c3d2b7 20 int n = 0; //variable to store the number of readings
el13ytg 0:0dc99d71b2f3 21
el13ytg 0:0dc99d71b2f3 22 //Function Prototypes
el13ytg 0:0dc99d71b2f3 23 void Calibrate();
el13ytg 3:08f020c3d2b7 24 void Send_Data();
el13ytg 0:0dc99d71b2f3 25 void ISR();
el13ytg 3:08f020c3d2b7 26
el13ytg 0:0dc99d71b2f3 27
el13ytg 0:0dc99d71b2f3 28 //Main Function
el13ytg 0:0dc99d71b2f3 29 int main() {
el13ytg 0:0dc99d71b2f3 30
el13ytg 3:08f020c3d2b7 31 wait(2.0); //allow accelerometer to stabilise
el13ytg 3:08f020c3d2b7 32 timer.attach(&Calibrate, 0.001); //attach Calibrate function to timer
el13ytg 3:08f020c3d2b7 33
el13ytg 3:08f020c3d2b7 34 while (1) {
el13ytg 0:0dc99d71b2f3 35 if (flag) { //if flag has been set
el13ytg 0:0dc99d71b2f3 36 flag = 0; //reset flag
el13ytg 0:0dc99d71b2f3 37 Send_Data();
el13ytg 0:0dc99d71b2f3 38 }
el13ytg 0:0dc99d71b2f3 39 }
el13ytg 0:0dc99d71b2f3 40 }
el13ytg 0:0dc99d71b2f3 41
el13ytg 0:0dc99d71b2f3 42 //Function Definitions
el13ytg 3:08f020c3d2b7 43 void Calibrate() {
el13ytg 3:08f020c3d2b7 44 CalX[n] = XIn.read() * 3.3; //read XYZ pins and store in array
el13ytg 3:08f020c3d2b7 45 CalY[n] = YIn.read() * 3.3;
el13ytg 3:08f020c3d2b7 46 CalZ[n] = ZIn.read() * 3.3;
el13ytg 3:08f020c3d2b7 47 n++; //increment counter
el13ytg 1:e41af8c958b8 48
el13ytg 3:08f020c3d2b7 49 if (n == 1000) { //when enough samples have been taken
el13ytg 3:08f020c3d2b7 50 timer.detach(); //detach timer from Calibrate()
el13ytg 1:e41af8c958b8 51
el13ytg 3:08f020c3d2b7 52 for (int i = 0; i < 1000; i++) { //sum sample readings
el13ytg 3:08f020c3d2b7 53 Xo = Xo + CalX[i];
el13ytg 3:08f020c3d2b7 54 Yo = Yo + CalY[i];
el13ytg 3:08f020c3d2b7 55 Zo = Zo + CalZ[i];
el13ytg 3:08f020c3d2b7 56 }
el13ytg 3:08f020c3d2b7 57
el13ytg 3:08f020c3d2b7 58 Xo = Xo / 1000; //find mean and store it
el13ytg 3:08f020c3d2b7 59 Yo = Yo / 1000;
el13ytg 3:08f020c3d2b7 60 Zo = Zo / 1000;
el13ytg 1:e41af8c958b8 61
el13ytg 3:08f020c3d2b7 62 pc.printf("Calibration Values = %.3f | %.3f | %.3f\n\r", Xo, Yo, Zo); //debug
el13ytg 3:08f020c3d2b7 63 timer.attach(&ISR, 0.001); //attach timer to ISR for real data collection
el13ytg 3:08f020c3d2b7 64 }
el13ytg 0:0dc99d71b2f3 65 }
el13ytg 0:0dc99d71b2f3 66
el13ytg 0:0dc99d71b2f3 67 void Send_Data() {
el13ytg 3:08f020c3d2b7 68 X = ((XIn.read() * 3.3) - Xo) / 0.3; //read input, subtract zeroed value to find offset, and convert to g (300mv/g)
el13ytg 3:08f020c3d2b7 69 Y = ((YIn.read() * 3.3) - Yo) / 0.3;
el13ytg 3:08f020c3d2b7 70 Z = ((ZIn.read() * 3.3) - Zo) / 0.3;
el13ytg 3:08f020c3d2b7 71 pc.printf("%.3f %.3f %.3f",X, Y, Z); //print output to serial
el13ytg 0:0dc99d71b2f3 72 }
el13ytg 0:0dc99d71b2f3 73
el13ytg 3:08f020c3d2b7 74 void ISR() {
el13ytg 3:08f020c3d2b7 75 flag = 1; //set flag
el13ytg 0:0dc99d71b2f3 76 }