23 explicit PCA9685(uint8_t address = 0x40,
25 TwoWire *wire = &Wire)
28 SUPLA_LOG_ERROR(
"Unable to find PCA9685 at address 0x%x", address);
30 SUPLA_LOG_DEBUG(
"PCA9685 is connected at address: 0x%x, "
31 "with PWM freq: %d Hz", address, pca_.getFrequency());
35 void customPinMode(
int channelNumber, uint8_t pin, uint8_t mode)
override {
37 void customDigitalWrite(
int channelNumber, uint8_t pin,
38 uint8_t val)
override {
39 if (mutex_) mutex_->lock();
40 if (pca_.isConnected()) {
41 pca_.write1(pin, val);
43 if (mutex_) mutex_->unlock();
45 int customDigitalRead(
int channelNumber, uint8_t pin)
override {
47 if (mutex_) mutex_->lock();
48 if (pca_.isConnected()) {
49 val = pca_.read1(pin);
51 if (mutex_) mutex_->unlock();
52 return (val == 1) ? 1 : 0;
54 unsigned int customPulseIn(
int channelNumber, uint8_t pin, uint8_t value,
55 uint64_t timeoutMicro)
override {
58 void customAnalogWrite(
int channelNumber, uint8_t pin,
int val)
override {
59 if (mutex_) mutex_->lock();
60 if (pca_.isConnected()) {
61 val = map(val, 0, 1023, 0, 4095);
62 pca_.setPWM(pin, val);
64 if (mutex_) mutex_->unlock();
67 int customAnalogRead(
int channelNumber, uint8_t pin)
override {
72 void setPWMFrequency(uint16_t frequency) {
73 if (mutex_) mutex_->lock();
74 if (pca_.isConnected()) {
75 pca_.setFrequency(frequency);
76 SUPLA_LOG_DEBUG(
"[PCA9685] set PWM frequency: %d Hz",
79 if (mutex_) mutex_->unlock();