control DC motor using pwm

Dependencies:   Motordriver mbed

Fork of Motor_HelloWorld by Simon Ford

pwm-motor.cpp

Committer:
faif
Date:
2016-12-11
Revision:
1:a96dd8db5c11

File content as of revision 1:a96dd8db5c11:

#include "mbed.h"
#include "motordriver.h"
#include "pwm-motor.h"

static const char CLS[] = "\x1B[2J";        // VT100 erase screen
static const char HOME[] = "\x1B[H";        // VT100 home

// in seconds
static const int move_delay = 0.02;

enum Direction
{
    left,
    right,
};

struct Movement 
{
    public:
        float start;
        float stop;
        float step;
        float delay;
        Direction direction;
        
        Movement() {}
    
        Movement(float startValue, 
                 float stopValue, 
                 float stepValue,                  
                 float delayValue,
                 Direction dir) : 
                    start(startValue), 
                    stop(stopValue), 
                    step(stepValue), 
                    delay(delayValue),
                    direction(dir) {}
};

Serial pc(USBTX, USBRX);

int main() 
{
    clear_screen();
    show_menu();
    
    Motor motor(p21, p15, p17, 1); // PWM, Forward, Reverse, Can break
    Movement leftMovement(-1.0, 1.0, 0.01, move_delay, left);
    Movement rightMovement(1.0, -1.0, 0.01, move_delay, right);
        
    while (true) 
    {                  
        Movement currentMovement;
        switch(pc.getc()) 
        {
            case 'r': 
                pc.printf("rotating right...\n\r");
                currentMovement = rightMovement;
                move(motor, currentMovement);
                break;
            case 'l': 
                pc.printf("rotating left...\n\r");
                currentMovement = leftMovement;
                move(motor, currentMovement);
                break;
            case 's':
                pc.printf("stopping motor...\n\r");
                stop(motor);
                break;
        }
        
    }
}   

void clear_screen()
{
    pc.printf(CLS);      
    pc.printf(HOME);               
}

void show_menu()
{
    pc.printf("\rMotor controls:\n\r");
    pc.printf("l. Move left (counter-clockwise)\n\r");
    pc.printf("r. Move right (clockwise)\n\r");
    pc.printf("s. Stop\n\r");
}

void move(Motor& motor, Movement& movement)
{    
    for (float s = movement.start; 
         movement.direction == left ? s < movement.stop : s > movement.stop;
         movement.direction == left ? s += movement.step : s -= movement.step)
    {
        motor.speed(s); 
        wait(movement.delay);
    }
}


void stop(Motor& motor)
{    
    motor.stop(0.0);
}