Eine Bibliothek in einer Bibliothek starten

Hallo :slight_smile:
Ich habe hier 3 Displays . Die sind miteinander verbunden. Dazu benutze ich eine Adafruit Bibliothek. Das ganze läuft ganz gut und alles sieht nett aus. Jetzt bin ich auf die Idee gekommen dieses Display um 6 weitere zu erweitern. Die Adafruit Bibliothek geht aber nur bis vier Displays. Jetzt bräuchte ich 9 Chip select Ausgänge, anstatt 3. Da gehen mir natürlich die Pins am Prozessor aus. Also habe ich mir eine 16-Bit-I/O-Erweiterung mit dem pcf8575 gebaut. Funktioniert soweit aus dem Sketch aus. Allerdings muss ich jetzt die 16-Bit-I/O-Erweiterung vor der Initialisierung der Displays starten, sodass meine Displays mit den Pins der16-Bit-I/O-Erweiterung arbeiten können. Ich sitze jetzt schon Stunden vor dieser Bibliothek und versuche das hin zu bekommen. Aber es hagelt entweder Fehler im Dutzend oder der Compiler sagt gar nichts, dann funktioniert aber auch gar nichts.

Das ist die Bibliothek:

/*!
 * @file Adafruit_HT1632.h
 *
 * @mainpage Adafruit HT1632 Driver
 *
 *
 * @section author Author
 *
 * Written by Limor Fried/Ladyada for Adafruit Industries.
 *
 * @section license License
 *
 * BSD license, all text above must be included in any redistribution
 */

#include "Adafruit_HT1632_PCF.h"
#include "PCF8575.h"

PCF8575 Display_selector(0x20);

#ifndef _swap_int16_t
#define _swap_int16_t(a, b)                                                    \
  {                                                                            \
    int16_t t = a;                                                             \
    a = b;                                                                     \
    b = t;                                                                     \
  }
#endif

// Constructor for single GFX matrix
Adafruit_HT1632LEDMatrix::Adafruit_HT1632LEDMatrix(uint8_t data, uint8_t wr,
                                                   uint8_t cs1)
    : Adafruit_GFX(24, 16), matrices(NULL), matrixNum(0) {
  if ((matrices = (Adafruit_HT1632 *)malloc(sizeof(Adafruit_HT1632)))) {
    matrices[0] = Adafruit_HT1632(data, wr, cs1);
    matrixNum = 1;
  }
}

// Constructor for two matrices, tiled side-by-side for GFX
Adafruit_HT1632LEDMatrix::Adafruit_HT1632LEDMatrix(uint8_t data, uint8_t wr,
                                                   uint8_t cs1, uint8_t cs2)
    : Adafruit_GFX(48, 16), matrices(NULL), matrixNum(0) {
  if ((matrices = (Adafruit_HT1632 *)malloc(2 * sizeof(Adafruit_HT1632)))) {
    matrices[0] = Adafruit_HT1632(data, wr, cs1);
    matrices[1] = Adafruit_HT1632(data, wr, cs2);
    matrixNum = 2;
  }
}

// Constructor for three matrices, tiled side-by-side for GFX
Adafruit_HT1632LEDMatrix::Adafruit_HT1632LEDMatrix(uint8_t data, uint8_t wr,
                                                   uint8_t cs1, uint8_t cs2,
                                                   uint8_t cs3)
    : Adafruit_GFX(72, 16), matrices(NULL), matrixNum(0) {
  if ((matrices = (Adafruit_HT1632 *)malloc(3 * sizeof(Adafruit_HT1632)))) {
    matrices[0] = Adafruit_HT1632(data, wr, cs1);
    matrices[1] = Adafruit_HT1632(data, wr, cs2);
    matrices[2] = Adafruit_HT1632(data, wr, cs3);
    matrixNum = 3;
  }
}

