Adafruit-MotorShield
Dependents: Adafruit-MortorShield_sample Low_Power_Long_Distance_IR_Vision_Robot Low_Power_Long_Distance_IR_Vision_Robot
Adafruit_MotorShield.h@0:3d17b246f7fe, 2014-10-15 (annotated)
- Committer:
- robo8080
- Date:
- Wed Oct 15 02:16:15 2014 +0000
- Revision:
- 0:3d17b246f7fe
test1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
robo8080 | 0:3d17b246f7fe | 1 | /****************************************************************** |
robo8080 | 0:3d17b246f7fe | 2 | This is the library for the Adafruit Motor Shield V2 for Arduino. |
robo8080 | 0:3d17b246f7fe | 3 | It supports DC motors & Stepper motors with microstepping as well |
robo8080 | 0:3d17b246f7fe | 4 | as stacking-support. It is *not* compatible with the V1 library! |
robo8080 | 0:3d17b246f7fe | 5 | |
robo8080 | 0:3d17b246f7fe | 6 | It will only work with https://www.adafruit.com/products/1483 |
robo8080 | 0:3d17b246f7fe | 7 | |
robo8080 | 0:3d17b246f7fe | 8 | Adafruit invests time and resources providing this open |
robo8080 | 0:3d17b246f7fe | 9 | source code, please support Adafruit and open-source hardware |
robo8080 | 0:3d17b246f7fe | 10 | by purchasing products from Adafruit! |
robo8080 | 0:3d17b246f7fe | 11 | |
robo8080 | 0:3d17b246f7fe | 12 | Written by Limor Fried/Ladyada for Adafruit Industries. |
robo8080 | 0:3d17b246f7fe | 13 | BSD license, check license.txt for more information. |
robo8080 | 0:3d17b246f7fe | 14 | All text above must be included in any redistribution. |
robo8080 | 0:3d17b246f7fe | 15 | ******************************************************************/ |
robo8080 | 0:3d17b246f7fe | 16 | |
robo8080 | 0:3d17b246f7fe | 17 | #ifndef _Adafruit_MotorShield_h_ |
robo8080 | 0:3d17b246f7fe | 18 | #define _Adafruit_MotorShield_h_ |
robo8080 | 0:3d17b246f7fe | 19 | |
robo8080 | 0:3d17b246f7fe | 20 | //#include <inttypes.h> |
robo8080 | 0:3d17b246f7fe | 21 | //#include <Wire.h> |
robo8080 | 0:3d17b246f7fe | 22 | //#include "utility/Adafruit_PWMServoDriver.h" |
robo8080 | 0:3d17b246f7fe | 23 | #include "Adafruit_PWMServoDriver.h" |
robo8080 | 0:3d17b246f7fe | 24 | |
robo8080 | 0:3d17b246f7fe | 25 | //#define MOTORDEBUG |
robo8080 | 0:3d17b246f7fe | 26 | |
robo8080 | 0:3d17b246f7fe | 27 | #define MICROSTEPS 16 // 8 or 16 |
robo8080 | 0:3d17b246f7fe | 28 | |
robo8080 | 0:3d17b246f7fe | 29 | #define MOTOR1_A 2 |
robo8080 | 0:3d17b246f7fe | 30 | #define MOTOR1_B 3 |
robo8080 | 0:3d17b246f7fe | 31 | #define MOTOR2_A 1 |
robo8080 | 0:3d17b246f7fe | 32 | #define MOTOR2_B 4 |
robo8080 | 0:3d17b246f7fe | 33 | #define MOTOR4_A 0 |
robo8080 | 0:3d17b246f7fe | 34 | #define MOTOR4_B 6 |
robo8080 | 0:3d17b246f7fe | 35 | #define MOTOR3_A 5 |
robo8080 | 0:3d17b246f7fe | 36 | #define MOTOR3_B 7 |
robo8080 | 0:3d17b246f7fe | 37 | |
robo8080 | 0:3d17b246f7fe | 38 | #define FORWARD 1 |
robo8080 | 0:3d17b246f7fe | 39 | #define BACKWARD 2 |
robo8080 | 0:3d17b246f7fe | 40 | #define BRAKE 3 |
robo8080 | 0:3d17b246f7fe | 41 | #define RELEASE 4 |
robo8080 | 0:3d17b246f7fe | 42 | |
robo8080 | 0:3d17b246f7fe | 43 | #define SINGLE 1 |
robo8080 | 0:3d17b246f7fe | 44 | #define DOUBLE 2 |
robo8080 | 0:3d17b246f7fe | 45 | #define INTERLEAVE 3 |
robo8080 | 0:3d17b246f7fe | 46 | #define MICROSTEP 4 |
robo8080 | 0:3d17b246f7fe | 47 | |
robo8080 | 0:3d17b246f7fe | 48 | class Adafruit_MotorShield; |
robo8080 | 0:3d17b246f7fe | 49 | |
robo8080 | 0:3d17b246f7fe | 50 | class Adafruit_DCMotor |
robo8080 | 0:3d17b246f7fe | 51 | { |
robo8080 | 0:3d17b246f7fe | 52 | public: |
robo8080 | 0:3d17b246f7fe | 53 | Adafruit_DCMotor(void); |
robo8080 | 0:3d17b246f7fe | 54 | friend class Adafruit_MotorShield; |
robo8080 | 0:3d17b246f7fe | 55 | void run(uint8_t); |
robo8080 | 0:3d17b246f7fe | 56 | void setSpeed(uint8_t); |
robo8080 | 0:3d17b246f7fe | 57 | |
robo8080 | 0:3d17b246f7fe | 58 | private: |
robo8080 | 0:3d17b246f7fe | 59 | uint8_t PWMpin, IN1pin, IN2pin; |
robo8080 | 0:3d17b246f7fe | 60 | Adafruit_MotorShield *MC; |
robo8080 | 0:3d17b246f7fe | 61 | uint8_t motornum; |
robo8080 | 0:3d17b246f7fe | 62 | }; |
robo8080 | 0:3d17b246f7fe | 63 | |
robo8080 | 0:3d17b246f7fe | 64 | class Adafruit_StepperMotor { |
robo8080 | 0:3d17b246f7fe | 65 | public: |
robo8080 | 0:3d17b246f7fe | 66 | Adafruit_StepperMotor(void); |
robo8080 | 0:3d17b246f7fe | 67 | friend class Adafruit_MotorShield; |
robo8080 | 0:3d17b246f7fe | 68 | |
robo8080 | 0:3d17b246f7fe | 69 | void step(uint16_t steps, uint8_t dir, uint8_t style = SINGLE); |
robo8080 | 0:3d17b246f7fe | 70 | void setSpeed(uint16_t); |
robo8080 | 0:3d17b246f7fe | 71 | uint8_t onestep(uint8_t dir, uint8_t style); |
robo8080 | 0:3d17b246f7fe | 72 | void release(void); |
robo8080 | 0:3d17b246f7fe | 73 | uint32_t usperstep, steppingcounter; |
robo8080 | 0:3d17b246f7fe | 74 | |
robo8080 | 0:3d17b246f7fe | 75 | private: |
robo8080 | 0:3d17b246f7fe | 76 | uint8_t PWMApin, AIN1pin, AIN2pin; |
robo8080 | 0:3d17b246f7fe | 77 | uint8_t PWMBpin, BIN1pin, BIN2pin; |
robo8080 | 0:3d17b246f7fe | 78 | uint16_t revsteps; // # steps per revolution |
robo8080 | 0:3d17b246f7fe | 79 | uint8_t currentstep; |
robo8080 | 0:3d17b246f7fe | 80 | Adafruit_MotorShield *MC; |
robo8080 | 0:3d17b246f7fe | 81 | uint8_t steppernum; |
robo8080 | 0:3d17b246f7fe | 82 | }; |
robo8080 | 0:3d17b246f7fe | 83 | |
robo8080 | 0:3d17b246f7fe | 84 | class Adafruit_MotorShield |
robo8080 | 0:3d17b246f7fe | 85 | { |
robo8080 | 0:3d17b246f7fe | 86 | public: |
robo8080 | 0:3d17b246f7fe | 87 | // Adafruit_MotorShield(uint8_t addr = 0x60); |
robo8080 | 0:3d17b246f7fe | 88 | Adafruit_MotorShield(PinName sda, PinName scl, uint8_t addr = 0x60 << 1); |
robo8080 | 0:3d17b246f7fe | 89 | friend class Adafruit_DCMotor; |
robo8080 | 0:3d17b246f7fe | 90 | void begin(uint16_t freq = 1600); |
robo8080 | 0:3d17b246f7fe | 91 | |
robo8080 | 0:3d17b246f7fe | 92 | void setPWM(uint8_t pin, uint16_t val); |
robo8080 | 0:3d17b246f7fe | 93 | // void setPin(uint8_t pin, boolean val); |
robo8080 | 0:3d17b246f7fe | 94 | void setPin(uint8_t pin, uint16_t val); |
robo8080 | 0:3d17b246f7fe | 95 | Adafruit_DCMotor *getMotor(uint8_t n); |
robo8080 | 0:3d17b246f7fe | 96 | Adafruit_StepperMotor *getStepper(uint16_t steps, uint8_t n); |
robo8080 | 0:3d17b246f7fe | 97 | private: |
robo8080 | 0:3d17b246f7fe | 98 | uint8_t _addr; |
robo8080 | 0:3d17b246f7fe | 99 | uint16_t _freq; |
robo8080 | 0:3d17b246f7fe | 100 | Adafruit_DCMotor dcmotors[4]; |
robo8080 | 0:3d17b246f7fe | 101 | Adafruit_StepperMotor steppers[2]; |
robo8080 | 0:3d17b246f7fe | 102 | Adafruit_PWMServoDriver _pwm; |
robo8080 | 0:3d17b246f7fe | 103 | }; |
robo8080 | 0:3d17b246f7fe | 104 | |
robo8080 | 0:3d17b246f7fe | 105 | #endif |