V1 of the ParallaxRobotShield library

ParallaxRobotShield.cpp

Committer:
omarrasheedk
Date:
2015-08-20
Revision:
0:2ab9f4a3187a

File content as of revision 0:2ab9f4a3187a:

#include "ParallaxRobotShield.h"
#include "mbed.h"

ParallaxRobotShield::ParallaxRobotShield(PinName leftPin, PinName rightPin) : leftServo(leftPin) , rightServo(rightPin)
{
    leftPosition = 1450;
    rightPosition = 1550;    
}

void ParallaxRobotShield::left_servo(int speed)
{
    speed = 1496 - (speed * 2);
    leftPosition = speed;
}


void ParallaxRobotShield::right_servo(int speed)
{
    speed = 1490 + (speed * 2);
    rightPosition = speed;
}

//void ParallaxRobotShield::StartPulse() 
//{
//    ServoPin = 1;
//    PulseStop.attach_us(this, &ParallaxRobotShield::EndPulse, Position);
//}

void ParallaxRobotShield::disable_left_motor()  // Just for internal functions
{
    leftServo = 0;
}
//void ParallaxRobotShield::EndPulse() 
//{
//    ServoPin = 0;
//}
void ParallaxRobotShield::disable_right_motor() // Just for internal functions
{
    rightServo = 0;
}


void ParallaxRobotShield::enable_left_motor()
{
    leftServo = 1;
    leftPulse.attach_us(this, &ParallaxRobotShield::enable_left_motor, 20000);      // Period is set to 20000 us by default which is equal to 50 Hz
    leftPulseStop.attach_us(this, &ParallaxRobotShield::disable_left_motor, leftPosition);
}


void ParallaxRobotShield::enable_right_motor()
{
    rightServo = 1;
    rightPulse.attach_us(this, &ParallaxRobotShield::enable_right_motor, 20000);    // Period is set to 20000 us by default which is equal to 50 Hz
    rightPulseStop.attach_us(this, &ParallaxRobotShield::disable_right_motor, rightPosition);
}


void ParallaxRobotShield::turn_left(int speed)
{
    stopRight();
    int i;
    for(i = 0; i < 100; i++)
    {
        left_servo(speed);
        wait_ms(10);    
    }
    enable_right_motor();
}


void ParallaxRobotShield::turn_right(int speed)
{
    stopLeft();
    int i;
    for(i = 0; i < 100; i++)
    {
        right_servo(speed);
        wait_ms(10);    
    }
    enable_left_motor();
}


void ParallaxRobotShield::forward(int speed)
{
    int i;
    for(i = 0; i < 100; i++)
    {
        left_servo(speed);
        right_servo(speed); 
        wait_ms(20);
    }
}


void ParallaxRobotShield::backward(int speed)
{
    forward(-speed);
}


void ParallaxRobotShield::left(int speed)
{
    int i;
    for(i = 0; i < 100; i++)
    {
        left_servo(speed);
        right_servo(-speed); 
        wait_ms(20);
    }
}


void ParallaxRobotShield::right(int speed)
{
    left(-speed);
}


void ParallaxRobotShield::stopLeft()
{
    leftPulse.detach();
}

void ParallaxRobotShield::stopRight()
{
    rightPulse.detach();
}


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


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

//void ParallaxRobotShield::Enable(int StartPos, int Period) 
//{
//    leftPosition = StartPos;
//    leftPulse.attach_us(this, &ParallaxRobotShield::enable_left_motor, Period);
//}