This program is for an autonomous robot for the competition at the Hochschule Luzern. http://cruisingcrepe.wordpress.com/ We are one of the 32 teams. http://cruisingcrepe.wordpress.com/ The postition control is based on this Documentation: Control of Wheeled Mobile Robots: An Experimental Overview from Alessandro De Luca, Giuseppe Oriolo, Marilena Vendittelli. For more information see here: http://www.dis.uniroma1.it/~labrob/pub/papers/Ramsete01.pdf

Dependencies:   mbed

Fork of autonomous Robot Android by Christian Burri

ActuatorsSensor/MaxonESCON.cpp

Committer:
chrigelburri
Date:
2013-06-10
Revision:
39:a4fd6206da89
Parent:
12:235e318a414f

File content as of revision 39:a4fd6206da89:

#include "MaxonESCON.h"

using namespace std;

MaxonESCON::MaxonESCON(
    PinName enb,
    PinName isenb,
    PinName pwm,
    PinName actualSpeed,
    Hallsensor *hall
)
    :
    _enb(enb),
    _isenb(isenb),
    _pwm(pwm),
    _actualSpeed(actualSpeed),
    _hall(hall)
{

    _pwm = 0;

    // Initial condition of output enables
    _enb = 0;

    // Set initial condition of PWM 2kHz
    period(0.0005);

    // Set the pulses to zero
    _pulses = 0;

    // Set the Pull Up Resistor
    _isenb.mode(PullUp);
}

void MaxonESCON::setVelocity(float speed)
{
    speed = speed / ESCON_SET_FACTOR * 60.0f;
    if(speed > 1 ) {
        _pwm = 0.89f;
    } else if(speed < -1) {
        _pwm = 0.11f;
    } else {
        _pwm = 0.4f*speed + (0.5f * (SET_SPEED_PATCH));
    }
}

float MaxonESCON::getActualSpeed(void)
{
    return (_actualSpeed.read()* 2.0f - 1.0f *(GET_SPEED_PATCH)) * ESCON_GET_FACTOR / 60.0f;
}

void MaxonESCON::period(float period)
{
    _pwm.period(period);
}

void MaxonESCON::enable(bool enb)
{
    if(enb == true) {
        _enb = 1;
    } else {
        _enb = 0;
    }
}

bool MaxonESCON::isEnabled()
{
    if(_isenb.read() == 1) {
        return true;
    } else {
        return false;
    }
}

int MaxonESCON::getPulses(void)
{
    _pulses = _hall->getPulses();
    return _pulses;
}

int MaxonESCON::setPulses(int setPos)
{
    _hall->reset();
    _pulses = _hall->getPulses();
    return _pulses;
}