Lol smth

Dependencies:   LocalPositionSystem MMA8451Q Motor_Driver Sensors mbed

Fork of TDP_main_BartFork by Yelfie

Committer:
Bartas
Date:
Mon Mar 23 12:32:32 2015 +0000
Revision:
26:cbbfe012a757
Parent:
23:902c3086394e
asd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reckstyle 0:5ca0450111f3 1 /*
Reckstyle 0:5ca0450111f3 2 Sensor measurement header file.
Reckstyle 0:5ca0450111f3 3 Contains the pin declarations and variables for all sensors-related work
Reckstyle 0:5ca0450111f3 4
Reckstyle 11:9e56d52485d1 5 TESTED AND FUNCTIONAL!(24/02)
Reckstyle 11:9e56d52485d1 6 TESTED (/27/02)
Reckstyle 9:718987b106a8 7 NEEDS POPULATION FOR ALL THE SENSORS!
Reckstyle 11:9e56d52485d1 8
Reckstyle 11:9e56d52485d1 9 Need testing on implementation of the array of pointers
Reckstyle 11:9e56d52485d1 10 Need implementation of third value for gray and a way to distinguish between it - will big structures affect speed?
Reckstyle 11:9e56d52485d1 11 Need to revise struct sensors - are all values reallly needed???
Reckstyle 11:9e56d52485d1 12 LAST REVISED 27/02
Reckstyle 0:5ca0450111f3 13 */
Reckstyle 0:5ca0450111f3 14
Reckstyle 0:5ca0450111f3 15 #ifndef _SENSOR_MEASURE_H
Reckstyle 0:5ca0450111f3 16 #define _SENSOR_MEASURE_H
Reckstyle 0:5ca0450111f3 17
Reckstyle 11:9e56d52485d1 18 #define NUMBER_SAMPLES 20 // NUMBER OF SAMPLES FOR SENSOR TESTING
Reckstyle 23:902c3086394e 19 #define NUMBER_SENSORS_REGULAR 8 // number for the array of sensors
Reckstyle 11:9e56d52485d1 20 #define NUMBER_SENSORS_SQUARE 0
Reckstyle 0:5ca0450111f3 21
Reckstyle 0:5ca0450111f3 22 //define pinout for all the sensors
Bartas 26:cbbfe012a757 23 DigitalIn pin_right_right_up(PTC2);
Bartas 26:cbbfe012a757 24 DigitalIn pin_right_left_up(PTE30);
Bartas 26:cbbfe012a757 25 DigitalIn pin_right_right_down(PTE29);
Bartas 26:cbbfe012a757 26 DigitalIn pin_right_left_down(PTC1);
Bartas 26:cbbfe012a757 27 DigitalIn pin_left_right_down(PTB3);
Bartas 26:cbbfe012a757 28 DigitalIn pin_left_left_down(PTE22);
Bartas 26:cbbfe012a757 29 DigitalIn pin_left_right_up(PTE23);
Bartas 26:cbbfe012a757 30 DigitalIn pin_left_left_up(PTB2);
Reckstyle 15:6453cd351452 31
Reckstyle 0:5ca0450111f3 32
Reckstyle 0:5ca0450111f3 33 //timer used by the sensor
Reckstyle 0:5ca0450111f3 34 Timer sensorTimer;
Reckstyle 0:5ca0450111f3 35
Reckstyle 9:718987b106a8 36
Reckstyle 11:9e56d52485d1 37 Serial pc(USBTX, USBRX); //used for connection to PC/debugging
Reckstyle 9:718987b106a8 38
Reckstyle 0:5ca0450111f3 39 //structure for sensors
Reckstyle 0:5ca0450111f3 40 typedef struct sensor_data {
Reckstyle 9:718987b106a8 41 DigitalIn* pin;
Reckstyle 11:9e56d52485d1 42 int blackValue;
Reckstyle 11:9e56d52485d1 43 int whiteValue; //maybe it can be removed ???
Reckstyle 11:9e56d52485d1 44 int grayValue; // if sensor is used for squares will have a gray value;
Reckstyle 11:9e56d52485d1 45 int state; //can be removed as well?
Reckstyle 0:5ca0450111f3 46 }sensor_data;
Reckstyle 0:5ca0450111f3 47
Reckstyle 9:718987b106a8 48
Reckstyle 15:6453cd351452 49 sensor_data right_right_up;
Reckstyle 15:6453cd351452 50 sensor_data right_left_up;
Reckstyle 15:6453cd351452 51 sensor_data right_right_down;
Reckstyle 15:6453cd351452 52 sensor_data right_left_down;
Reckstyle 15:6453cd351452 53 sensor_data left_right_down;
Reckstyle 15:6453cd351452 54 sensor_data left_left_down;
Reckstyle 15:6453cd351452 55 sensor_data left_right_up;
Reckstyle 15:6453cd351452 56 sensor_data left_left_up;
Reckstyle 1:eace997e9a93 57 // and so on....
Reckstyle 0:5ca0450111f3 58
orsharp 12:bb21b76b6375 59 sensor_data *sensorArray [NUMBER_SENSORS_REGULAR]; //array just used for getting value out of the sensors, helps for iteration(see main program)
Reckstyle 11:9e56d52485d1 60
Reckstyle 1:eace997e9a93 61 //Initialise values of all sensors
Reckstyle 1:eace997e9a93 62 void sensor_initialise () {
Reckstyle 11:9e56d52485d1 63 int arrayBuilder = 0; //integer solely used for populating the array
Reckstyle 1:eace997e9a93 64 //right_right
Reckstyle 15:6453cd351452 65 right_right_up.pin = &pin_right_right_up;
Reckstyle 17:de8b3111ddc5 66 right_right_up.blackValue = 10000;
Reckstyle 17:de8b3111ddc5 67 right_right_up.whiteValue = 48000;
Reckstyle 15:6453cd351452 68 right_right_up.grayValue = 0; // 0 for all the non-square sensors
Reckstyle 15:6453cd351452 69 right_right_up.state = 0; //setting all sensors as black at begging
Reckstyle 15:6453cd351452 70 sensorArray [arrayBuilder++] = &right_right_up; //Array goes from rightmost to left, then centre?
Reckstyle 15:6453cd351452 71 right_left_up.pin = &pin_right_left_up;
Reckstyle 17:de8b3111ddc5 72 right_left_up.blackValue = 30000;
Reckstyle 17:de8b3111ddc5 73 right_left_up.whiteValue = 115000;
Reckstyle 15:6453cd351452 74 right_left_up.grayValue = 0;
Reckstyle 17:de8b3111ddc5 75 right_left_up.state = 1;
Reckstyle 15:6453cd351452 76 sensorArray [arrayBuilder++] = &right_left_up;
Reckstyle 16:3649eb1a056d 77 right_right_down.pin = &pin_right_right_down;
Reckstyle 17:de8b3111ddc5 78 right_right_down.blackValue = 7000;
Reckstyle 17:de8b3111ddc5 79 right_right_down.whiteValue = 20000;
Reckstyle 17:de8b3111ddc5 80 right_right_down.grayValue = 0;
Reckstyle 17:de8b3111ddc5 81 right_right_down.state = 0;
Reckstyle 16:3649eb1a056d 82 sensorArray [arrayBuilder++] = &right_right_down;
Reckstyle 16:3649eb1a056d 83 right_left_down.pin = &pin_right_left_down;
Reckstyle 17:de8b3111ddc5 84 right_left_down.blackValue = 8000;
Reckstyle 17:de8b3111ddc5 85 right_left_down.whiteValue = 25000;
Reckstyle 17:de8b3111ddc5 86 right_left_down.grayValue = 0;
Reckstyle 17:de8b3111ddc5 87 right_left_down.state = 1;
Reckstyle 16:3649eb1a056d 88 sensorArray[arrayBuilder++] = &right_left_down;
Reckstyle 17:de8b3111ddc5 89 left_right_down.pin = &pin_left_right_down;
Reckstyle 17:de8b3111ddc5 90 left_right_down.blackValue = 2500;
Reckstyle 17:de8b3111ddc5 91 left_right_down.whiteValue = 21000;
Reckstyle 17:de8b3111ddc5 92 left_right_down.grayValue = 0;
Reckstyle 17:de8b3111ddc5 93 left_right_down.state = 1;
Reckstyle 17:de8b3111ddc5 94 sensorArray [arrayBuilder++] = &left_right_down;
Reckstyle 17:de8b3111ddc5 95 left_left_down.pin = &pin_left_left_down;
Reckstyle 17:de8b3111ddc5 96 left_left_down.blackValue = 6500;
Reckstyle 17:de8b3111ddc5 97 left_left_down.whiteValue = 21000;
Reckstyle 17:de8b3111ddc5 98 left_left_down.grayValue = 0;
Reckstyle 17:de8b3111ddc5 99 left_left_down.state = 0;
Reckstyle 17:de8b3111ddc5 100 sensorArray [arrayBuilder++] = &left_left_down;
Reckstyle 17:de8b3111ddc5 101 left_right_up.pin = &pin_left_right_up;
Reckstyle 19:d277614084bc 102 left_right_up.blackValue = 20000; //??? it's a trick ;)
Reckstyle 17:de8b3111ddc5 103 left_right_up.whiteValue = 79000;
Reckstyle 17:de8b3111ddc5 104 left_right_up.grayValue = 0;
Reckstyle 17:de8b3111ddc5 105 left_right_up.state = 1;
Reckstyle 17:de8b3111ddc5 106 sensorArray [arrayBuilder++] = &left_right_up;
Reckstyle 17:de8b3111ddc5 107 left_left_up.pin = &pin_left_left_up;
Reckstyle 17:de8b3111ddc5 108 left_left_up.blackValue = 27000;
Reckstyle 17:de8b3111ddc5 109 left_left_up.whiteValue = 120000;
Reckstyle 17:de8b3111ddc5 110 left_left_up.grayValue = 0;
Reckstyle 17:de8b3111ddc5 111 left_left_up.state = 0;
Reckstyle 17:de8b3111ddc5 112 sensorArray [arrayBuilder++] = &left_left_up;
Reckstyle 1:eace997e9a93 113 }
Reckstyle 1:eace997e9a93 114
Reckstyle 16:3649eb1a056d 115 int counter1 = 0;
Reckstyle 0:5ca0450111f3 116 //measuring function - returning whether it is black or white line
Reckstyle 11:9e56d52485d1 117 //"0" - black, "1" - white
Reckstyle 16:3649eb1a056d 118 int measure (sensor_data *sensor){
Reckstyle 1:eace997e9a93 119
Reckstyle 9:718987b106a8 120 sensorTimer.reset(); //reset the timer
Reckstyle 9:718987b106a8 121 double freq,period = 0.0;
Reckstyle 0:5ca0450111f3 122 int n =0; //number of samples
Reckstyle 9:718987b106a8 123 int sensor_old = 0; //variable to remember old sensor state
Reckstyle 9:718987b106a8 124 int sensor_new = 0;
Reckstyle 9:718987b106a8 125 //double time_1 = sensorTimer.read(); used for debugging
Reckstyle 0:5ca0450111f3 126 while (n < NUMBER_SAMPLES){
Reckstyle 16:3649eb1a056d 127 sensor_new = sensor->pin->read();
Reckstyle 9:718987b106a8 128 if ( sensor_new== 1 && sensor_old == 0){ // detect on rising edge
Reckstyle 0:5ca0450111f3 129 n++;
Reckstyle 0:5ca0450111f3 130 }
Reckstyle 9:718987b106a8 131 sensor_old = sensor_new;
Reckstyle 0:5ca0450111f3 132 }
Reckstyle 9:718987b106a8 133 double time_2 = sensorTimer.read();
Reckstyle 9:718987b106a8 134 // pc.printf(" delta time is %f , time 2 is %f " , (time_2 - time_1), time_2); //Used for debugging
Reckstyle 9:718987b106a8 135
Reckstyle 9:718987b106a8 136 period = time_2/((double)NUMBER_SAMPLES); // Get time
Reckstyle 9:718987b106a8 137 freq = (1/period); // Convert period (in us) to frequency (Hz).
Reckstyle 16:3649eb1a056d 138 //pc.printf(" period is %f and freq is %f ", period,freq); // Used for debugging
Reckstyle 16:3649eb1a056d 139
Reckstyle 21:e8da3b351cd0 140 sensor->state = freq;
Reckstyle 21:e8da3b351cd0 141 return 0;
Reckstyle 0:5ca0450111f3 142
Reckstyle 16:3649eb1a056d 143 // if (sensor->grayValue != 0 && freq < (sensor->grayValue + 1000) && freq > (sensor.grayValue - 1000)) { //definitely not sure about that!
Reckstyle 16:3649eb1a056d 144 // //this is a gray value sensor in its gray region
Reckstyle 16:3649eb1a056d 145 // sensor->state = 2;
Reckstyle 16:3649eb1a056d 146 // return 2;
Reckstyle 16:3649eb1a056d 147 // }
Reckstyle 21:e8da3b351cd0 148 // if (freq < (2*sensor->blackValue)){
Reckstyle 21:e8da3b351cd0 149 // sensor->state = 0; //if it's less than black value it is black
Reckstyle 21:e8da3b351cd0 150 // return 0;
Reckstyle 21:e8da3b351cd0 151 // }
Reckstyle 21:e8da3b351cd0 152 // else {
Reckstyle 21:e8da3b351cd0 153 // sensor->state = 1;
Reckstyle 21:e8da3b351cd0 154 // }
Reckstyle 21:e8da3b351cd0 155 // return 1;
Reckstyle 16:3649eb1a056d 156 //(freq < sensor->black_value*2)? 1 : 0; //freq
Reckstyle 0:5ca0450111f3 157 }
Reckstyle 0:5ca0450111f3 158 #endif