モーターを回す程度のライブラリ
Diff: motor_driver.hpp
- Revision:
- 0:eb65057bbb64
- Child:
- 1:dd7259ae444a
diff -r 000000000000 -r eb65057bbb64 motor_driver.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/motor_driver.hpp Sat Feb 18 12:26:54 2017 +0000 @@ -0,0 +1,179 @@ +#ifndef _MOTOR_DRIVER_HPP_ +#define _MOTOR_DRIVER_HPP_ + +#include "mbed.h" + +class motor_driver{ + + 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 +