モーターを回す程度のライブラリ

motor_driver.hpp

Committer:
Gaku0606
Date:
2017-02-18
Revision:
1:dd7259ae444a
Parent:
0:eb65057bbb64

File content as of revision 1:dd7259ae444a:

#ifndef _MOTOR_DRIVER_HPP_
#define _MOTOR_DRIVER_HPP_

#include "mbed.h"

/**
*  @bref  モーターを回すライブラリ
*  @author Gaku MATSUMOTO
*  @date 2017/02/18
*/
class motor_driver{
  
  /**
     @param r_f 右の前進ピン
     @param r_b 右の後進ピン
     @param l_f 左の前進ピン
     @param l_b 左の後進ピン
  */
  public:
    motor_driver(PinName r_f, PinName r_b, PinName l_f, PinName l_b, PinName r_st, PinName l_st);
    
  private:
    
    PwmOut RF;
    PwmOut RB;
    PwmOut LF;
    PwmOut LB;
    DigitalOut Rst;
    DigitalOut Lst;
    
  public:
    /**
    *   @bref  引数のデューティー比で前進する.
    *   @param duty デューティー比
    *   @note  引数なしで全力前進
    */
    void forward(float duty = 1.0f);
    
    /**
    *  @bref  引数のデューティー比で後進する.
    *  @param  duty  デューティー比
    *  @note  引数無しで全力後進
    */
    void back(float duty = 1.0f);
    
    /**
    *  @bref  指定した比率で左右のタイヤを回し,右折します.
    *  @param  左右のタイヤへのpwm比
    */
    void right(float percentage = 0.5f);
    
    /**
    *  @bref  指定した比率で左右のタイヤを回し,左折します.
    *  @param  左右のタイヤへのpwm比
    */
    void left(float percentage = 0.5f);
    
    /**
    *  @bref  指定したデューティー比で右に超信地旋回する.
    *  @param  duty  デューティー比
    */
    void pivot_right(float duty = 1.0f);
    
    /**
    *  @bref  指定したデューティー比で左に超信地旋回する.
    *  @param  duty  デューティー比
    */
    void pivot_left(float duty = 1.0f);
    
    /**
    *  @bref  左右のモーターを停止させる.
    *  @note  ブレーキではない
    */
    void stop();
    
    /**
    *  @bref  モータードライバーを省電力待機モードにする.
    *  @note  基本的に走っていないときはこれを実行したほうがよいかと
    */
    void standBy();  
    
    /**
    *  @bref  ブレーキをかける
    *  @note  モーター的にはあまりよくないようです
    */
    void brake();
};

motor_driver::motor_driver(PinName r_f, PinName r_b, PinName l_f, PinName l_b, PinName r_st, PinName l_st) : RF(r_f), RB(r_b), LF(l_f), LB(l_b), Rst(r_st), Lst(l_st){

    RF = 0;
    RB = 0;
    LF = 0;
    LB = 0;
    Rst = 0;
    Lst = 0;
}

inline void motor_driver::forward(float duty){
    RF = duty;
    RB = 0.0f;
    LF = duty;
    LB = 0.0f;      
    Rst = 1;
    Lst = 1;
    return;
}

inline void motor_driver::back(float duty){
    RF = 0.0f;
    RB = duty;
    LF = 0.0f;
    LB = duty;
    Rst = 1;
    Lst = 1;
    return;   
}

inline void motor_driver::right(float percentage){
    //右を弱める
    RF = percentage;
    RB = 0.0f;
    LF = 1.0f;
    LB = 0.0f;
    Rst = 1;
    Lst = 1;
    return;
}

inline void motor_driver::left(float percentage){
    //左を弱める
    RF = 1.0f;
    RB = 0.0f;
    LF = percentage;
    LB = 0.0f;
    Rst = 1;
    Lst = 1;
    return;
}

inline void motor_driver::pivot_right(float duty){
    RF = 0.0f;
    RB = duty;
    LF = duty;
    LB = 0.0f;
    Rst = 1;
    Lst = 1;
    return;
}

inline void motor_driver::pivot_left(float duty){
    RF = duty;
    RB = 0.0f;
    LF = 0.0f;
    LB = duty;
    Rst = 1;
    Lst = 1;
    return;
}

inline void motor_driver::stop(){
    RF = 0.0f;
    RB = 0.0f;
    LF = 0.0f;
    LB = 0.0f;
    Rst = 1;
    Lst = 1;
    return;
}

inline void motor_driver::standBy(){
    Rst = 0;
    Lst = 0;
    RF = 0.0f;
    RB = 0.0f;
    LF = 0.0f;
    LB = 0.0f;
    return;
}

inline void motor_driver::brake(){
    RF = 1;
    RB = 1;
    LF = 1;
    LB = 1;
    Rst = 1;
    Lst = 1;   
}
#endif