David's line following code from the LVBots competition, 2015.
Dependencies: GeneralDebouncer Pacer PololuEncoder mbed
Fork of DeadReckoning by
line_sensors.cpp
- Committer:
- DavidEGrayson
- Date:
- 2015-04-16
- Revision:
- 57:99bec7fab454
- Parent:
- 40:e79cefc241f8
File content as of revision 57:99bec7fab454:
#include "line_sensors.h"
DigitalInOut lineSensorsDigital[LINE_SENSOR_COUNT] = {
DigitalInOut(p18), // white wire, left-most sensor
DigitalInOut(p19), // orange wire, middle sensor
DigitalInOut(p20), // brown wire, right-most sensor
};
void readSensors(uint16_t * values)
{
for(uint8_t i = 0; i < LINE_SENSOR_COUNT; i++)
{
values[i] = 1000;
lineSensorsDigital[i].mode(PullNone);
lineSensorsDigital[i].output();
lineSensorsDigital[i].write(1);
}
wait_us(10);
for(uint8_t i = 0; i < LINE_SENSOR_COUNT; i++)
{
lineSensorsDigital[i].input();
}
Timer timer;
timer.start();
while(timer.read_us() < 1000)
{
for(uint8_t i = 0; i < LINE_SENSOR_COUNT; i++)
{
if (values[i] == 1000 && lineSensorsDigital[i].read() == 0)
{
values[i] = timer.read_us();
}
}
}
}
/**
uint16_t analogReadWithFilter(AnalogIn * input)
{
uint16_t readings[3];
for(uint8_t i = 0; i < 3; i++)
{
readings[i] = input->read_u16();
}
if (readings[0] <= readings[1] && readings[0] >= readings[2])
{
return readings[0];
}
if (readings[1] <= readings[0] && readings[1] >= readings[2])
{
return readings[1];
}
return readings[2];
}
**/
David Grayson
