Go Down

Topic: TFT-Objekt als Parameter in Function (Read 82 times) previous topic - next topic

SP90

Hallo Leute,

ich kann leider über folgendes Thema keine Antwort finden:

Ich habe zwei TFT-Displays, die ich mit der Adafruit_ILI9340.h anspreche und so inizialisiere:

Code: [Select]
Adafruit_ILI9340 tftLeft = Adafruit_ILI9340(_cs, _dc, _rst);
Adafruit_ILI9340 tftRight = Adafruit_ILI9340(_cs2, _dc, _rst2);


Bis jetzt hatte ich ein ich sag mal statisches Menü, das auf beiden Displays angezeigt wurde. Dazu wird am Ende meiner Loop eine Ausgabe-Function ausgeführt, die die print-Befehle für beide Displays nacheinander enthält

Code: [Select]
void Ausgabe()
{
  tftLeft.setTextColor(ContentColor);
  tftLeft.setTextSize(3);
  tftLeft.setCursor(17, 60);
  tftLeft.print("Menue links");


  tftRight.setTextColor(ContentColor);
  tftRight.setTextSize(3);
  tftRight.setCursor(17, 60);
  tftRight.print("Menue rechts");
}


Nun is mein Programm aber gewachsen und ich habe mehrere Menüs, die ich durchblättern möchte. Dazu hab ich nun für jedes Menü eine Ausgabe-Function die in einer if-Schleife abhängig von einer Variable aufgerufen wird. Es sollen aber alle Menüs sowohl auf dem linken als auch auf dem rechten Display angezeigt werden können. Die Pfusch-Lösung wäre jetzt für jedes Display eine eigene Ausgabe-Function zu schreiben und die jeweilige aufrufen:

Code: [Select]
void Ausgabe_Menu1_links()
{
  tftLeft.setTextColor(ContentColor);
  tftLeft.setTextSize(3);
  tftLeft.setCursor(17, 60);
  tftLeft.print("Menue 1");
}
void Ausgabe_Menu1_rechts()
{
  tftRight.setTextColor(ContentColor);
  tftRight.setTextSize(3);
  tftRight.setCursor(17, 60);
  tftRight.print("Menue 1");
}


Das is aber umständlich. Bei einer Function kann ich ja ein z.B. int oder float beim Aufrufen der Function übergeben und diese Werte werden dann in der Function verarbeitet. Das selbe hätt ich jetzt gerne mit den tft-Objekten. Ich will eine Ausgabe_Menu1-Funktion mit dem Argument auf welchen Display ausgegeben werden soll.

Code: [Select]
void Ausgabe_Menu1(Objekt tftxxxx)
{
  tftxxxx.setTextColor(ContentColor);
  tftxxxx.setTextSize(3);
  tftxxxx.setCursor(17, 60);
  tftxxxx.print("Menue 1");
}


Und das wird dann so aufgerufen

Code: [Select]
Ausgabe_Menu1(tftLeft);

Hat jemand eine Idee, ob sich sowas machen lässt?

Vielen Dank schon mal!

LG

Serenifly

Code: [Select]

void func(const Adafruit_ILI9340& tft)

Wichtig ist bei sowas dass du eine Referenz übergibst und nicht eine Kopie des Objekts

Oder die Oberklasse Adafruit_GFX verwenden. Dann geht es wahrscheinlich auch mit anderen Displays

SP90

Hallo,

hatte nun endlich Zeit das auszuprobieren. Funktioniert prima! Vielen Dank! Manchmal sind die Dinge auch einfacher als man glaubt.  :)

LG

Go Up