// Constructor for four matrices, tiled side-by-side for GFX
Adafruit_HT1632LEDMatrix::Adafruit_HT1632LEDMatrix(uint8_t data, uint8_t wr,
                                                   uint8_t cs1, uint8_t cs2,
                                                   uint8_t cs3, uint8_t cs4)
    : Adafruit_GFX(96, 16), matrices(NULL), matrixNum(0) {
  if ((matrices = (Adafruit_HT1632 *)malloc(4 * sizeof(Adafruit_HT1632)))) {
    matrices[0] = Adafruit_HT1632(data, wr, cs1);
    matrices[1] = Adafruit_HT1632(data, wr, cs2);
    matrices[2] = Adafruit_HT1632(data, wr, cs3);
    matrices[3] = Adafruit_HT1632(data, wr, cs4);
    matrixNum = 4;
  }
}

void Adafruit_HT1632LEDMatrix::setPixel(uint8_t x, uint8_t y) {
  drawPixel(x, y, 1);
}

void Adafruit_HT1632LEDMatrix::clrPixel(uint8_t x, uint8_t y) {
  drawPixel(x, y, 0);
}

void Adafruit_HT1632LEDMatrix::drawPixel(int16_t x, int16_t y, uint16_t color) {
  if ((x < 0) || (x >= _width) || (y < 0) || (y >= _height))
    return;

  switch (rotation) { // Rotate pixel into device-specific coordinates
  case 1:
    _swap_int16_t(x, y);
    x = WIDTH - 1 - x;
    break;
  case 2:
    x = WIDTH - 1 - x;
    y = HEIGHT - 1 - y;
    break;
  case 3:
    _swap_int16_t(x, y);
    y = HEIGHT - 1 - y;
    break;
  }

  uint8_t m = x / 24; // Which matrix controller is pixel on?
  x %= 24;            // Which column in matrix?

  uint16_t i;
  
  
  if ((i >=0) and (i < 384)) {
      i = x * 16 + y;
  if (color)
    matrices[m].setPixel(i);
  else
    matrices[m].clrPixel(i);
  }




}

boolean Adafruit_HT1632LEDMatrix::begin(uint8_t type) {
  if (matrixNum) { // Did malloc() work OK?
    for (uint8_t i = 0; i < matrixNum; i++)
      matrices[i].begin(type);
    return true;
  }
  return false;
}

void Adafruit_HT1632LEDMatrix::clearScreen() {
  for (uint8_t i = 0; i < matrixNum; i++)
    matrices[i].clearScreen();
}



void Adafruit_HT1632LEDMatrix::fillScreen() {
  for (uint8_t i = 0; i < matrixNum; i++)
    matrices[i].fillScreen();
}

void Adafruit_HT1632LEDMatrix::setBrightness(uint8_t b) {
  for (uint8_t i = 0; i < matrixNum; i++)
    matrices[i].setBrightness(b);
}

void Adafruit_HT1632LEDMatrix::blink(boolean b) {
  for (uint8_t i = 0; i < matrixNum; i++)
    matrices[i].blink(b);
}

void Adafruit_HT1632LEDMatrix::writeScreen() {
  for (uint8_t i = 0; i < matrixNum; i++)
    matrices[i].writeScreen();
}

//////////////////////////////////////////////////////////////////////////

Adafruit_HT1632::Adafruit_HT1632(int8_t data, int8_t wr, int8_t cs, int8_t rd) {
  _data = data;
  _wr = wr;
  _cs = cs;
  _rd = rd;
  memset(ledmatrix, 0, sizeof(ledmatrix));
}


//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void PCF_init(){
  Display_selector.begin();
    Display_selector.selectNone();
    delay (10000);
}

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

void Adafruit_HT1632::begin(uint8_t type) {
  //PCF8575 Display_selector(0x20);  //  Set all Ports to output
  PCF_init();
 


  Display_selector.select(_cs); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  delay (10000);
  //pinMode(_cs, OUTPUT);
  //digitalWrite(_cs, HIGH);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  pinMode(_wr, OUTPUT);
  digitalWrite(_wr, HIGH);
  pinMode(_data, OUTPUT);

  if (_rd >= 0) {
    pinMode(_rd, OUTPUT);
    digitalWrite(_rd, HIGH);
  }

#ifdef __AVR__
  csport = portOutputRegister(digitalPinToPort(_cs));
  csmask = digitalPinToBitMask(_cs);
  wrport = portOutputRegister(digitalPinToPort(_wr));
  wrmask = digitalPinToBitMask(_wr);
  dataport = portOutputRegister(digitalPinToPort(_data));
  datadir = portModeRegister(digitalPinToPort(_data));
  datamask = digitalPinToBitMask(_data);
#endif

  sendcommand(ADA_HT1632_SYS_EN);
  sendcommand(ADA_HT1632_LED_ON);
  sendcommand(ADA_HT1632_BLINK_OFF);
  sendcommand(ADA_HT1632_MASTER_MODE);
  sendcommand(ADA_HT1632_INT_RC);
  sendcommand(type);
  sendcommand(ADA_HT1632_PWM_CONTROL | 0xF);
}

