offer some APIs to control the movement of motor. Suitable with Seeed motor shield

Fork of MotorDriver by wei zou

Committer:
lawliet
Date:
Wed Feb 12 03:07:34 2014 +0000
Revision:
1:9c93f514f369
Parent:
0:6bd25809e2e0
update documents

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lawliet 0:6bd25809e2e0 1 /*
lawliet 0:6bd25809e2e0 2 MotorDriver.h
lawliet 0:6bd25809e2e0 3 2014 Copyright (c) Seeed Technology Inc. All right reserved.
lawliet 0:6bd25809e2e0 4
lawliet 0:6bd25809e2e0 5 Author:lawliet.zou@gmail.com
lawliet 0:6bd25809e2e0 6 2014-02-11
lawliet 0:6bd25809e2e0 7
lawliet 0:6bd25809e2e0 8 This library is free software; you can redistribute it and/or
lawliet 0:6bd25809e2e0 9 modify it under the terms of the GNU Lesser General Public
lawliet 0:6bd25809e2e0 10 License as published by the Free Software Foundation; either
lawliet 0:6bd25809e2e0 11 version 2.1 of the License, or (at your option) any later version.
lawliet 0:6bd25809e2e0 12
lawliet 0:6bd25809e2e0 13 This library is distributed in the hope that it will be useful,
lawliet 0:6bd25809e2e0 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
lawliet 0:6bd25809e2e0 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
lawliet 0:6bd25809e2e0 16 Lesser General Public License for more details.
lawliet 0:6bd25809e2e0 17
lawliet 0:6bd25809e2e0 18 You should have received a copy of the GNU Lesser General Public
lawliet 0:6bd25809e2e0 19 License along with this library; if not, write to the Free Software
lawliet 0:6bd25809e2e0 20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
lawliet 0:6bd25809e2e0 21 */
lawliet 0:6bd25809e2e0 22 #ifndef __MOTORDRIVER_H__
lawliet 0:6bd25809e2e0 23 #define __MOTORDRIVER_H__
lawliet 0:6bd25809e2e0 24
lawliet 0:6bd25809e2e0 25 #include "mbed.h"
lawliet 0:6bd25809e2e0 26 #include "SoftwarePWM.h"
lawliet 0:6bd25809e2e0 27
lawliet 0:6bd25809e2e0 28 /**************Motor ID**********************/
lawliet 0:6bd25809e2e0 29 #define MOTORA 0
lawliet 0:6bd25809e2e0 30 #define MOTORB 1
lawliet 0:6bd25809e2e0 31
lawliet 0:6bd25809e2e0 32 #define LOW 0
lawliet 0:6bd25809e2e0 33 #define HIGH 1
lawliet 0:6bd25809e2e0 34
lawliet 0:6bd25809e2e0 35 #define MOTOR_POSITION_LEFT 0
lawliet 0:6bd25809e2e0 36 #define MOTOR_POSITION_RIGHT 1
lawliet 0:6bd25809e2e0 37 #define MOTOR_CLOCKWISE 0
lawliet 0:6bd25809e2e0 38 #define MOTOR_ANTICLOCKWISE 1
lawliet 0:6bd25809e2e0 39
lawliet 0:6bd25809e2e0 40 #define USE_DC_MOTOR 0
lawliet 0:6bd25809e2e0 41
lawliet 0:6bd25809e2e0 42 #define MOTOR_PERIOD 10000 //10ms
lawliet 0:6bd25809e2e0 43
lawliet 0:6bd25809e2e0 44 struct MotorStruct {
lawliet 0:6bd25809e2e0 45 uint8_t speed;
lawliet 0:6bd25809e2e0 46 uint8_t direction;
lawliet 0:6bd25809e2e0 47 uint8_t position;
lawliet 0:6bd25809e2e0 48 };
lawliet 0:6bd25809e2e0 49
lawliet 0:6bd25809e2e0 50 /** Motor Driver class.
lawliet 0:6bd25809e2e0 51 * offer API to control the movement of motor
lawliet 0:6bd25809e2e0 52 */
lawliet 0:6bd25809e2e0 53 class MotorDriver
lawliet 0:6bd25809e2e0 54 {
lawliet 0:6bd25809e2e0 55
lawliet 0:6bd25809e2e0 56 public:
lawliet 0:6bd25809e2e0 57
lawliet 0:6bd25809e2e0 58 /** Create Motor Driver instance
lawliet 0:6bd25809e2e0 59 * @param int1 pin 1 of motor movement control
lawliet 0:6bd25809e2e0 60 * @param int2 pin 2 of motor movement control
lawliet 0:6bd25809e2e0 61 * @param int3 pin 3 of motor movement control
lawliet 0:6bd25809e2e0 62 * @param int4 pin 4 of motor movement control
lawliet 0:6bd25809e2e0 63 @param speedA speed control of motorA
lawliet 0:6bd25809e2e0 64 @param speedB speed control of motorB
lawliet 0:6bd25809e2e0 65 */
lawliet 0:6bd25809e2e0 66 MotorDriver(PinName int1, PinName int2, PinName int3, PinName int4, PinName speedA, PinName speedB):_int1(int1),_int2(int2),_int3(int3),_int4(int4),_speedA(speedA),_speedB(speedB) {
lawliet 0:6bd25809e2e0 67 _int1 = 0;
lawliet 0:6bd25809e2e0 68 _int2 = 0;
lawliet 0:6bd25809e2e0 69 _int3 = 0;
lawliet 0:6bd25809e2e0 70 _int4 = 0;
lawliet 0:6bd25809e2e0 71 };
lawliet 0:6bd25809e2e0 72
lawliet 0:6bd25809e2e0 73 /** set motor to initialized state
lawliet 0:6bd25809e2e0 74 */
lawliet 0:6bd25809e2e0 75 void init();
lawliet 0:6bd25809e2e0 76
lawliet 0:6bd25809e2e0 77 /** config position of motor
lawliet 0:6bd25809e2e0 78 * @param position the position set to motor,MOTOR_POSITION_LEFT or MOTOR_POSITION_RIGHT will be allowed
lawliet 0:6bd25809e2e0 79 * @param motorID the ID define which motor will be set, you can choose MOTORA or MOTORB
lawliet 0:6bd25809e2e0 80 */
lawliet 0:6bd25809e2e0 81 void configure(uint8_t position, uint8_t motorID);
lawliet 0:6bd25809e2e0 82
lawliet 0:6bd25809e2e0 83 /** set speed of motor
lawliet 0:6bd25809e2e0 84 * @param speed speed value set to motor, [0,100] will be allowed
lawliet 0:6bd25809e2e0 85 * @param motorID the ID define which motor will be set, you can choose MOTORA or MOTORB
lawliet 0:6bd25809e2e0 86 */
lawliet 0:6bd25809e2e0 87 void setSpeed(uint8_t speed, uint8_t motorID);
lawliet 0:6bd25809e2e0 88
lawliet 0:6bd25809e2e0 89 /** set direction of motor,
lawliet 0:6bd25809e2e0 90 * @param direction the direction of motor, MOTOR_CLOCKWISE or MOTOR_ANTICLOCKWISE will be allowed
lawliet 0:6bd25809e2e0 91 * @param motorID the ID define which motor will be set, you can choose MOTORA or MOTORB
lawliet 0:6bd25809e2e0 92 */
lawliet 0:6bd25809e2e0 93 void setDirection(uint8_t direction, uint8_t motorID);
lawliet 0:6bd25809e2e0 94
lawliet 0:6bd25809e2e0 95 /** rotate motor
lawliet 0:6bd25809e2e0 96 * @param direction the direction set to motor, MOTOR_CLOCKWISE or MOTOR_ANTICLOCKWISE will be allowed
lawliet 0:6bd25809e2e0 97 * @param motor_position the position set to motor,MOTOR_POSITION_LEFT or MOTOR_POSITION_RIGHT will be allowed
lawliet 0:6bd25809e2e0 98 */
lawliet 0:6bd25809e2e0 99 void rotate(uint8_t direction, uint8_t motor_position);
lawliet 0:6bd25809e2e0 100
lawliet 0:6bd25809e2e0 101 /** rotate motorA or motorB
lawliet 0:6bd25809e2e0 102 * @param direction the direction set to motor, MOTOR_CLOCKWISE or MOTOR_ANTICLOCKWISE will be allowed
lawliet 0:6bd25809e2e0 103 * @param motorID the ID define which motor will be set, you can choose MOTORA or MOTORB
lawliet 0:6bd25809e2e0 104 */
lawliet 0:6bd25809e2e0 105 void rotateWithID(uint8_t direction, uint8_t motorID);
lawliet 0:6bd25809e2e0 106
lawliet 0:6bd25809e2e0 107 /** make motor go forward
lawliet 0:6bd25809e2e0 108 */
lawliet 0:6bd25809e2e0 109 void goForward();
lawliet 0:6bd25809e2e0 110
lawliet 0:6bd25809e2e0 111 /** make motor go backward
lawliet 0:6bd25809e2e0 112 */
lawliet 0:6bd25809e2e0 113 void goBackward();
lawliet 0:6bd25809e2e0 114
lawliet 0:6bd25809e2e0 115 /** make motor go left
lawliet 0:6bd25809e2e0 116 */
lawliet 0:6bd25809e2e0 117 void goLeft();
lawliet 0:6bd25809e2e0 118
lawliet 0:6bd25809e2e0 119 /** make motor go right
lawliet 0:6bd25809e2e0 120 */
lawliet 0:6bd25809e2e0 121 void goRight();
lawliet 0:6bd25809e2e0 122
lawliet 0:6bd25809e2e0 123 /** make motor stop
lawliet 0:6bd25809e2e0 124 */
lawliet 0:6bd25809e2e0 125 void stop();
lawliet 0:6bd25809e2e0 126
lawliet 0:6bd25809e2e0 127 /** make motorA or motorB stop
lawliet 0:6bd25809e2e0 128 * @param motorID the ID define which motor will be set, you can choose MOTORA or MOTORB
lawliet 0:6bd25809e2e0 129 */
lawliet 0:6bd25809e2e0 130 void stop(uint8_t motorID);
lawliet 0:6bd25809e2e0 131
lawliet 0:6bd25809e2e0 132 /** motor A
lawliet 0:6bd25809e2e0 133 */
lawliet 0:6bd25809e2e0 134 MotorStruct motorA;
lawliet 0:6bd25809e2e0 135
lawliet 0:6bd25809e2e0 136 /** motor B
lawliet 0:6bd25809e2e0 137 */
lawliet 0:6bd25809e2e0 138 MotorStruct motorB;
lawliet 0:6bd25809e2e0 139
lawliet 0:6bd25809e2e0 140 private:
lawliet 0:6bd25809e2e0 141
lawliet 0:6bd25809e2e0 142 DigitalOut _int1;
lawliet 0:6bd25809e2e0 143 DigitalOut _int2;
lawliet 0:6bd25809e2e0 144 DigitalOut _int3;
lawliet 0:6bd25809e2e0 145 DigitalOut _int4;
lawliet 0:6bd25809e2e0 146 SoftwarePWM _speedA;
lawliet 0:6bd25809e2e0 147 SoftwarePWM _speedB;
lawliet 0:6bd25809e2e0 148 };
lawliet 0:6bd25809e2e0 149 #endif