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-13
Revision:
38:5e93a479c244
Parent:
32:83a13b06093c
Child:
40:6fa672be85ec

File content as of revision 38:5e93a479c244:

#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];
}
**/