Create this program
Dependencies: mbed HCSR04 HMC6352 PID TextLCD
Diff: motor.h
- Revision:
- 2:a8bbf677e774
- Child:
- 3:901d18b901b4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/motor.h Thu Aug 06 00:19:29 2015 +0000 @@ -0,0 +1,98 @@ +/** + * @file : motor.h (1.0) + * @brief : control moter + * @author : Yohei SAITO(, Shinnosuke KOIKE) + * @date : 2015/08/04 + */ + +#ifndef MOTOR_H +#define MOTOR_H + +#include "mbed.h" + +class Motor { +public: + Motor(PinName normalDirect, PinName reverseDirect, PinName pwm); + int setLimit(float powerLimit = 1); + void setFlequency(float correctFlequency); + void run(float power); // input -1 ~ 1 + void brake(void); + +private: + float limit; + PwmOut* powerLevel; + DigitalOut normal; + DigitalOut reverse; + void rotateNormal(void); + void rotateReverse(void); +}; + +// initialize +Motor::Motor(PinName normalDirect, PinName reverseDirect, PinName pwm): + normal(normalDirect), reverse(reverseDirect) { + powerLevel = new PwmOut(pwm); +} + +// set flequency +void Motor::setFlequency(float correctFlequency) { + powerLevel->period(1 / correctFlequency); +} + +// set power limit +int Motor::setLimit(float powerLimit) { + if (powerLimit > 1 || powerLimit < -1) return 1; + + limit = powerLimit; + return 0; +} + +// run moter +void Motor::run(float power) { + if (power > 1) power = 1; + if (power < -1) power = -1; + if (power < 0) { + powerLevel->write(-power * limit); + rotateReverse(); + } else { + powerLevel->write(power * limit); + rotateNormal(); + } +} + +// rotate in the clockwise +void Motor::rotateNormal(void) { + normal = 1; + reverse = 0; +} + +// rotate in the anticlockwise +void Motor::rotateReverse(void) { + normal = 0; + reverse = 1; +} + +// brake +void Motor::brake(void) { + normal = 1; + reverse = 1; + powerLevel->write(limit); +} + +#endif + +/* + * example program + +#include "mbed.h" +#include "motor.h" + +int main(void) { + Motor motor(D4, D7, D9); + motor.setLimit(0.8); + while (1) { + motor.run(-0.2); // Then D4->Low D7->High D9(duty) = 0.2 * 0.8 = 0.16 + motor.run(2); // Then D4->High D7->Low D9(duty) = 1.0 * 0.8 = 0.8 + } +} + */ + \ No newline at end of file