Library to drive the Zumo shield from pololu.

Dependents:   Nucleo_Zumo_BLE_IDB04A1

https://www.pololu.com/category/169/zumo-robot-for-arduino

ZumoShield.cpp

Committer:
bcostm
Date:
2015-10-12
Revision:
0:c69b20870374

File content as of revision 0:c69b20870374:

#include "ZumoShield.h"
#include "mbed.h"

ZumoShield::ZumoShield(PinName m1_pwm_pin, PinName m1_dir_pin,
                       PinName m2_pwm_pin, PinName m2_dir_pin) :
//                     PinName a0_pin, PinName a1_pin, PinName a2_pin, PinName a3_pin, PinName a4_pin, PinName a5_pin) :
    m1pwm(m1_pwm_pin),
    m1dir(m1_dir_pin),
    m2pwm(m2_pwm_pin),
    m2dir(m2_dir_pin)
    /*
    a0sens(a0_pin),
    a1sens(a1_pin),
    a2sens(a2_pin),
    a3sens(a3_pin),
    a4sens(a4_pin),
    a5sens(a5_pin)
    */
{
}

void ZumoShield::left_motor(float speed)
{
    if (speed >= 0) {
        m2pwm = speed;
        m2dir = 0;
    } else {
        m2pwm = -speed;
        m2dir = 1;
    }
}

void ZumoShield::right_motor(float speed)
{
    if (speed >= 0) {
        m1pwm = speed;
        m1dir = 1;
    } else {
        m1pwm = -speed;
        m1dir = 0;
    }
}

void ZumoShield::turn_left(float speed)
{
    left_motor(0);
    right_motor(speed);
}

void ZumoShield::turn_right(float speed)
{
    left_motor(speed);
    right_motor(0);
}

void ZumoShield::left(float speed)
{
    left_motor(-speed);
    right_motor(speed);
}

void ZumoShield::right(float speed)
{
    left_motor(speed);
    right_motor(-speed);
}

void ZumoShield::forward(float speed)
{
    if (speed == 0) {
        left_motor(0);
        right_motor(0);
    } else {
        left_motor(speed);
        right_motor(speed);
    }
}

void ZumoShield::backward(float speed)
{
    if (speed == 0) {
        left_motor(0);
        right_motor(0);
    } else {
        left_motor(-speed);
        right_motor(-speed);
    }
}

void ZumoShield::stop(int motor)
{
    if (motor == 1) {
        stopLeft();
    } else if (motor == 2) {
        stopRight();
    }
}

void ZumoShield::stopLeft()
{
    m2pwm = 0;
    m2dir = 0;
}

void ZumoShield::stopRight()
{
    m1pwm = 0;
    m1dir = 0;
}

void ZumoShield::stopAll()
{
    stopLeft();
    stopRight();
}

/* TODO
float ZumoShield::position()
{
    return output;
}
*/