void Adafruit_HT1632::setBrightness(uint8_t pwm) {
  if (pwm > 15)
    pwm = 15;
  sendcommand(ADA_HT1632_PWM_CONTROL | pwm);
}


void Adafruit_HT1632::blink(boolean blinky) {
  sendcommand(blinky ? ADA_HT1632_BLINK_ON : ADA_HT1632_BLINK_OFF);
}

void Adafruit_HT1632::setPixel(uint16_t i) {
  ledmatrix[i / 8] |= (1 << (i & 7));
}

void Adafruit_HT1632::clrPixel(uint16_t i) {
  ledmatrix[i / 8] &= ~(1 << (i & 7));
}

void Adafruit_HT1632::dumpScreen() {
  Serial.println(F("---------------------------------------"));

  for (uint16_t i = 0; i < sizeof(ledmatrix); i++) {
    Serial.print("0x");
    Serial.print(ledmatrix[i], HEX);
    Serial.print(" ");
    if (i % 3 == 2)
      Serial.println();
  }

  Serial.println(F("\n---------------------------------------"));
}

void Adafruit_HT1632::writeScreen() {

#ifdef __AVR__
  *csport &= ~csmask;
  *datadir |= datamask; // OUTPUT
#else
   Display_selector.selectNone();
  //digitalWrite(_cs, LOW);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#endif

  writedata(ADA_HT1632_WRITE, 3);
  // send with address 0
  writedata(0, 7);

  for (uint16_t i = 0; i < sizeof(ledmatrix); i += 2) {
    writedata(((uint16_t)ledmatrix[i] << 8) | ledmatrix[i + 1], 16);
  }

#ifdef __AVR__
  *csport |= csmask;
  *datadir &= ~datamask; // INPUT
#else
  Display_selector.select(_cs);
  //digitalWrite(_cs, HIGH);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#endif
}

void Adafruit_HT1632::clearScreen() {
  memset(ledmatrix, 0, sizeof(ledmatrix));
  writeScreen();
}

void Adafruit_HT1632::writedata(uint16_t d, uint8_t bits) {
#ifdef __AVR__
  for (uint16_t bit = 1 << (bits - 1); bit; bit >>= 1) {
    *wrport &= ~wrmask;
    if (d & bit)
      *dataport |= datamask;
    else
      *dataport &= ~datamask;
    *wrport |= wrmask;
  }
#else
  pinMode(_data, OUTPUT);
  for (uint16_t bit = 1 << (bits - 1); bit; bit >>= 1) {
    digitalWrite(_wr, LOW);
    digitalWrite(_data, (d & bit) ? HIGH : LOW);
    digitalWrite(_wr, HIGH);
  }
  pinMode(_data, INPUT);
#endif
}

void Adafruit_HT1632::writeRAM(uint8_t addr, uint8_t data) {
  // Serial.print("Writing 0x"); Serial.print(data&0xF, HEX);
  // Serial.print(" to 0x"); Serial.println(addr & 0x7F, HEX);

  uint16_t d = ADA_HT1632_WRITE;
  d <<= 7;
  d |= addr & 0x7F;
  d <<= 4;
  d |= data & 0xF;

#ifdef __AVR__
  *csport &= ~csmask;
  writedata(d, 14);
  *csport |= csmask;
#else
  //digitalWrite(_cs, LOW);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  Display_selector.selectNone();
  writedata(d, 14);
  //digitalWrite(_cs, HIGH);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  Display_selector.select(_cs);
#endif
}

