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-15
- Revision:
- 52:05a8e919ddb0
- Parent:
- 40:e79cefc241f8
File content as of revision 52:05a8e919ddb0:
#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]; } **/