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:
Thu Feb 20 22:24:32 2014 +0000
Revision:
3:59c80d4b4bf2
Parent:
2:968338353aef
Child:
4:1b20a11765c8
Done working on encoder stuff for now.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DavidEGrayson 0:e77a0edb9878 1 #include <mbed.h>
DavidEGrayson 0:e77a0edb9878 2 #include "PololuEncoder.h"
DavidEGrayson 1:d0d9653a4547 3 #include "Pacer.h"
DavidEGrayson 0:e77a0edb9878 4
DavidEGrayson 1:d0d9653a4547 5 DigitalOut led1(LED1), led2(LED2);
DavidEGrayson 0:e77a0edb9878 6
DavidEGrayson 0:e77a0edb9878 7 Serial pc(USBTX, USBRX);
DavidEGrayson 0:e77a0edb9878 8
DavidEGrayson 0:e77a0edb9878 9 #define ENCODER1 0x00
DavidEGrayson 3:59c80d4b4bf2 10 #define ENCODER2 0x01
DavidEGrayson 0:e77a0edb9878 11
DavidEGrayson 2:968338353aef 12 const PinName encoderPin1A = p6,
DavidEGrayson 3:59c80d4b4bf2 13 encoderPin1B = p7,
DavidEGrayson 3:59c80d4b4bf2 14 encoderPin2A = p8,
DavidEGrayson 3:59c80d4b4bf2 15 encoderPin2B = p9;
DavidEGrayson 2:968338353aef 16
DavidEGrayson 0:e77a0edb9878 17 PololuEncoderBuffer encoderBuffer;
DavidEGrayson 2:968338353aef 18 PololuEncoder encoder1(encoderPin1A, encoderPin1B, &encoderBuffer, ENCODER1);
DavidEGrayson 3:59c80d4b4bf2 19 PololuEncoder encoder2(encoderPin2A, encoderPin2B, &encoderBuffer, ENCODER2);
DavidEGrayson 0:e77a0edb9878 20
DavidEGrayson 2:968338353aef 21 int main()
DavidEGrayson 2:968338353aef 22 {
DavidEGrayson 2:968338353aef 23 pc.baud(115200);
DavidEGrayson 2:968338353aef 24
DavidEGrayson 2:968338353aef 25 // Enable pull-ups on encoder pins and give them a chance to settle.
DavidEGrayson 2:968338353aef 26 DigitalIn(encoderPin1A).mode(PullUp);
DavidEGrayson 2:968338353aef 27 DigitalIn(encoderPin1B).mode(PullUp);
DavidEGrayson 3:59c80d4b4bf2 28 DigitalIn(encoderPin2A).mode(PullUp);
DavidEGrayson 3:59c80d4b4bf2 29 DigitalIn(encoderPin2B).mode(PullUp);
DavidEGrayson 2:968338353aef 30 wait_us(50);
DavidEGrayson 2:968338353aef 31 encoder1.init();
DavidEGrayson 3:59c80d4b4bf2 32 encoder2.init();
DavidEGrayson 2:968338353aef 33
DavidEGrayson 1:d0d9653a4547 34 Pacer reportPacer(250000);
DavidEGrayson 1:d0d9653a4547 35 Pacer blinkPacer(200000);
DavidEGrayson 3:59c80d4b4bf2 36 uint32_t eventCount = 0;
DavidEGrayson 3:59c80d4b4bf2 37 uint32_t count = 0;
DavidEGrayson 0:e77a0edb9878 38 while(1) {
DavidEGrayson 0:e77a0edb9878 39 while(encoderBuffer.hasEvents())
DavidEGrayson 0:e77a0edb9878 40 {
DavidEGrayson 0:e77a0edb9878 41 PololuEncoderEvent event = encoderBuffer.readEvent();
DavidEGrayson 1:d0d9653a4547 42 eventCount += 1;
DavidEGrayson 3:59c80d4b4bf2 43 if (event == POLOLU_ENCODER_EVENT_ERR | ENCODER1)
DavidEGrayson 3:59c80d4b4bf2 44 {
DavidEGrayson 3:59c80d4b4bf2 45 pc.puts("error\n");
DavidEGrayson 3:59c80d4b4bf2 46 }
DavidEGrayson 3:59c80d4b4bf2 47 else if (event == POLOLU_ENCODER_EVENT_INC | ENCODER1)
DavidEGrayson 3:59c80d4b4bf2 48 {
DavidEGrayson 3:59c80d4b4bf2 49 count += 1;
DavidEGrayson 3:59c80d4b4bf2 50 }
DavidEGrayson 3:59c80d4b4bf2 51 else if (event == POLOLU_ENCODER_EVENT_DEC | ENCODER1)
DavidEGrayson 3:59c80d4b4bf2 52 {
DavidEGrayson 3:59c80d4b4bf2 53 count -= 1;
DavidEGrayson 3:59c80d4b4bf2 54 }
DavidEGrayson 0:e77a0edb9878 55 }
DavidEGrayson 2:968338353aef 56
DavidEGrayson 1:d0d9653a4547 57 if(reportPacer.pace())
DavidEGrayson 1:d0d9653a4547 58 {
DavidEGrayson 1:d0d9653a4547 59 led2 = 1;
DavidEGrayson 2:968338353aef 60 char str[80];
DavidEGrayson 3:59c80d4b4bf2 61 sprintf(str, "%8x %8x %8x\n", encoder1.getCount(), count, eventCount);
DavidEGrayson 2:968338353aef 62 pc.puts(str);
DavidEGrayson 1:d0d9653a4547 63 led2 = 0;
DavidEGrayson 1:d0d9653a4547 64 }
DavidEGrayson 2:968338353aef 65
DavidEGrayson 1:d0d9653a4547 66 if (blinkPacer.pace())
DavidEGrayson 1:d0d9653a4547 67 {
DavidEGrayson 1:d0d9653a4547 68 led1 = !led1;
DavidEGrayson 1:d0d9653a4547 69 }
DavidEGrayson 0:e77a0edb9878 70 }
DavidEGrayson 0:e77a0edb9878 71 }