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

main.cpp

Committer:
DavidEGrayson
Date:
2014-02-20
Revision:
6:89a39870e23d
Parent:
5:01ad080dc4fa
Child:
7:85b8b5acfb22

File content as of revision 6:89a39870e23d:

#include <mbed.h>
#include "PololuEncoder.h"
#include "Pacer.h"
#include "motors.h"

DigitalOut led1(LED1), led2(LED2);

Serial pc(USBTX, USBRX);

#define ENCODER1 0x00
#define ENCODER2 0x01

const PinName encoderPin1A = p6,
              encoderPin1B = p7,
              encoderPin2A = p8,
              encoderPin2B = p9;

PololuEncoderBuffer encoderBuffer;
PololuEncoder encoder1(encoderPin1A, encoderPin1B, &encoderBuffer, ENCODER1);
PololuEncoder encoder2(encoderPin2A, encoderPin2B, &encoderBuffer, ENCODER2);

int main()
{
    pc.baud(115200);
    
    // Enable pull-ups on encoder pins and give them a chance to settle.
    DigitalIn(encoderPin1A).mode(PullUp);
    DigitalIn(encoderPin1B).mode(PullUp);
    DigitalIn(encoderPin2A).mode(PullUp);
    DigitalIn(encoderPin2B).mode(PullUp);
    wait_us(50);
    encoder1.init();
    encoder2.init();
    
    motors_init();

    motors_speed_set(600, 5);

    Pacer reportPacer(500000);
    Pacer blinkPacer(200000);
    uint32_t eventCount = 0;
    uint32_t count = 0;
    while(1)
    {
        while(encoderBuffer.hasEvents())
        {
            PololuEncoderEvent event = encoderBuffer.readEvent();
            eventCount += 1;
            if (event == POLOLU_ENCODER_EVENT_ERR | ENCODER1)
            {
                pc.puts("error\n");   
            }
            else if (event == POLOLU_ENCODER_EVENT_INC | ENCODER1)
            {
                count += 1;   
            }
            else if (event == POLOLU_ENCODER_EVENT_DEC | ENCODER1)
            {
                count -= 1;
            }
        }
        
        if(reportPacer.pace())
        {
            led2 = 1;
            pc.printf("%8x\n", LPC_PWM1->MCR);
            led2 = 0;
        }
        
        if (blinkPacer.pace())
        {
            led1 = !led1;
        }
    }
}