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:59:28 2014 +0000
Revision:
4:1b20a11765c8
Parent:
3:59c80d4b4bf2
Child:
5:01ad080dc4fa
Succeeded in generating basic PWM signals with PwmOut.

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