38 explicit PCA9685(uint8_t address = 0x40,
40 TwoWire *wire = &Wire)
43 SUPLA_LOG_ERROR(
"Unable to find PCA9685 at address 0x%x", address);
45 SUPLA_LOG_DEBUG(
"PCA9685 is connected at address: 0x%x, "
46 "with PWM freq: %d Hz", address, pca_.getFrequency());
50 void customPinMode(
int channelNumber, uint8_t pin, uint8_t mode)
override {
52 void customDigitalWrite(
int channelNumber, uint8_t pin,
53 uint8_t val)
override {
54 if (mutex_) mutex_->lock();
55 if (pca_.isConnected()) {
56 pca_.write1(pin, val);
58 if (mutex_) mutex_->unlock();
60 int customDigitalRead(
int channelNumber, uint8_t pin)
override {
62 if (mutex_) mutex_->lock();
63 if (pca_.isConnected()) {
64 val = pca_.read1(pin);
66 if (mutex_) mutex_->unlock();
67 return (val == 1) ? 1 : 0;
69 unsigned int customPulseIn(
int channelNumber, uint8_t pin, uint8_t value,
70 uint64_t timeoutMicro)
override {
73 void customAnalogWrite(
int channelNumber, uint8_t pin,
int val)
override {
74 if (mutex_) mutex_->lock();
75 if (pca_.isConnected()) {
76 val = map(val, 0, 1023, 0, 4095);
77 pca_.setPWM(pin, val);
79 if (mutex_) mutex_->unlock();
82 int customAnalogRead(
int channelNumber, uint8_t pin)
override {
87 void setPWMFrequency(uint16_t frequency) {
88 if (mutex_) mutex_->lock();
89 if (pca_.isConnected()) {
90 pca_.setFrequency(frequency);
91 SUPLA_LOG_DEBUG(
"[PCA9685] set PWM frequency: %d Hz",
94 if (mutex_) mutex_->unlock();