This is a library for the PCA9685 ported from the Adafruit Ardiuno library.
PCA9685Lib.h@0:1ecf26e0cf3c, 2015-02-13 (annotated)
- Committer:
- rvasquez6089
- Date:
- Fri Feb 13 22:02:35 2015 +0000
- Revision:
- 0:1ecf26e0cf3c
- Child:
- 1:f1b17f9d387e
This is the first Revision of the PCA9685 Library.; I have ported this library from the Adafruit PWM Servo Library and added 1 new feature.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rvasquez6089 | 0:1ecf26e0cf3c | 1 | /*************************************************** |
rvasquez6089 | 0:1ecf26e0cf3c | 2 | This is a library for our Adafruit 16-channel PWM & Servo driver |
rvasquez6089 | 0:1ecf26e0cf3c | 3 | |
rvasquez6089 | 0:1ecf26e0cf3c | 4 | Pick one up today in the adafruit shop! |
rvasquez6089 | 0:1ecf26e0cf3c | 5 | ------> http://www.adafruit.com/products/815 |
rvasquez6089 | 0:1ecf26e0cf3c | 6 | |
rvasquez6089 | 0:1ecf26e0cf3c | 7 | These displays use I2C to communicate, 2 pins are required to |
rvasquez6089 | 0:1ecf26e0cf3c | 8 | interface. For Arduino UNOs, thats SCL -> Analog 5, SDA -> Analog 4 |
rvasquez6089 | 0:1ecf26e0cf3c | 9 | |
rvasquez6089 | 0:1ecf26e0cf3c | 10 | Adafruit invests time and resources providing this open source code, |
rvasquez6089 | 0:1ecf26e0cf3c | 11 | please support Adafruit and open-source hardware by purchasing |
rvasquez6089 | 0:1ecf26e0cf3c | 12 | products from Adafruit! |
rvasquez6089 | 0:1ecf26e0cf3c | 13 | |
rvasquez6089 | 0:1ecf26e0cf3c | 14 | Written by Limor Fried/Ladyada for Adafruit Industries. |
rvasquez6089 | 0:1ecf26e0cf3c | 15 | BSD license, all text above must be included in any redistribution |
rvasquez6089 | 0:1ecf26e0cf3c | 16 | ****************************************************/ |
rvasquez6089 | 0:1ecf26e0cf3c | 17 | |
rvasquez6089 | 0:1ecf26e0cf3c | 18 | /***************************** |
rvasquez6089 | 0:1ecf26e0cf3c | 19 | This program was ported from https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library. |
rvasquez6089 | 0:1ecf26e0cf3c | 20 | I also added some functions. |
rvasquez6089 | 0:1ecf26e0cf3c | 21 | Shundo Kishi |
rvasquez6089 | 0:1ecf26e0cf3c | 22 | *****************************/ |
rvasquez6089 | 0:1ecf26e0cf3c | 23 | |
rvasquez6089 | 0:1ecf26e0cf3c | 24 | #ifndef _ADAFRUIT_PWMServoDriver_H |
rvasquez6089 | 0:1ecf26e0cf3c | 25 | #define _ADAFRUIT_PWMServoDriver_H |
rvasquez6089 | 0:1ecf26e0cf3c | 26 | |
rvasquez6089 | 0:1ecf26e0cf3c | 27 | #include "mbed.h" |
rvasquez6089 | 0:1ecf26e0cf3c | 28 | #include <cmath> |
rvasquez6089 | 0:1ecf26e0cf3c | 29 | |
rvasquez6089 | 0:1ecf26e0cf3c | 30 | #define PCA9685_SUBADR1 0x2 |
rvasquez6089 | 0:1ecf26e0cf3c | 31 | #define PCA9685_SUBADR2 0x3 |
rvasquez6089 | 0:1ecf26e0cf3c | 32 | #define PCA9685_SUBADR3 0x4 |
rvasquez6089 | 0:1ecf26e0cf3c | 33 | |
rvasquez6089 | 0:1ecf26e0cf3c | 34 | #define PCA9685_MODE1 0x0 |
rvasquez6089 | 0:1ecf26e0cf3c | 35 | #define PCA9685_PRESCALE 0xFE |
rvasquez6089 | 0:1ecf26e0cf3c | 36 | |
rvasquez6089 | 0:1ecf26e0cf3c | 37 | #define LED0_ON_L 0x6 |
rvasquez6089 | 0:1ecf26e0cf3c | 38 | #define LED0_ON_H 0x7 |
rvasquez6089 | 0:1ecf26e0cf3c | 39 | #define LED0_OFF_L 0x8 |
rvasquez6089 | 0:1ecf26e0cf3c | 40 | #define LED0_OFF_H 0x9 |
rvasquez6089 | 0:1ecf26e0cf3c | 41 | |
rvasquez6089 | 0:1ecf26e0cf3c | 42 | #define ALLLED_ON_L 0xFA |
rvasquez6089 | 0:1ecf26e0cf3c | 43 | #define ALLLED_ON_H 0xFB |
rvasquez6089 | 0:1ecf26e0cf3c | 44 | #define ALLLED_OFF_L 0xFC |
rvasquez6089 | 0:1ecf26e0cf3c | 45 | #define ALLLED_OFF_H 0xFD |
rvasquez6089 | 0:1ecf26e0cf3c | 46 | class PCA9685Lib; //Forward declaration |
rvasquez6089 | 0:1ecf26e0cf3c | 47 | struct LEDarr |
rvasquez6089 | 0:1ecf26e0cf3c | 48 | { |
rvasquez6089 | 0:1ecf26e0cf3c | 49 | uint8_t LEDnum; |
rvasquez6089 | 0:1ecf26e0cf3c | 50 | PCA9685Lib* PCALib; |
rvasquez6089 | 0:1ecf26e0cf3c | 51 | void operator= (uint16_t duty); |
rvasquez6089 | 0:1ecf26e0cf3c | 52 | }; |
rvasquez6089 | 0:1ecf26e0cf3c | 53 | |
rvasquez6089 | 0:1ecf26e0cf3c | 54 | class PCA9685Lib { |
rvasquez6089 | 0:1ecf26e0cf3c | 55 | public: |
rvasquez6089 | 0:1ecf26e0cf3c | 56 | PCA9685Lib(I2C i2cobj, int addr = 0x80); //0b 1_000000_(R/W) <- default slave adress |
rvasquez6089 | 0:1ecf26e0cf3c | 57 | void i2c_probe(void); |
rvasquez6089 | 0:1ecf26e0cf3c | 58 | void begin(void); |
rvasquez6089 | 0:1ecf26e0cf3c | 59 | void setI2Cfreq(int freq); |
rvasquez6089 | 0:1ecf26e0cf3c | 60 | void reset(void); |
rvasquez6089 | 0:1ecf26e0cf3c | 61 | void setPWMFreq(float freq); |
rvasquez6089 | 0:1ecf26e0cf3c | 62 | void setPrescale(uint8_t prescale); |
rvasquez6089 | 0:1ecf26e0cf3c | 63 | void setPWM(uint8_t num, uint16_t on, uint16_t off); |
rvasquez6089 | 0:1ecf26e0cf3c | 64 | void setDuty(uint8_t num, uint16_t duty); |
rvasquez6089 | 0:1ecf26e0cf3c | 65 | void operator[](int i); |
rvasquez6089 | 0:1ecf26e0cf3c | 66 | LEDarr LED[15]; |
rvasquez6089 | 0:1ecf26e0cf3c | 67 | private: |
rvasquez6089 | 0:1ecf26e0cf3c | 68 | int _i2caddr; |
rvasquez6089 | 0:1ecf26e0cf3c | 69 | I2C i2c; |
rvasquez6089 | 0:1ecf26e0cf3c | 70 | |
rvasquez6089 | 0:1ecf26e0cf3c | 71 | uint8_t read8(char addr); |
rvasquez6089 | 0:1ecf26e0cf3c | 72 | void write8(char addr, char d); |
rvasquez6089 | 0:1ecf26e0cf3c | 73 | }; |
rvasquez6089 | 0:1ecf26e0cf3c | 74 | |
rvasquez6089 | 0:1ecf26e0cf3c | 75 | |
rvasquez6089 | 0:1ecf26e0cf3c | 76 | #endif |