Verwendung von OOP

Hallo zusammen!

Ich habe für mein TFT (ILI9341) Display mit Adafruit_GFX einen Slider erstellt.
Das Programm ist linear geschrieben. Es funktioniert prima;
aber eben nur EIN Slider.
Ich möchte diesen Slider gerne als Objekt erstellen,
um mehrere Instanzen erstellen zu können.
Dafür habe ich eine Slider.h und Slider.cpp Datei in meinem
Projektordner erstellt.
Wenn ich die Adafruit Bibliotheken in die Slider.h Datei einbinde,
bekomme ich als Fehlermeldung den Hinweis "... mehrfach vorhanden"
Binde ich sie in meiner Projektdatei ein, sind sie in Slider.*
nicht sichtbar!
Jetzt stellen sich mehrere Fragen:

Ist mein Problem überhaupt lösbar?
Wenn ja, wie mache ich es richtig?
In meinen Büchern finde ich keinen Hinweis darauf, wie z.B.
"Adafruit_GFX" einzubinden ist, das die Funktionen in der
Projektdatei UND im Sliderobjekt verwendet werden können.

Herzlichen Dank für eure Bemühungen!

Viele Grüße
Thomas

Meine Arbeitshypothese:
Wer Fehlermeldungen verstümmelt und seinen Code geheim hält ist nicht an Lösungen interessiert.

Wozu soll die gut sein?

Include Guard vergessen?

Hat Deine Slider.h #pragma once oder einen anderen include-guard?

Gruß Tommy

Um mehrere Slider mit einem µC zu steuern, kannst Du OOP verwenden, mußt Du aber nicht. Schon vor OOP konnten µCs solche Aufgaben lösen. Mal als ganz einfaches Beispiel zwei blinkende LEDs:

Programm ohne OOP
// https://forum.arduino.cc/t/verwendung-von-oop/1376042/4
// Verwendung von OOP
// getestet mit ESP32
#include <MobaTools.h>
const int led1P =  12;
const int led2P =  13;

MoToTimer timer1;
MoToTimer timer2;

void setup() {
  pinMode(led1P, OUTPUT);
  pinMode(led2P, OUTPUT);
}

void loop() {
  if ( !timer1.running() ) {
    if ( digitalRead( led1P ) ) {
      digitalWrite( led1P, LOW );
      timer1.setTime( 600 );
    } else {
      digitalWrite( led1P, HIGH );
      timer1.setTime( 300 );
    }
  }

  if ( !timer2.running() ) {
    if ( digitalRead( led2P ) ) {
      digitalWrite( led2P, LOW);
    } else {
      digitalWrite( led2P, HIGH);
    }
    timer2.setTime( 633 );
  }
}

Die Verwendung von MoToTimer ist die Analogie zu einer von Dir verwendeten Programmbibliothek.

Das geht natürlich auch mit OOP:

Programm mit OOP
// https://forum.arduino.cc/t/verwendung-von-oop/1376042/4
// Verwendung von OOP
// getestet mit ESP32
#include <MobaTools.h>  // siehe Bibliotheksverwaltung
class Blink {
    const int led;
    const int zeit1, zeit2;
  public:
    MoToTimer timer;
    Blink( const int led, const int zeit1, const int zeit2 ) : led(led), zeit1(zeit1), zeit2(zeit2) {}

    void init() {
      pinMode(led, OUTPUT);
    }
    void run() {
      if ( !timer.running() ) {
        if ( digitalRead( led ) ) {
          digitalWrite( led, LOW );
          timer.setTime( zeit1 );
        } else {
          digitalWrite( led, HIGH );
          timer.setTime( zeit2 );
        }
      }
    }
};
Blink blinken[] {
  {12, 600, 300}, {13, 633, 633}
};

void setup() {
  for (Blink &b : blinken) b.init();
}

void loop() {
  for (Blink &b : blinken) b.run();
}

Ich habe keine *.h oder *.cpp oder *.hpp verwendet, weil ich die nur von Bibliotheken kenne.

Hilft Dir mein einfaches Beispiel, um zu OOP zu gelangen?

PS: Sliderbeispiel mit MobaTools