David's dead reckoning code for the LVBots competition on March 6th. Uses the mbed LPC1768, DRV8835, QTR-3RC, and two DC motors with encoders.
Dependencies: PololuEncoder Pacer mbed GeneralDebouncer
line_sensors.cpp
- Committer:
- DavidEGrayson
- Date:
- 2014-03-06
- Revision:
- 37:23000a47ed2b
- Parent:
- 32:83a13b06093c
- Child:
- 40:6fa672be85ec
File content as of revision 37:23000a47ed2b:
#include "line_sensors.h" /** AnalogIn lineSensorsAnalog[LINE_SENSOR_COUNT] = { AnalogIn(p20), // brown wire, left-most sensor AnalogIn(p19), // orange wire, middle sensor AnalogIn(p17), // blue wire, right-most sensor }; // TODO: remove **/ 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); Timer timer; timer.start(); for(uint8_t i = 0; i < LINE_SENSOR_COUNT; i++) { lineSensorsDigital[i].input(); } 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]; } **/