02/07/15

Dependencies:   mbed

Dependents:   TabbedGUIMbed

Committer:
aidanPJG
Date:
Tue Jul 28 14:40:26 2015 +0000
Revision:
56:bf08d9e50ccc
Parent:
53:10f4f519ba69
Child:
57:f94834892570
Quite messy but time working more accurately

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aidanPJG 22:34bc2f2f5b09 1 #include "mbed.h"
aidanPJG 22:34bc2f2f5b09 2 #include <time.h>
aidanPJG 22:34bc2f2f5b09 3 #include <string>
aidanPJG 22:34bc2f2f5b09 4 #include <iostream>
aidanPJG 39:3527578e78dd 5 #include "Distance.h"
aidanPJG 31:bea1117f14fb 6
aidanPJG 53:10f4f519ba69 7 void printArray(double array[20], int timesArray[20], int NoOfPins);
aidanPJG 51:210353276e06 8 void data(int sensor_number, int time, double speed);
aidanPJG 38:da262dc4f90a 9
aidanPJG 19:a3edf2c547e1 10 //mbed pins
aidanPJG 26:4289549b2d21 11 extern Serial pc; //defines the communication between MBed and pc
aidanPJG 53:10f4f519ba69 12 //int NoOfPins = 3; //for how many sensors there are
aidanPJG 52:d21fc7266b66 13 DigitalIn sensor[20] = {p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24} ; //array of sensors.
aidanPJG 31:bea1117f14fb 14
aidanPJG 31:bea1117f14fb 15
aidanPJG 19:a3edf2c547e1 16 //c++ variables
aidanPJG 26:4289549b2d21 17 time_t sensor_time ; //time at which sensor is broken
aidanPJG 56:bf08d9e50ccc 18 Timer t;
aidanPJG 56:bf08d9e50ccc 19 double timeDiff; //time between 2 sensors - not used right now
aidanPJG 44:3b45ec49bc44 20 float speed;
aidanPJG 52:d21fc7266b66 21 int times[20]; //array the size of #pins
aidanPJG 52:d21fc7266b66 22 double speeds[20]; //array of speeds
aidanPJG 52:d21fc7266b66 23
aidanPJG 52:d21fc7266b66 24
aidanPJG 52:d21fc7266b66 25
aidanPJG 53:10f4f519ba69 26 int calculate(double distance, int NoOfPins)
aidanPJG 22:34bc2f2f5b09 27 {
aidanPJG 53:10f4f519ba69 28
aidanPJG 22:34bc2f2f5b09 29 pc.printf("new program \n"); //alert user of initialisation
aidanPJG 38:da262dc4f90a 30
aidanPJG 30:ab3a436e8968 31 int i = 0;
aidanPJG 52:d21fc7266b66 32 while( i < NoOfPins)
aidanPJG 25:bab86a12e9ad 33 {
aidanPJG 30:ab3a436e8968 34 while(!sensor[i])
aidanPJG 22:34bc2f2f5b09 35 {
aidanPJG 56:bf08d9e50ccc 36 if(sensor[i + 1])
aidanPJG 56:bf08d9e50ccc 37 {
aidanPJG 56:bf08d9e50ccc 38 printf("it skipped a sensor");
aidanPJG 30:ab3a436e8968 39 sensor_time = time(NULL);
aidanPJG 30:ab3a436e8968 40 i++;
aidanPJG 56:bf08d9e50ccc 41
aidanPJG 30:ab3a436e8968 42 } //error checking incase next one is done
aidanPJG 22:34bc2f2f5b09 43 }
aidanPJG 56:bf08d9e50ccc 44 // sensor_time = time(NULL); //gets current time
aidanPJG 56:bf08d9e50ccc 45 t.start();
aidanPJG 56:bf08d9e50ccc 46 // pc.printf("\n sensor %d : %d \t", i,sensor_time);
aidanPJG 56:bf08d9e50ccc 47 // times[i] = sensor_time; //adds sensor times to array for logging.
aidanPJG 56:bf08d9e50ccc 48 timeDiff = t.read();
aidanPJG 56:bf08d9e50ccc 49 t.reset();
aidanPJG 56:bf08d9e50ccc 50 pc.printf(" timediff: %lf s \t", timeDiff);
aidanPJG 56:bf08d9e50ccc 51 if ( i > 0)
aidanPJG 56:bf08d9e50ccc 52 { //to ensure it is not the first one
aidanPJG 56:bf08d9e50ccc 53 // timeDiff = difftime(times[i], times[i-1]); //calculates the time difference
aidanPJG 56:bf08d9e50ccc 54 //t.stop();
aidanPJG 56:bf08d9e50ccc 55 speed = distance / timeDiff;
aidanPJG 56:bf08d9e50ccc 56 pc.printf(" speed : %f m/s ", speed);
aidanPJG 56:bf08d9e50ccc 57 speeds[i] = speed;
aidanPJG 32:792c4239a738 58 }
aidanPJG 30:ab3a436e8968 59 i++;
aidanPJG 30:ab3a436e8968 60 }
aidanPJG 32:792c4239a738 61 pc.printf(" \n Calculate completed \n"); //alert to let user know it completed
aidanPJG 56:bf08d9e50ccc 62 // printArray(speeds, times, NoOfPins);
aidanPJG 38:da262dc4f90a 63
aidanPJG 22:34bc2f2f5b09 64 }
aidanPJG 30:ab3a436e8968 65
aidanPJG 53:10f4f519ba69 66 void printArray(double array[20], int timesArray[20], int NoOfPins)
aidanPJG 38:da262dc4f90a 67 {
aidanPJG 52:d21fc7266b66 68 for (int i = 0; i < NoOfPins ; i++) //printing module for array
aidanPJG 38:da262dc4f90a 69 {
aidanPJG 50:d794595c6868 70 pc.printf(" Sensor : %d Time %d Speed %f \n", i,times[i],speeds[i]);
aidanPJG 50:d794595c6868 71 // pc.printf(" %d : %d \t", i,times[i]);
aidanPJG 38:da262dc4f90a 72 }
aidanPJG 52:d21fc7266b66 73 for (int i = 0; i < NoOfPins ; i++) //printing to Datalog
aidanPJG 44:3b45ec49bc44 74 {
aidanPJG 51:210353276e06 75 data( i,times[i],speeds[i]);
aidanPJG 44:3b45ec49bc44 76 }
aidanPJG 38:da262dc4f90a 77
aidanPJG 38:da262dc4f90a 78 }