This is a library for the PCA9685 ported from the Adafruit Ardiuno library.

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?

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