void Adafruit_HT1632::sendcommand(uint8_t cmd) {
#ifdef __AVR__
  *csport &= ~csmask;
  *datadir |= datamask; // OUTPUT
  writedata((((uint16_t)ADA_HT1632_COMMAND << 8) | cmd) << 1, 12);
  *datadir &= ~datamask; // INPUT
  *csport |= csmask;
#else
  //digitalWrite(_cs, LOW);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  Display_selector.selectNone();
  writedata((((uint16_t)ADA_HT1632_COMMAND << 8) | cmd) << 1, 12);
  //digitalWrite(_cs, HIGH);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  Display_selector.select(_cs);
#endif
}

void Adafruit_HT1632::fillScreen() {
  memset(ledmatrix, 0xFF, sizeof(ledmatrix));
  writeScreen();
}


Ich habe die Funktion ausgemacht. Da muss ich als erstes rein, weil da das Display intiallisiert wird.

void Adafruit_HT1632::begin(uint8_t type) {
  //PCF8575 Display_selector(0x20);  //  Set all Ports to output
  PCF_init();
 


  Display_selector.select(_cs); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  delay (10000);
  //pinMode(_cs, OUTPUT);
  //digitalWrite(_cs, HIGH);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  pinMode(_wr, OUTPUT);
  digitalWrite(_wr, HIGH);
  pinMode(_data, OUTPUT);

  if (_rd >= 0) {
    pinMode(_rd, OUTPUT);
    digitalWrite(_rd, HIGH);
  }

Egal was ich auch versuche, es schlägt fehlt. Meine Funktion ...

void PCF_init(){
  Display_selector.begin();
    Display_selector.selectNone();
    delay (10000);
}

Lässt sich nicht in dieser Funktion starten

void Adafruit_HT1632::begin(uint8_t type) {
  //PCF8575 Display_selector(0x20);  //  Set all Ports to output
  PCF_init();
  Display_selector.select(_cs); 

  delay (10000);
  //pinMode(_cs, OUTPUT);
  //digitalWrite(_cs, HIGH);

  pinMode(_wr, OUTPUT);
  digitalWrite(_wr, HIGH);
  pinMode(_data, OUTPUT);

  if (_rd >= 0) {
    pinMode(_rd, OUTPUT);
    digitalWrite(_rd, HIGH);
  }

Ich gebe es zu, ich bin ein NOOB. Aber vielleicht kann mir ja doch einer helfen, sonst stehe ich mit meiner Idee auf dem Schlauch. Danke an die, die sich das wenigstens durchlesen.
Grüße Biene

wo steht das, dass die Lib nur "bis vier Displays" unterstützt? Kommt mir eigenartig vor.

Wenn ich mir die Beispiele der lib ansehe

#define HT_DATA 2
#define HT_WR 3
#define HT_CS 4

dann kommen halt einfach weitere CS Leitungen hinzu.

außerdem steht im Adafruit tutorial:

Warum nuzzt du nicht daisy chaining?

Und musst du wirklich Port Expander für CS Leitungen nehmen? Auf welchem Microcontroller bist und was hast du außer den 9 Displays sonst noch vor?

das ist auch nicht gerade einfach. Einerseits willst du 9 separate Display Objekte, auf der anderen Seite hast du einen PCF8575 wovon du jeweils einen Ausgänge du in den 9 Displays Objekten nutzen willst.

Was du machen könntest, du übergibst deinem neuen Display Objekt, auch eine Referenz auf ein PCF8575 Objekt und den jeweiligen Pin am PCF8575.

Wo genau findet man die eingebundene

@noiasca
Ja, Du hast mit allem Recht. Adafruit schrieb das auf deren Homepage, das nur 4 unterstützt werden. Ich habe allerdings beim durchstöbern der Bibliothek festgestellt, das da bei weitem mehr geht. Richtig, nur mehr CS Leitungen. Darum diese Idee mit der Port Erweiterung. Ich habe ESP32, ESP8266 und Arduino Pro Mini. Die Bibliothek findest Du in der Adafruit_HT1632.h.

#include "Adafruit_HT1632_PCF.h"
#include "PCF8575.h"
PCF8575 Display_selector(0x20);

Was ich letztendlich tauschen wollte ist das :

  Display_selector.select(_cs);
  //pinMode(_cs, OUTPUT);
  //digitalWrite(_cs, HIGH);

Ok, da gibt noch andere kleinere Stellen, wo ich was machen müsste, aber ich denke, das ich das hinbekommen könnte.

Zu meinem Prozessor kommen noch 3 II2C Sensoren. Uhr + Temp + Feuchtigkeit + Luftdruck.

Warum nuzzt du nicht daisy chaining? Brauche ich dann weniger CS Pins ?

das wird nicht reichen. Du musst alle Zeilen mit

digitalWrite(_cs

umschreiben auf den Portexpander.

2 Leitungen HT_DATA und HT_WR
9 CS Leitungen
2 I2C Leitungen
2 Serial Output zum debuggen

das sind 15 Leitungen. Das geht auf einem ESP32 wie auch auf einem Pro Mini. Warum der Stress mit PCF?

ja - zumindest sehe ich im Tutorial nur Verbindungen zwischen den Boards.

Ähem ... weil ich dummerweise die SD - karte vergessen habe zu erwähnen. Tut mir Leid !
Naja, wenn 9 Displays gehen, gehen vielleicht auch 16 ...

Das was Adafruit gemacht hat:
Sie haben alle Leitungen von Links nach recht auf der Platine als Bus durchgezogen.
Ich dachte auch, wie praktisch, jedoch steigen die letzten Displays nach ca. 2 Stunden aus. Nur ein Reboot belebt sie dann wieder. Darum hat sie Adafruit wohl wieder vom Markt genommen. Ich hatte hier gleiche Phänomene und habe an mir gezweifelt, bis ich auf die Idee kam alle separat mit Kabeln zu verbinden, da war der Fehler weg.

Du hast noch keine Projektübersicht gegeben für was du so viele Displays brauchst.

Alternativ könnte man auch Neopixel nehmen. Die brauchen nur einen einzigen IO-Pin.

Bei Christians-Technik-Shop für 2,18 Euro leider ausverkauft

Aber hier für ca 5 Euro

Hmm... du könntest mit einem 3-zu-8 Dekoder wie dem 74138 eine CS-Leitung auf 8 Ausgänge verteilen und brauchst dazu nur 3 zusätzliche Pins.

@StefanL38
Tatsächlich habe ich über sowas auch schon nachgedacht. Jedoch habe ich die Controller + Matrix 8x8 + Platinen geschenkt bekommen. Ich würde sie gerne verwenden wollen. Ich Danke Dir für die Anregung.

@Rintin
Ja, ich habe mir über Wochen schon einen Kopf gemacht wie ich mein Konzept umsetzen kann. Meine Mittel sind aber begrenzt. Das Material habe ich ja schon. In Elektronik bin ich fit, mein Taschengeld ist aber begrenzt. Technisch gesehen müsste mein Konzept funktionieren. Ich will das Konzept 3 x 3 Displays testen. Wenn es funktioniert, will ich probeweise auf 4 x 4 gehen. Das heißt, ich möchte Pins sparen um mir Möglichkeiten offen zu halten. Ich bin Grundsätzlich sehr sehr Dankbar für alle Inspirationen von euch, auch wenn sie nicht unbedingt passen. Aber eine Frage noch: Wenn ich 3-zu-8 Dekoder verwende, bedeutet das nicht, das mir ein CS fehlt?
Allen ein freundliches Danke schön !

Wenn du in Elektronik fit bist, dann könntest du den
nackten MCP23017-Chip als IO-expander verwenden.

Der wird per I2C angebunden.

Also fertiges Modul 4,50 Euro

Oder du nimmst einen Atmega-328P-ähnlichen Microcontroller mit vielen IO-pins der in China entwickelt würde

Man muss das entsprechende Core-Paket in der Arduino-IDE dazu installieren, dann lässt er sich (fast) wie Arduino-Unos programmieren.

und wie willst jetzt konkret weitermachen?

Wenns der PCF8574 werden soll ... wie ich schon oben schrieb: wenn du unmissverständlich schreibst welche library du dazu nutzt und hier verlinkst, dann erhöht das die Chance dass sich das jemand konkret ansieht.

@StefanL38
Der MCP23017 ist definitiv schneller als PCF8575, das ist Fakt.
Aber , ich habe noch andere Platinen am I2C Bus hängen, die das definitiv nicht abkönnen und dann aussteigen. Den Prozessor zu wechseln, wo ich schon alle guten und gebräuchlichsten am Start habe? Du liest aber schon den ganzen Post? Die Frage ist immer noch ein Software Problem. Ich möchte das Problem nicht einfach umschiffen. Ich möchte nur wissen, wie man aus einer Bibliothek eine andere Instanziiert. Ich habe mittlerweile verstanden, das jeder Doktor sein Problem auf seine Weise löst. Aber ich hatte hier, in einem ARDUINO FORUM, noch keinen Arduino Doktor, der das Problem in C löst.
Ich Danke dennoch für den Willen mir helfen zu wollen und das meine ich wirklich ehrlich ...
ihr habt Zeit eures Lebens verschwendet um mir helfen zu wollen, Danke!

Das kann auch keiner, weil wir C++ schreiben :wink:
Sag doch einfach mal ganz konkret welche Lib Du in welcher instantiieren willst (mit Links zu den Libs)

Gruß Tommy

Nein nicht verschwendet sondern Spaß gehabt beim Nachdenken, Produkte suchen und posten.

OK. mit der vorhanden Hardware insgesamt 4x4 = 16 Adafruit_HT1632-Module ansteuern.
Der Bus hat drei Leitungen Chipselect, Clock und Data.
Jeder der 16 Chipselect-pins muss einfach geschaltet werden.

Wie viel IO-pins hat ein Arduino Uno?
Dann kannste ja mal durchzählen. Also ohne ein bisschen Zusatzelektronik wird es wohl nicht klappen.

@noiasca

Wie ich weitermache, endscheidet nun, ob ich eine Lösung für mein Software Problem bekomme oder nicht. Bisher kamen nur Hardware basierte, aus denen ich eine Menge lernen konnte, jedoch nicht zu meinen Ziel führten.
Wenn sich kein Software Genie meldet, in einem Arduino Forum, ziehe ich die ganze Bibliothek in einen Sketch (Ich habe gelernt, das eine Bibliothek auch mal ein Sketch war).
Ich werde danach jede einzelne Funktion auf Funktionalität prüfen. Das habe ich schonmal gemacht, als ich mein Display an die Adafruit Bibliothek anpassen musste (Ein Szenario, das ich sicher nicht wieder habe möchte!). Das war Hardcore und sehr zeitintensiv(Bin halt Anfänger). In dem Sketch ist dann alles einfacher und es wird sich alles erschließen (So hoffe ich doch, sonst bin ich am PoPo). Also Lesen , Lesen, Lesen.

Warum der PCF8574? Ich habe ihn da und er macht 400Khz. Und, er funktioniert, hat eine Bibliothek. Ich könnte auch Wire einbinden, das Problem ist aber das gleiche. Einbinden ein Bibliothek in eine Bibliothek.

wenn du unmissverständlich schreibst welche library du dazu nutzt und hier verlinkst, dann erhöht das die Chance dass sich das jemand konkret ansieht.

Ich hoffe doch sehr, das mein Problem von einem Fuchs erkannt wird ... sonst habe ich nichts gelernt und stehe das nächste mal vor dem gleichen Problem ... sehr kontraproduktiv ... egal, so oder so, ich gebe das Thema nicht auf ...

es braucht weder ein Genie noch einen Fuchs. Aber wenn du nicht deine konkrete PCF Library erkennbar machst - dann weis halt niemand was du wirklich verwendest ...

@Tommy56
Die Bibliothek in der ich implementieren möchte ist :
https://github.com/adafruit/HT1632

Die Bibliothek die implementiert werden soll, ist die Bibliothek integrieren möchte :
https://github.com/RobTillaart/PCF8575

Ja ... Tommy56 ... c ist nicht gleich C++. Ich habe das verstanden. Danke !

Ich würde es eher anders herum sehen. Ich verstehe es so:
Du willst die LED-Matrix über PCF8575 betreiben. Richtig?
Dann genügt nicht ein einfaches Aufrufen der einen Lib in der anderen, sondern Du musst die HT1632 so umschreiben, dass sie anstelle von MC-Pins die Pins vom PCF8575 benutzt.

Gruß Tommy