Library that can read an array of 8x3 reflectance sensors.

Dependencies:   DigitalInOut2

Dependents:   line_sensors_to_serial_24 R5

Fork of LineSensors by Jaime Martinez

Committer:
Hypna
Date:
Fri Oct 17 17:52:48 2014 +0000
Revision:
2:885db45ce36a
Parent:
1:a45634860f11
ready to test

Who changed what in which revision?

UserRevisionLine numberNew 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 }