![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Create this program
Dependencies: mbed HCSR04 HMC6352 PID TextLCD
motor.h@6:44c3bfbe2553, 2015-08-11 (annotated)
- Committer:
- KoiShin_Sakana
- Date:
- Tue Aug 11 13:11:05 2015 +0000
- Revision:
- 6:44c3bfbe2553
- Parent:
- 5:e07e380ddb93
update dribbler.h
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
KoiShin_Sakana | 2:a8bbf677e774 | 1 | /** |
KoiShin_Sakana | 2:a8bbf677e774 | 2 | * @file : motor.h (1.0) |
KoiShin_Sakana | 2:a8bbf677e774 | 3 | * @brief : control moter |
KoiShin_Sakana | 2:a8bbf677e774 | 4 | * @author : Yohei SAITO(, Shinnosuke KOIKE) |
KoiShin_Sakana | 2:a8bbf677e774 | 5 | * @date : 2015/08/04 |
KoiShin_Sakana | 2:a8bbf677e774 | 6 | */ |
KoiShin_Sakana | 2:a8bbf677e774 | 7 | |
KoiShin_Sakana | 2:a8bbf677e774 | 8 | #ifndef MOTOR_H |
KoiShin_Sakana | 2:a8bbf677e774 | 9 | #define MOTOR_H |
KoiShin_Sakana | 2:a8bbf677e774 | 10 | |
KoiShin_Sakana | 2:a8bbf677e774 | 11 | #include "mbed.h" |
KoiShin_Sakana | 2:a8bbf677e774 | 12 | |
KoiShin_Sakana | 2:a8bbf677e774 | 13 | class Motor { |
KoiShin_Sakana | 2:a8bbf677e774 | 14 | public: |
KoiShin_Sakana | 5:e07e380ddb93 | 15 | Motor(); |
KoiShin_Sakana | 2:a8bbf677e774 | 16 | Motor(PinName normalDirect, PinName reverseDirect, PinName pwm); |
KoiShin_Sakana | 3:901d18b901b4 | 17 | ~Motor(); |
KoiShin_Sakana | 2:a8bbf677e774 | 18 | int setLimit(float powerLimit = 1); |
KoiShin_Sakana | 2:a8bbf677e774 | 19 | void setFlequency(float correctFlequency); |
KoiShin_Sakana | 2:a8bbf677e774 | 20 | void run(float power); // input -1 ~ 1 |
KoiShin_Sakana | 2:a8bbf677e774 | 21 | void brake(void); |
KoiShin_Sakana | 2:a8bbf677e774 | 22 | |
KoiShin_Sakana | 6:44c3bfbe2553 | 23 | private: |
KoiShin_Sakana | 2:a8bbf677e774 | 24 | float limit; |
KoiShin_Sakana | 2:a8bbf677e774 | 25 | PwmOut* powerLevel; |
KoiShin_Sakana | 2:a8bbf677e774 | 26 | DigitalOut normal; |
KoiShin_Sakana | 2:a8bbf677e774 | 27 | DigitalOut reverse; |
KoiShin_Sakana | 2:a8bbf677e774 | 28 | void rotateNormal(void); |
KoiShin_Sakana | 2:a8bbf677e774 | 29 | void rotateReverse(void); |
KoiShin_Sakana | 2:a8bbf677e774 | 30 | }; |
KoiShin_Sakana | 2:a8bbf677e774 | 31 | |
KoiShin_Sakana | 2:a8bbf677e774 | 32 | // initialize |
KoiShin_Sakana | 2:a8bbf677e774 | 33 | Motor::Motor(PinName normalDirect, PinName reverseDirect, PinName pwm): |
KoiShin_Sakana | 2:a8bbf677e774 | 34 | normal(normalDirect), reverse(reverseDirect) { |
KoiShin_Sakana | 2:a8bbf677e774 | 35 | powerLevel = new PwmOut(pwm); |
KoiShin_Sakana | 2:a8bbf677e774 | 36 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 37 | |
KoiShin_Sakana | 3:901d18b901b4 | 38 | Motor::~Motor() { |
KoiShin_Sakana | 3:901d18b901b4 | 39 | delete powerLevel; |
KoiShin_Sakana | 3:901d18b901b4 | 40 | } |
KoiShin_Sakana | 3:901d18b901b4 | 41 | |
KoiShin_Sakana | 2:a8bbf677e774 | 42 | // set flequency |
KoiShin_Sakana | 2:a8bbf677e774 | 43 | void Motor::setFlequency(float correctFlequency) { |
KoiShin_Sakana | 2:a8bbf677e774 | 44 | powerLevel->period(1 / correctFlequency); |
KoiShin_Sakana | 2:a8bbf677e774 | 45 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 46 | |
KoiShin_Sakana | 2:a8bbf677e774 | 47 | // set power limit |
KoiShin_Sakana | 2:a8bbf677e774 | 48 | int Motor::setLimit(float powerLimit) { |
KoiShin_Sakana | 2:a8bbf677e774 | 49 | if (powerLimit > 1 || powerLimit < -1) return 1; |
KoiShin_Sakana | 2:a8bbf677e774 | 50 | |
KoiShin_Sakana | 2:a8bbf677e774 | 51 | limit = powerLimit; |
KoiShin_Sakana | 2:a8bbf677e774 | 52 | return 0; |
KoiShin_Sakana | 2:a8bbf677e774 | 53 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 54 | |
KoiShin_Sakana | 2:a8bbf677e774 | 55 | // run moter |
KoiShin_Sakana | 2:a8bbf677e774 | 56 | void Motor::run(float power) { |
KoiShin_Sakana | 2:a8bbf677e774 | 57 | if (power > 1) power = 1; |
KoiShin_Sakana | 2:a8bbf677e774 | 58 | if (power < -1) power = -1; |
KoiShin_Sakana | 2:a8bbf677e774 | 59 | if (power < 0) { |
KoiShin_Sakana | 2:a8bbf677e774 | 60 | powerLevel->write(-power * limit); |
KoiShin_Sakana | 2:a8bbf677e774 | 61 | rotateReverse(); |
KoiShin_Sakana | 2:a8bbf677e774 | 62 | } else { |
KoiShin_Sakana | 2:a8bbf677e774 | 63 | powerLevel->write(power * limit); |
KoiShin_Sakana | 2:a8bbf677e774 | 64 | rotateNormal(); |
KoiShin_Sakana | 2:a8bbf677e774 | 65 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 66 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 67 | |
KoiShin_Sakana | 2:a8bbf677e774 | 68 | // rotate in the clockwise |
KoiShin_Sakana | 2:a8bbf677e774 | 69 | void Motor::rotateNormal(void) { |
KoiShin_Sakana | 2:a8bbf677e774 | 70 | normal = 1; |
KoiShin_Sakana | 2:a8bbf677e774 | 71 | reverse = 0; |
KoiShin_Sakana | 2:a8bbf677e774 | 72 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 73 | |
KoiShin_Sakana | 2:a8bbf677e774 | 74 | // rotate in the anticlockwise |
KoiShin_Sakana | 2:a8bbf677e774 | 75 | void Motor::rotateReverse(void) { |
KoiShin_Sakana | 2:a8bbf677e774 | 76 | normal = 0; |
KoiShin_Sakana | 2:a8bbf677e774 | 77 | reverse = 1; |
KoiShin_Sakana | 2:a8bbf677e774 | 78 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 79 | |
KoiShin_Sakana | 2:a8bbf677e774 | 80 | // brake |
KoiShin_Sakana | 2:a8bbf677e774 | 81 | void Motor::brake(void) { |
KoiShin_Sakana | 2:a8bbf677e774 | 82 | normal = 1; |
KoiShin_Sakana | 2:a8bbf677e774 | 83 | reverse = 1; |
KoiShin_Sakana | 2:a8bbf677e774 | 84 | powerLevel->write(limit); |
KoiShin_Sakana | 2:a8bbf677e774 | 85 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 86 | |
KoiShin_Sakana | 2:a8bbf677e774 | 87 | #endif |
KoiShin_Sakana | 2:a8bbf677e774 | 88 | |
KoiShin_Sakana | 2:a8bbf677e774 | 89 | /* |
KoiShin_Sakana | 2:a8bbf677e774 | 90 | * example program |
KoiShin_Sakana | 2:a8bbf677e774 | 91 | |
KoiShin_Sakana | 2:a8bbf677e774 | 92 | #include "mbed.h" |
KoiShin_Sakana | 2:a8bbf677e774 | 93 | #include "motor.h" |
KoiShin_Sakana | 2:a8bbf677e774 | 94 | |
KoiShin_Sakana | 2:a8bbf677e774 | 95 | int main(void) { |
KoiShin_Sakana | 2:a8bbf677e774 | 96 | Motor motor(D4, D7, D9); |
KoiShin_Sakana | 2:a8bbf677e774 | 97 | motor.setLimit(0.8); |
KoiShin_Sakana | 2:a8bbf677e774 | 98 | while (1) { |
KoiShin_Sakana | 2:a8bbf677e774 | 99 | motor.run(-0.2); // Then D4->Low D7->High D9(duty) = 0.2 * 0.8 = 0.16 |
KoiShin_Sakana | 2:a8bbf677e774 | 100 | motor.run(2); // Then D4->High D7->Low D9(duty) = 1.0 * 0.8 = 0.8 |
KoiShin_Sakana | 2:a8bbf677e774 | 101 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 102 | } |
KoiShin_Sakana | 2:a8bbf677e774 | 103 | */ |
KoiShin_Sakana | 2:a8bbf677e774 | 104 |