DFRobot_MCP23017 - co robię źle?

User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

Chciałbym dodać klasę ekspandera na bazie biblioteki DFRobot'a , ale niestety nie chce mi to działać. Kompiluje się, wykrywa ekspandery i tyle, żadnej reakcji z ich strony.

Spójrzcie proszę, czy poprawnie tworzę klasę

Code: Select all

#ifndef SRC_SUPLA_CONTROL_EXT2_MCP23017_H_
#define SRC_SUPLA_CONTROL_EXT2_MCP23017_H_

/*
Dependency: https://github.com/DFRobot/DFRobot_MCP23017,
use library manager to install it
*/

#include <DFRobot_MCP23017.h>
#include <supla/io.h>

namespace Supla {
namespace Control {
	
class Ext2MCP23017 : public Supla::Io {
 public:
  Ext2MCP23017(uint8_t addr = 0x20)
      : addr(addr), Supla::Io(false) {
    if (!mcp.begin()) {
      SUPLA_LOG_DEBUG("Unable to find MCP23017");
    } else {
      Serial.print("MCP23017 is connected at address: 0x");
      Serial.println(addr, HEX);
      isConnected = true;
    }
  }

  void customPinMode(int channelNumber, uint8_t pin, uint8_t mode) override {
    if (isConnected) {
	  mcp.pinMode(DFRobot_MCP23017::ePin_t(pin), mode);
    }
  }
  void customDigitalWrite(int channelNumber, uint8_t pin,
                                                        uint8_t val) override {
    if (isConnected) {
	  mcp.digitalWrite(DFRobot_MCP23017::ePin_t(pin), val);
    }
  }
  int customDigitalRead(int channelNumber, uint8_t pin) override {
      return isConnected ? mcp.digitalRead(DFRobot_MCP23017::ePin_t(pin)) : 0;
  }
  unsigned int customPulseIn(int channelNumber, uint8_t pin, uint8_t value,
                                              uint64_t timeoutMicro) override {
    // add implementation or leave empty
    return 0;
  }
  void customAnalogWrite(int channelNumber, uint8_t pin, int val) override {
    // add implementation
  }

  int customAnalogRead(int channelNumber, uint8_t pin) override {
    // add implementation
    return 0;
  }

 protected:
  ::DFRobot_MCP23017 mcp;
  uint8_t addr;
  bool isConnected = false;
};

};  // namespace Control
};  // namespace Supla

#endif  // SRC_SUPLA_CONTROL_EXT2_MCP23017_H_
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Zmienna addr nie jest nigdzie przekazana do instancji MCP.
Nie wiem czy musi być, ale jeśli nie, to raczej jest niepotrzebna
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Sat Aug 19, 2023 3:30 pm Zmienna addr nie jest nigdzie przekazana do instancji MCP.
Nie wiem czy musi być, ale jeśli nie, to raczej jest niepotrzebna
Musi być w tym miesjcu https://github.com/DFRobot/DFRobot_MCP2 ... 17.cpp#L59
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

To możesz ją przekazać jako element listy inicjalizacyjnej w konstruktorze.
Obecnie ta zmienna nie jest przekazywana, więc MCP startuje z domyślnym adresem
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Sat Aug 19, 2023 3:54 pm To możesz ją przekazać jako element listy inicjalizacyjnej w konstruktorze.
Obecnie ta zmienna nie jest przekazywana, więc MCP startuje z domyślnym adresem
nie wiem co wpisać jako pierwszy element

Code: Select all

mcp(?? , addr)
Poprawiłem (chyba), ale teraz nie wykrywa ekspanderów

Code: Select all

  Ext2MCP23017(uint8_t addr = 0x20)
      : mcp(Wire, addr), addr(addr), Supla::Io(false) {
    if (!mcp.begin()) {
      SUPLA_LOG_DEBUG("Unable to find MCP23017");
    } else {
      Serial.print("MCP23017 is connected at address: 0x");
      Serial.println(addr, HEX);
      isConnected = true;
    }
  }
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl

Return to “Arduino IDE”