Library that can read an array of 8x3 reflectance sensors.
Dependencies: DigitalInOut2
Dependents: line_sensors_to_serial_24 R5
Fork of LineSensors by
LineSensors.cpp@0:acd430185ac0, 2014-10-14 (annotated)
- Committer:
- jmar11
- Date:
- Tue Oct 14 18:03:59 2014 +0000
- Revision:
- 0:acd430185ac0
- Child:
- 1:a45634860f11
First commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmar11 | 0:acd430185ac0 | 1 | #include "mbed.h" |
jmar11 | 0:acd430185ac0 | 2 | #include "LineSensors.h" |
jmar11 | 0:acd430185ac0 | 3 | #include "DigitalInOut2.h" |
jmar11 | 0:acd430185ac0 | 4 | |
jmar11 | 0:acd430185ac0 | 5 | LineSensors::LineSensors(PinName IO1, PinName IO2, PinName IO3, PinName IO4, PinName IO5, PinName IO6, PinName IO7, PinName IO8, |
jmar11 | 0:acd430185ac0 | 6 | PinName IO9, PinName IO10, PinName IO11, PinName IO12, PinName IO13, PinName IO14, PinName IO15, PinName IO16, |
jmar11 | 0:acd430185ac0 | 7 | PinName IO17, PinName IO18, PinName IO19, PinName IO20, PinName IO21, PinName IO22, PinName IO23, PinName IO24){ |
jmar11 | 0:acd430185ac0 | 8 | sensors[0][0] = IO1;sensors[1][0] = IO2;sensors[2][0] = IO3;sensors[3][0] = IO4; |
jmar11 | 0:acd430185ac0 | 9 | sensors[4][0] = IO5;sensors[5][0] = IO6;sensors[6][0] = IO7;sensors[7][0] = IO8; |
jmar11 | 0:acd430185ac0 | 10 | sensors[0][1] = IO9;sensors[1][1] = IO10;sensors[2][1] = IO11;sensors[3][1] = IO12; |
jmar11 | 0:acd430185ac0 | 11 | sensors[4][1] = IO13;sensors[5][1] = IO14;sensors[6][1] = IO15;sensors[7][1] = IO16; |
jmar11 | 0:acd430185ac0 | 12 | sensors[0][2] = IO17;sensors[1][2] = IO18;sensors[2][2] = IO19;sensors[3][2] = IO20; |
jmar11 | 0:acd430185ac0 | 13 | sensors[4][2] = IO21;sensors[5][2] = IO22;sensors[6][2] = IO23;sensors[7][2] = IO24; |
jmar11 | 0:acd430185ac0 | 14 | |
jmar11 | 0:acd430185ac0 | 15 | timeOut = 500000; |
jmar11 | 0:acd430185ac0 | 16 | } |
jmar11 | 0:acd430185ac0 | 17 | |
jmar11 | 0:acd430185ac0 | 18 | void LineSensors::setThreshold(){ |
jmar11 | 0:acd430185ac0 | 19 | read(); |
jmar11 | 0:acd430185ac0 | 20 | for(int j = 0; j < 3; j++){ |
jmar11 | 0:acd430185ac0 | 21 | for(int i = 0; i < 8; i++){ |
jmar11 | 0:acd430185ac0 | 22 | thresh[i][j] = sensors[i][j]; |
jmar11 | 0:acd430185ac0 | 23 | thresh[i][j] *= 7; |
jmar11 | 0:acd430185ac0 | 24 | } |
jmar11 | 0:acd430185ac0 | 25 | } |
jmar11 | 0:acd430185ac0 | 26 | } |
jmar11 | 0:acd430185ac0 | 27 | |
jmar11 | 0:acd430185ac0 | 28 | void LineSensors::read(){ |
jmar11 | 0:acd430185ac0 | 29 | DigitalInOut2 sensor(sensors[0][0]); //attribute the first pin in the sensors array to sensor (the DigitalInOut2 object) |
jmar11 | 0:acd430185ac0 | 30 | |
jmar11 | 0:acd430185ac0 | 31 | for(int j = 0; j < 3; j++){ |
jmar11 | 0:acd430185ac0 | 32 | for(int i = 0; i < 8; i++){ |
jmar11 | 0:acd430185ac0 | 33 | sensor.gpio.mask = gpio_set(sensors[i][j]); //change the pin that is attributed to sensor (the DigitalInOut2 object) |
jmar11 | 0:acd430185ac0 | 34 | sensor.output(); |
jmar11 | 0:acd430185ac0 | 35 | sensor = 1; |
jmar11 | 0:acd430185ac0 | 36 | wait_us(15); |
jmar11 | 0:acd430185ac0 | 37 | sensor = 0; |
jmar11 | 0:acd430185ac0 | 38 | sensor.input(); |
jmar11 | 0:acd430185ac0 | 39 | timer.start(); |
jmar11 | 0:acd430185ac0 | 40 | while(sensor == 1 && timer.read_us() < timeOut){ |
jmar11 | 0:acd430185ac0 | 41 | } |
jmar11 | 0:acd430185ac0 | 42 | timer.stop(); |
jmar11 | 0:acd430185ac0 | 43 | sensVal[i][j] = timer.read_us(); |
jmar11 | 0:acd430185ac0 | 44 | timer.reset(); |
jmar11 | 0:acd430185ac0 | 45 | } |
jmar11 | 0:acd430185ac0 | 46 | } |
jmar11 | 0:acd430185ac0 | 47 | } |
jmar11 | 0:acd430185ac0 | 48 | |
jmar11 | 0:acd430185ac0 | 49 | void LineSensors::lineDetect(bool out[8][3]){ |
jmar11 | 0:acd430185ac0 | 50 | for(int j = 0; j < 3; j++){ |
jmar11 | 0:acd430185ac0 | 51 | for(int i = 0; i < 8; i++){ |
jmar11 | 0:acd430185ac0 | 52 | if(sensors[i][j] > thresh[i][j]) |
jmar11 | 0:acd430185ac0 | 53 | out[i][j] = true; |
jmar11 | 0:acd430185ac0 | 54 | else |
jmar11 | 0:acd430185ac0 | 55 | out[i][j] = false; |
jmar11 | 0:acd430185ac0 | 56 | } |
jmar11 | 0:acd430185ac0 | 57 | } |
jmar11 | 0:acd430185ac0 | 58 | } |