Adafruit-MotorShield

Dependents:   Adafruit-MortorShield_sample Low_Power_Long_Distance_IR_Vision_Robot Low_Power_Long_Distance_IR_Vision_Robot

Committer:
robo8080
Date:
Wed Oct 15 02:16:15 2014 +0000
Revision:
0:3d17b246f7fe
test1

Who changed what in which revision?

UserRevisionLine numberNew 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