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@1:a45634860f11, 2014-10-15 (annotated)
- Committer:
- jmar11
- Date:
- Wed Oct 15 20:34:47 2014 +0000
- Revision:
- 1:a45634860f11
- Parent:
- 0:acd430185ac0
First working 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 | 1:a45634860f11 | 15 | timeOut = 100000; |
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 | 1:a45634860f11 | 22 | thresh[i][j] = sensVal[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 | 1:a45634860f11 | 32 | for(int i = 0; i < 8; i ++){ |
jmar11 | 1:a45634860f11 | 33 | gpio_init_inout(&sensor.gpio, sensors[i][j], PIN_OUTPUT, PullNone, 1); //change the pin that is attributed to sensor (the DigitalInOut2 object) |
jmar11 | 0:acd430185ac0 | 34 | wait_us(15); |
jmar11 | 0:acd430185ac0 | 35 | sensor = 0; |
jmar11 | 0:acd430185ac0 | 36 | sensor.input(); |
jmar11 | 0:acd430185ac0 | 37 | timer.start(); |
jmar11 | 0:acd430185ac0 | 38 | while(sensor == 1 && timer.read_us() < timeOut){ |
jmar11 | 0:acd430185ac0 | 39 | } |
jmar11 | 0:acd430185ac0 | 40 | timer.stop(); |
jmar11 | 0:acd430185ac0 | 41 | sensVal[i][j] = timer.read_us(); |
jmar11 | 0:acd430185ac0 | 42 | timer.reset(); |
jmar11 | 0:acd430185ac0 | 43 | } |
jmar11 | 0:acd430185ac0 | 44 | } |
jmar11 | 0:acd430185ac0 | 45 | } |
jmar11 | 0:acd430185ac0 | 46 | |
jmar11 | 0:acd430185ac0 | 47 | void LineSensors::lineDetect(bool out[8][3]){ |
jmar11 | 1:a45634860f11 | 48 | read(); |
jmar11 | 0:acd430185ac0 | 49 | for(int j = 0; j < 3; j++){ |
jmar11 | 0:acd430185ac0 | 50 | for(int i = 0; i < 8; i++){ |
jmar11 | 1:a45634860f11 | 51 | if(sensVal[i][j] > thresh[i][j]) |
jmar11 | 1:a45634860f11 | 52 | out[i][j] = 1; |
jmar11 | 0:acd430185ac0 | 53 | else |
jmar11 | 1:a45634860f11 | 54 | out[i][j] = 0; |
jmar11 | 0:acd430185ac0 | 55 | } |
jmar11 | 0:acd430185ac0 | 56 | } |
jmar11 | 0:acd430185ac0 | 57 | } |