モーターを回す程度のライブラリ
motor_driver.hpp@1:dd7259ae444a, 2017-02-18 (annotated)
- Committer:
- Gaku0606
- Date:
- Sat Feb 18 12:31:20 2017 +0000
- Revision:
- 1:dd7259ae444a
- Parent:
- 0:eb65057bbb64
a
Who changed what in which revision?
User | Revision | Line number | New 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 |