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

Committer:
DavidEGrayson
Date:
Sat Jul 27 22:52:19 2019 +0000
Revision:
43:0e985a58f174
Parent:
40:6fa672be85ec
Changed reckoner to use readings from turnSensor (Gyro) to get its direction vector instead of encoder ticks.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DavidEGrayson 10:e4dd36148539 1 #include "line_sensors.h"
DavidEGrayson 10:e4dd36148539 2
DavidEGrayson 31:739b91331f31 3 DigitalInOut lineSensorsDigital[LINE_SENSOR_COUNT] = {
DavidEGrayson 32:83a13b06093c 4 DigitalInOut(p18), // white wire, left-most sensor
DavidEGrayson 31:739b91331f31 5 DigitalInOut(p19), // orange wire, middle sensor
DavidEGrayson 32:83a13b06093c 6 DigitalInOut(p20), // brown wire, right-most sensor
DavidEGrayson 29:cfcf08d8ac79 7 };
DavidEGrayson 29:cfcf08d8ac79 8
DavidEGrayson 31:739b91331f31 9 void readSensors(uint16_t * values)
DavidEGrayson 31:739b91331f31 10 {
DavidEGrayson 31:739b91331f31 11 for(uint8_t i = 0; i < LINE_SENSOR_COUNT; i++)
DavidEGrayson 31:739b91331f31 12 {
DavidEGrayson 31:739b91331f31 13 values[i] = 1000;
DavidEGrayson 31:739b91331f31 14 lineSensorsDigital[i].mode(PullNone);
DavidEGrayson 31:739b91331f31 15 lineSensorsDigital[i].output();
DavidEGrayson 31:739b91331f31 16 lineSensorsDigital[i].write(1);
DavidEGrayson 31:739b91331f31 17 }
DavidEGrayson 31:739b91331f31 18
DavidEGrayson 31:739b91331f31 19 wait_us(10);
DavidEGrayson 31:739b91331f31 20
DavidEGrayson 31:739b91331f31 21 Timer timer;
DavidEGrayson 31:739b91331f31 22 timer.start();
DavidEGrayson 31:739b91331f31 23
DavidEGrayson 31:739b91331f31 24 for(uint8_t i = 0; i < LINE_SENSOR_COUNT; i++)
DavidEGrayson 31:739b91331f31 25 {
DavidEGrayson 31:739b91331f31 26 lineSensorsDigital[i].input();
DavidEGrayson 31:739b91331f31 27 }
DavidEGrayson 31:739b91331f31 28
DavidEGrayson 31:739b91331f31 29 while(timer.read_us() < 1000)
DavidEGrayson 31:739b91331f31 30 {
DavidEGrayson 31:739b91331f31 31 for(uint8_t i = 0; i < LINE_SENSOR_COUNT; i++)
DavidEGrayson 31:739b91331f31 32 {
DavidEGrayson 31:739b91331f31 33 if (values[i] == 1000 && lineSensorsDigital[i].read() == 0)
DavidEGrayson 31:739b91331f31 34 {
DavidEGrayson 31:739b91331f31 35 values[i] = timer.read_us();
DavidEGrayson 31:739b91331f31 36 }
DavidEGrayson 31:739b91331f31 37 }
DavidEGrayson 31:739b91331f31 38 }
DavidEGrayson 31:739b91331f31 39 }