1+ #pragma once
2+
3+ #define PCA9685_SUBADR1 0x2 /* *< i2c bus address 1 */
4+ #define PCA9685_SUBADR2 0x3 /* *< i2c bus address 2 */
5+ #define PCA9685_SUBADR3 0x4 /* *< i2c bus address 3 */
6+
7+ #define PCA9685_MODE1 0x0 /* *< Mode Register 1 */
8+ #define PCA9685_MODE2 0x1 /* *< Mode Register 2 */
9+ #define PCA9685_PRESCALE 0xFE /* *< Prescaler for PWM output frequency */
10+
11+ #define LED0_ON_L 0x6 /* *< LED0 output and brightness control byte 0 */
12+ #define LED0_ON_H 0x7 /* *< LED0 output and brightness control byte 1 */
13+ #define LED0_OFF_L 0x8 /* *< LED0 output and brightness control byte 2 */
14+ #define LED0_OFF_H 0x9 /* *< LED0 output and brightness control byte 3 */
15+
16+ #define ALLLED_ON_L 0xFA /* *< load all the LEDn_ON registers, byte 0 */
17+ #define ALLLED_ON_H 0xFB /* *< load all the LEDn_ON registers, byte 1 */
18+ #define ALLLED_OFF_L 0xFC /* *< load all the LEDn_OFF registers, byte 0 */
19+ #define ALLLED_OFF_H 0xFD /* *< load all the LEDn_OFF registers, byte 1 */
20+
21+ class Adafruit_PWMServoDriver {
22+ public:
23+ Adafruit_PWMServoDriver (uint8_t addr = 0x40 , void *I2C = nullptr ) : _i2caddr(addr), _i2c(I2C) {}
24+ ~Adafruit_PWMServoDriver ();
25+
26+
27+
28+ void begin (uint8_t prescale = 0 ) {}
29+ void reset () {}
30+ void sleep () {}
31+ void wakeup () {}
32+ void setExtClk (uint8_t prescale) {}
33+ void setPWMFreq (float freq) { _freq = freq; }
34+ void setOutputMode (bool totempole) { _outputMode = totempole; }
35+ uint8_t getPWM (uint8_t num) { return (_pwmOff[num] - _pwmOn[num]) / (4096 /256 ); }
36+ void setPWM (uint8_t num, uint16_t on, uint16_t off) { _pwmOn[num] = on; _pwmOff[num] = off; }
37+ void setPin (uint8_t num, uint16_t val, bool invert=false );
38+
39+ public:
40+ std::array<uint16_t , 16 > _pwmOn;
41+ std::array<uint16_t , 16 > _pwmOff;
42+ float _freq;
43+ bool _outputMode;
44+
45+ private:
46+ void *_i2c;
47+ uint8_t _i2caddr;
48+ };
0 commit comments