This is a library for the PCA9685 ported from the Adafruit Ardiuno library.
PCA9685Lib.h@1:f1b17f9d387e, 2015-02-13 (annotated)
- Committer:
- rvasquez6089
- Date:
- Fri Feb 13 23:26:00 2015 +0000
- Revision:
- 1:f1b17f9d387e
- Parent:
- 0:1ecf26e0cf3c
- Child:
- 2:ec40a85eba51
testing documentation;
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 | 1:f1b17f9d387e | 46 | |
rvasquez6089 | 1:f1b17f9d387e | 47 | |
rvasquez6089 | 1:f1b17f9d387e | 48 | |
rvasquez6089 | 1:f1b17f9d387e | 49 | /** An analog input, used for reading the voltage on a pin |
rvasquez6089 | 1:f1b17f9d387e | 50 | * |
rvasquez6089 | 1:f1b17f9d387e | 51 | * Example: |
rvasquez6089 | 1:f1b17f9d387e | 52 | * @code |
rvasquez6089 | 1:f1b17f9d387e | 53 | * // Print messages when the AnalogIn is greater than 50% |
rvasquez6089 | 1:f1b17f9d387e | 54 | * |
rvasquez6089 | 1:f1b17f9d387e | 55 | * #include "mbed.h" |
rvasquez6089 | 1:f1b17f9d387e | 56 | * |
rvasquez6089 | 1:f1b17f9d387e | 57 | * AnalogIn temperature(p20); |
rvasquez6089 | 1:f1b17f9d387e | 58 | * |
rvasquez6089 | 1:f1b17f9d387e | 59 | * int main() { |
rvasquez6089 | 1:f1b17f9d387e | 60 | * while(1) { |
rvasquez6089 | 1:f1b17f9d387e | 61 | * if(temperature > 0.5) { |
rvasquez6089 | 1:f1b17f9d387e | 62 | * printf("Too hot! (%f)", temperature.read()); |
rvasquez6089 | 1:f1b17f9d387e | 63 | * } |
rvasquez6089 | 1:f1b17f9d387e | 64 | * } |
rvasquez6089 | 1:f1b17f9d387e | 65 | * } |
rvasquez6089 | 1:f1b17f9d387e | 66 | * @endcode |
rvasquez6089 | 1:f1b17f9d387e | 67 | */ |
rvasquez6089 | 0:1ecf26e0cf3c | 68 | class PCA9685Lib; //Forward declaration |
rvasquez6089 | 0:1ecf26e0cf3c | 69 | struct LEDarr |
rvasquez6089 | 0:1ecf26e0cf3c | 70 | { |
rvasquez6089 | 1:f1b17f9d387e | 71 | /** Create an PCA9685 object, pass in an I2C object and the PCA9685 device address |
rvasquez6089 | 1:f1b17f9d387e | 72 | * The default address is 0x80 |
rvasquez6089 | 1:f1b17f9d387e | 73 | * @param i2cobj PCA9685Lib pin to connect to |
rvasquez6089 | 1:f1b17f9d387e | 74 | * @param name (optional) A string to identify the object |
rvasquez6089 | 1:f1b17f9d387e | 75 | */ |
rvasquez6089 | 0:1ecf26e0cf3c | 76 | uint8_t LEDnum; |
rvasquez6089 | 0:1ecf26e0cf3c | 77 | PCA9685Lib* PCALib; |
rvasquez6089 | 0:1ecf26e0cf3c | 78 | void operator= (uint16_t duty); |
rvasquez6089 | 0:1ecf26e0cf3c | 79 | }; |
rvasquez6089 | 0:1ecf26e0cf3c | 80 | |
rvasquez6089 | 0:1ecf26e0cf3c | 81 | class PCA9685Lib { |
rvasquez6089 | 0:1ecf26e0cf3c | 82 | public: |
rvasquez6089 | 1:f1b17f9d387e | 83 | /** Create an PCA9685 object, pass in an I2C object and the PCA9685 device address |
rvasquez6089 | 1:f1b17f9d387e | 84 | * The default address is 0x80 |
rvasquez6089 | 1:f1b17f9d387e | 85 | * @param i2cobj PCA9685Lib pin to connect to |
rvasquez6089 | 1:f1b17f9d387e | 86 | * @param name (optional) A string to identify the object |
rvasquez6089 | 1:f1b17f9d387e | 87 | */ |
rvasquez6089 | 0:1ecf26e0cf3c | 88 | PCA9685Lib(I2C i2cobj, int addr = 0x80); //0b 1_000000_(R/W) <- default slave adress |
rvasquez6089 | 0:1ecf26e0cf3c | 89 | void i2c_probe(void); |
rvasquez6089 | 0:1ecf26e0cf3c | 90 | void begin(void); |
rvasquez6089 | 0:1ecf26e0cf3c | 91 | void setI2Cfreq(int freq); |
rvasquez6089 | 0:1ecf26e0cf3c | 92 | void reset(void); |
rvasquez6089 | 0:1ecf26e0cf3c | 93 | void setPWMFreq(float freq); |
rvasquez6089 | 0:1ecf26e0cf3c | 94 | void setPrescale(uint8_t prescale); |
rvasquez6089 | 0:1ecf26e0cf3c | 95 | void setPWM(uint8_t num, uint16_t on, uint16_t off); |
rvasquez6089 | 0:1ecf26e0cf3c | 96 | void setDuty(uint8_t num, uint16_t duty); |
rvasquez6089 | 0:1ecf26e0cf3c | 97 | void operator[](int i); |
rvasquez6089 | 0:1ecf26e0cf3c | 98 | LEDarr LED[15]; |
rvasquez6089 | 0:1ecf26e0cf3c | 99 | private: |
rvasquez6089 | 0:1ecf26e0cf3c | 100 | int _i2caddr; |
rvasquez6089 | 0:1ecf26e0cf3c | 101 | I2C i2c; |
rvasquez6089 | 0:1ecf26e0cf3c | 102 | |
rvasquez6089 | 0:1ecf26e0cf3c | 103 | uint8_t read8(char addr); |
rvasquez6089 | 0:1ecf26e0cf3c | 104 | void write8(char addr, char d); |
rvasquez6089 | 0:1ecf26e0cf3c | 105 | }; |
rvasquez6089 | 0:1ecf26e0cf3c | 106 | |
rvasquez6089 | 0:1ecf26e0cf3c | 107 | |
rvasquez6089 | 0:1ecf26e0cf3c | 108 | #endif |