Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MotorDriver by
MotorDriver.h@1:9c93f514f369, 2014-02-12 (annotated)
- 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?
User | Revision | Line number | New 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 |