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

Committer:
Gaku0606
Date:
Sat Feb 18 12:31:20 2017 +0000
Revision:
1:dd7259ae444a
Parent:
0:eb65057bbb64
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Gaku0606 0:eb65057bbb64 1 #ifndef _MOTOR_DRIVER_HPP_
Gaku0606 0:eb65057bbb64 2 #define _MOTOR_DRIVER_HPP_
Gaku0606 0:eb65057bbb64 3
Gaku0606 0:eb65057bbb64 4 #include "mbed.h"
Gaku0606 0:eb65057bbb64 5
Gaku0606 1:dd7259ae444a 6 /**
Gaku0606 1:dd7259ae444a 7 * @bref モーターを回すライブラリ
Gaku0606 1:dd7259ae444a 8 * @author Gaku MATSUMOTO
Gaku0606 1:dd7259ae444a 9 * @date 2017/02/18
Gaku0606 1:dd7259ae444a 10 */
Gaku0606 0:eb65057bbb64 11 class motor_driver{
Gaku0606 0:eb65057bbb64 12
Gaku0606 1:dd7259ae444a 13 /**
Gaku0606 1:dd7259ae444a 14 @param r_f 右の前進ピン
Gaku0606 1:dd7259ae444a 15 @param r_b 右の後進ピン
Gaku0606 1:dd7259ae444a 16 @param l_f 左の前進ピン
Gaku0606 1:dd7259ae444a 17 @param l_b 左の後進ピン
Gaku0606 1:dd7259ae444a 18 */
Gaku0606 0:eb65057bbb64 19 public:
Gaku0606 0:eb65057bbb64 20 motor_driver(PinName r_f, PinName r_b, PinName l_f, PinName l_b, PinName r_st, PinName l_st);
Gaku0606 0:eb65057bbb64 21
Gaku0606 0:eb65057bbb64 22 private:
Gaku0606 0:eb65057bbb64 23
Gaku0606 0:eb65057bbb64 24 PwmOut RF;
Gaku0606 0:eb65057bbb64 25 PwmOut RB;
Gaku0606 0:eb65057bbb64 26 PwmOut LF;
Gaku0606 0:eb65057bbb64 27 PwmOut LB;
Gaku0606 0:eb65057bbb64 28 DigitalOut Rst;
Gaku0606 0:eb65057bbb64 29 DigitalOut Lst;
Gaku0606 0:eb65057bbb64 30
Gaku0606 0:eb65057bbb64 31 public:
Gaku0606 0:eb65057bbb64 32 /**
Gaku0606 0:eb65057bbb64 33 * @bref 引数のデューティー比で前進する.
Gaku0606 0:eb65057bbb64 34 * @param duty デューティー比
Gaku0606 0:eb65057bbb64 35 * @note 引数なしで全力前進
Gaku0606 0:eb65057bbb64 36 */
Gaku0606 0:eb65057bbb64 37 void forward(float duty = 1.0f);
Gaku0606 0:eb65057bbb64 38
Gaku0606 0:eb65057bbb64 39 /**
Gaku0606 0:eb65057bbb64 40 * @bref 引数のデューティー比で後進する.
Gaku0606 0:eb65057bbb64 41 * @param duty デューティー比
Gaku0606 0:eb65057bbb64 42 * @note 引数無しで全力後進
Gaku0606 0:eb65057bbb64 43 */
Gaku0606 0:eb65057bbb64 44 void back(float duty = 1.0f);
Gaku0606 0:eb65057bbb64 45
Gaku0606 0:eb65057bbb64 46 /**
Gaku0606 0:eb65057bbb64 47 * @bref 指定した比率で左右のタイヤを回し,右折します.
Gaku0606 0:eb65057bbb64 48 * @param 左右のタイヤへのpwm比
Gaku0606 0:eb65057bbb64 49 */
Gaku0606 0:eb65057bbb64 50 void right(float percentage = 0.5f);
Gaku0606 0:eb65057bbb64 51
Gaku0606 0:eb65057bbb64 52 /**
Gaku0606 0:eb65057bbb64 53 * @bref 指定した比率で左右のタイヤを回し,左折します.
Gaku0606 0:eb65057bbb64 54 * @param 左右のタイヤへのpwm比
Gaku0606 0:eb65057bbb64 55 */
Gaku0606 0:eb65057bbb64 56 void left(float percentage = 0.5f);
Gaku0606 0:eb65057bbb64 57
Gaku0606 0:eb65057bbb64 58 /**
Gaku0606 0:eb65057bbb64 59 * @bref 指定したデューティー比で右に超信地旋回する.
Gaku0606 0:eb65057bbb64 60 * @param duty デューティー比
Gaku0606 0:eb65057bbb64 61 */
Gaku0606 0:eb65057bbb64 62 void pivot_right(float duty = 1.0f);
Gaku0606 0:eb65057bbb64 63
Gaku0606 0:eb65057bbb64 64 /**
Gaku0606 0:eb65057bbb64 65 * @bref 指定したデューティー比で左に超信地旋回する.
Gaku0606 0:eb65057bbb64 66 * @param duty デューティー比
Gaku0606 0:eb65057bbb64 67 */
Gaku0606 0:eb65057bbb64 68 void pivot_left(float duty = 1.0f);
Gaku0606 0:eb65057bbb64 69
Gaku0606 0:eb65057bbb64 70 /**
Gaku0606 0:eb65057bbb64 71 * @bref 左右のモーターを停止させる.
Gaku0606 0:eb65057bbb64 72 * @note ブレーキではない
Gaku0606 0:eb65057bbb64 73 */
Gaku0606 0:eb65057bbb64 74 void stop();
Gaku0606 0:eb65057bbb64 75
Gaku0606 0:eb65057bbb64 76 /**
Gaku0606 0:eb65057bbb64 77 * @bref モータードライバーを省電力待機モードにする.
Gaku0606 0:eb65057bbb64 78 * @note 基本的に走っていないときはこれを実行したほうがよいかと
Gaku0606 0:eb65057bbb64 79 */
Gaku0606 0:eb65057bbb64 80 void standBy();
Gaku0606 0:eb65057bbb64 81
Gaku0606 0:eb65057bbb64 82 /**
Gaku0606 0:eb65057bbb64 83 * @bref ブレーキをかける
Gaku0606 0:eb65057bbb64 84 * @note モーター的にはあまりよくないようです
Gaku0606 0:eb65057bbb64 85 */
Gaku0606 0:eb65057bbb64 86 void brake();
Gaku0606 0:eb65057bbb64 87 };
Gaku0606 0:eb65057bbb64 88
Gaku0606 0:eb65057bbb64 89 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){
Gaku0606 0:eb65057bbb64 90
Gaku0606 0:eb65057bbb64 91 RF = 0;
Gaku0606 0:eb65057bbb64 92 RB = 0;
Gaku0606 0:eb65057bbb64 93 LF = 0;
Gaku0606 0:eb65057bbb64 94 LB = 0;
Gaku0606 0:eb65057bbb64 95 Rst = 0;
Gaku0606 0:eb65057bbb64 96 Lst = 0;
Gaku0606 0:eb65057bbb64 97 }
Gaku0606 0:eb65057bbb64 98
Gaku0606 0:eb65057bbb64 99 inline void motor_driver::forward(float duty){
Gaku0606 0:eb65057bbb64 100 RF = duty;
Gaku0606 0:eb65057bbb64 101 RB = 0.0f;
Gaku0606 0:eb65057bbb64 102 LF = duty;
Gaku0606 0:eb65057bbb64 103 LB = 0.0f;
Gaku0606 0:eb65057bbb64 104 Rst = 1;
Gaku0606 0:eb65057bbb64 105 Lst = 1;
Gaku0606 0:eb65057bbb64 106 return;
Gaku0606 0:eb65057bbb64 107 }
Gaku0606 0:eb65057bbb64 108
Gaku0606 0:eb65057bbb64 109 inline void motor_driver::back(float duty){
Gaku0606 0:eb65057bbb64 110 RF = 0.0f;
Gaku0606 0:eb65057bbb64 111 RB = duty;
Gaku0606 0:eb65057bbb64 112 LF = 0.0f;
Gaku0606 0:eb65057bbb64 113 LB = duty;
Gaku0606 0:eb65057bbb64 114 Rst = 1;
Gaku0606 0:eb65057bbb64 115 Lst = 1;
Gaku0606 0:eb65057bbb64 116 return;
Gaku0606 0:eb65057bbb64 117 }
Gaku0606 0:eb65057bbb64 118
Gaku0606 0:eb65057bbb64 119 inline void motor_driver::right(float percentage){
Gaku0606 0:eb65057bbb64 120 //右を弱める
Gaku0606 0:eb65057bbb64 121 RF = percentage;
Gaku0606 0:eb65057bbb64 122 RB = 0.0f;
Gaku0606 0:eb65057bbb64 123 LF = 1.0f;
Gaku0606 0:eb65057bbb64 124 LB = 0.0f;
Gaku0606 0:eb65057bbb64 125 Rst = 1;
Gaku0606 0:eb65057bbb64 126 Lst = 1;
Gaku0606 0:eb65057bbb64 127 return;
Gaku0606 0:eb65057bbb64 128 }
Gaku0606 0:eb65057bbb64 129
Gaku0606 0:eb65057bbb64 130 inline void motor_driver::left(float percentage){
Gaku0606 0:eb65057bbb64 131 //左を弱める
Gaku0606 0:eb65057bbb64 132 RF = 1.0f;
Gaku0606 0:eb65057bbb64 133 RB = 0.0f;
Gaku0606 0:eb65057bbb64 134 LF = percentage;
Gaku0606 0:eb65057bbb64 135 LB = 0.0f;
Gaku0606 0:eb65057bbb64 136 Rst = 1;
Gaku0606 0:eb65057bbb64 137 Lst = 1;
Gaku0606 0:eb65057bbb64 138 return;
Gaku0606 0:eb65057bbb64 139 }
Gaku0606 0:eb65057bbb64 140
Gaku0606 0:eb65057bbb64 141 inline void motor_driver::pivot_right(float duty){
Gaku0606 0:eb65057bbb64 142 RF = 0.0f;
Gaku0606 0:eb65057bbb64 143 RB = duty;
Gaku0606 0:eb65057bbb64 144 LF = duty;
Gaku0606 0:eb65057bbb64 145 LB = 0.0f;
Gaku0606 0:eb65057bbb64 146 Rst = 1;
Gaku0606 0:eb65057bbb64 147 Lst = 1;
Gaku0606 0:eb65057bbb64 148 return;
Gaku0606 0:eb65057bbb64 149 }
Gaku0606 0:eb65057bbb64 150
Gaku0606 0:eb65057bbb64 151 inline void motor_driver::pivot_left(float duty){
Gaku0606 0:eb65057bbb64 152 RF = duty;
Gaku0606 0:eb65057bbb64 153 RB = 0.0f;
Gaku0606 0:eb65057bbb64 154 LF = 0.0f;
Gaku0606 0:eb65057bbb64 155 LB = duty;
Gaku0606 0:eb65057bbb64 156 Rst = 1;
Gaku0606 0:eb65057bbb64 157 Lst = 1;
Gaku0606 0:eb65057bbb64 158 return;
Gaku0606 0:eb65057bbb64 159 }
Gaku0606 0:eb65057bbb64 160
Gaku0606 0:eb65057bbb64 161 inline void motor_driver::stop(){
Gaku0606 0:eb65057bbb64 162 RF = 0.0f;
Gaku0606 0:eb65057bbb64 163 RB = 0.0f;
Gaku0606 0:eb65057bbb64 164 LF = 0.0f;
Gaku0606 0:eb65057bbb64 165 LB = 0.0f;
Gaku0606 0:eb65057bbb64 166 Rst = 1;
Gaku0606 0:eb65057bbb64 167 Lst = 1;
Gaku0606 0:eb65057bbb64 168 return;
Gaku0606 0:eb65057bbb64 169 }
Gaku0606 0:eb65057bbb64 170
Gaku0606 0:eb65057bbb64 171 inline void motor_driver::standBy(){
Gaku0606 0:eb65057bbb64 172 Rst = 0;
Gaku0606 0:eb65057bbb64 173 Lst = 0;
Gaku0606 0:eb65057bbb64 174 RF = 0.0f;
Gaku0606 0:eb65057bbb64 175 RB = 0.0f;
Gaku0606 0:eb65057bbb64 176 LF = 0.0f;
Gaku0606 0:eb65057bbb64 177 LB = 0.0f;
Gaku0606 0:eb65057bbb64 178 return;
Gaku0606 0:eb65057bbb64 179 }
Gaku0606 0:eb65057bbb64 180
Gaku0606 0:eb65057bbb64 181 inline void motor_driver::brake(){
Gaku0606 0:eb65057bbb64 182 RF = 1;
Gaku0606 0:eb65057bbb64 183 RB = 1;
Gaku0606 0:eb65057bbb64 184 LF = 1;
Gaku0606 0:eb65057bbb64 185 LB = 1;
Gaku0606 0:eb65057bbb64 186 Rst = 1;
Gaku0606 0:eb65057bbb64 187 Lst = 1;
Gaku0606 0:eb65057bbb64 188 }
Gaku0606 0:eb65057bbb64 189 #endif
Gaku0606 0:eb65057bbb64 190