David's line following code from the LVBots competition, 2015.
Dependencies: GeneralDebouncer Pacer PololuEncoder mbed
Fork of DeadReckoning by
main.cpp@7:85b8b5acfb22, 2014-02-21 (annotated)
- Committer:
- DavidEGrayson
- Date:
- Fri Feb 21 00:00:43 2014 +0000
- Revision:
- 7:85b8b5acfb22
- Parent:
- 6:89a39870e23d
- Child:
- 8:78b1ff957cba
Setting more PWM registers now, but the call to period_us is still necessary for some reason.
Who changed what in which revision?
User | Revision | Line number | New 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 | 7:85b8b5acfb22 | 37 | motors_speed_set(600, 1195); |
DavidEGrayson | 2:968338353aef | 38 | |
DavidEGrayson | 5:01ad080dc4fa | 39 | Pacer reportPacer(500000); |
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 | 5:01ad080dc4fa | 66 | pc.printf("%8x\n", LPC_PWM1->MCR); |
DavidEGrayson | 1:d0d9653a4547 | 67 | led2 = 0; |
DavidEGrayson | 1:d0d9653a4547 | 68 | } |
DavidEGrayson | 2:968338353aef | 69 | |
DavidEGrayson | 1:d0d9653a4547 | 70 | if (blinkPacer.pace()) |
DavidEGrayson | 1:d0d9653a4547 | 71 | { |
DavidEGrayson | 1:d0d9653a4547 | 72 | led1 = !led1; |
DavidEGrayson | 1:d0d9653a4547 | 73 | } |
DavidEGrayson | 0:e77a0edb9878 | 74 | } |
DavidEGrayson | 0:e77a0edb9878 | 75 | } |