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:
Mon Feb 24 01:26:00 2014 +0000
Revision:
16:8eaa5bc2bdb1
Parent:
12:835a4d24ae3b
Child:
17:2df9861f53ee
Got debounced button pressing to work.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DavidEGrayson 0:e77a0edb9878 1 #include <mbed.h>
DavidEGrayson 8:78b1ff957cba 2 #include <Pacer.h>
DavidEGrayson 0:e77a0edb9878 3
DavidEGrayson 8:78b1ff957cba 4 #include "motors.h"
DavidEGrayson 8:78b1ff957cba 5 #include "encoders.h"
DavidEGrayson 9:9734347b5756 6 #include "leds.h"
DavidEGrayson 8:78b1ff957cba 7 #include "pc_serial.h"
DavidEGrayson 9:9734347b5756 8 #include "test.h"
DavidEGrayson 12:835a4d24ae3b 9 #include "reckoner.h"
DavidEGrayson 16:8eaa5bc2bdb1 10 #include "buttons.h"
DavidEGrayson 0:e77a0edb9878 11
DavidEGrayson 10:e4dd36148539 12 int __attribute__((noreturn)) main()
DavidEGrayson 2:968338353aef 13 {
DavidEGrayson 2:968338353aef 14 pc.baud(115200);
DavidEGrayson 2:968338353aef 15
DavidEGrayson 2:968338353aef 16 // Enable pull-ups on encoder pins and give them a chance to settle.
DavidEGrayson 9:9734347b5756 17 encodersInit();
DavidEGrayson 9:9734347b5756 18 motorsInit();
DavidEGrayson 16:8eaa5bc2bdb1 19 buttonsInit();
DavidEGrayson 4:1b20a11765c8 20
DavidEGrayson 8:78b1ff957cba 21 // Test routines
DavidEGrayson 9:9734347b5756 22 //testMotors();
DavidEGrayson 10:e4dd36148539 23 //testEncoders();
DavidEGrayson 12:835a4d24ae3b 24 //testLineSensors();
DavidEGrayson 16:8eaa5bc2bdb1 25 //testReckoner();
DavidEGrayson 16:8eaa5bc2bdb1 26 testButtons();
DavidEGrayson 2:968338353aef 27
DavidEGrayson 4:1b20a11765c8 28 while(1)
DavidEGrayson 4:1b20a11765c8 29 {
DavidEGrayson 9:9734347b5756 30
DavidEGrayson 0:e77a0edb9878 31 }
DavidEGrayson 0:e77a0edb9878 32 }
DavidEGrayson 12:835a4d24ae3b 33
DavidEGrayson 12:835a4d24ae3b 34 void updateReckonerFromEncoders()
DavidEGrayson 12:835a4d24ae3b 35 {
DavidEGrayson 12:835a4d24ae3b 36 while(encoderBuffer.hasEvents())
DavidEGrayson 12:835a4d24ae3b 37 {
DavidEGrayson 12:835a4d24ae3b 38 PololuEncoderEvent event = encoderBuffer.readEvent();
DavidEGrayson 12:835a4d24ae3b 39 switch(event)
DavidEGrayson 12:835a4d24ae3b 40 {
DavidEGrayson 12:835a4d24ae3b 41 case ENCODER_LEFT | POLOLU_ENCODER_EVENT_INC:
DavidEGrayson 12:835a4d24ae3b 42 reckoner.handleTickLeftForward();
DavidEGrayson 12:835a4d24ae3b 43 break;
DavidEGrayson 12:835a4d24ae3b 44 case ENCODER_LEFT | POLOLU_ENCODER_EVENT_DEC:
DavidEGrayson 12:835a4d24ae3b 45 reckoner.handleTickLeftBackward();
DavidEGrayson 12:835a4d24ae3b 46 break;
DavidEGrayson 12:835a4d24ae3b 47 case ENCODER_RIGHT | POLOLU_ENCODER_EVENT_INC:
DavidEGrayson 12:835a4d24ae3b 48 reckoner.handleTickRightForward();
DavidEGrayson 12:835a4d24ae3b 49 break;
DavidEGrayson 12:835a4d24ae3b 50 case ENCODER_RIGHT | POLOLU_ENCODER_EVENT_DEC:
DavidEGrayson 12:835a4d24ae3b 51 reckoner.handleTickRightBackward();
DavidEGrayson 12:835a4d24ae3b 52 break;
DavidEGrayson 12:835a4d24ae3b 53
DavidEGrayson 12:835a4d24ae3b 54 }
DavidEGrayson 12:835a4d24ae3b 55 }
DavidEGrayson 12:835a4d24ae3b 56 }