Frage zur UTFT und URTOUCH lib...

Hallo Leute,

bin gerade dabei mein nächstes Projekt zu erstellen und habe mich fürn 7" touch screen entschieden. HW mäßig läuft das ganze derzeit mit nem Mega, wird wohl aber noch aufnen Due umgestrickt.

Verwendet werden UTFT und URTOUCH libs.

Ist es hier möglich für die "Xstart,Ystart,Xende,Yende" Parameter für die jeweiligen Bereiche feste Werte zu deklarieren?

Wenn ja wie und wo muss was gemacht werden

Z.B. stelle ich mir das so vor

Anstatt

myGLCD.fillRect(205, 50, 408, 100); // Bereich für Button1

das ganze sooo

myGLCD.fillRect(Button1);

Wäre für mich übersichtlicher, wenn man in einer Ecke im Programm alle Buttonbereiche deklariert und anschließend nur noch die Namen aufrufen kann(Koordinaten werden ja auch für unterschiedliche Funktionen mehrfach genutzt...Rechteck zeichen, dann Rechteck füllen, dann touch in dem Bereich abfragen usw.)

Hat da Jemand ne Lösung, oder kann dazu beitragen?

MfG Chris

Klingt nach einem Objektorientierten Ansatz:

Anstatt  myGLCD.fillRect(205, 50, 408, 100); // Bereich für Button1

das Ganze so:

  class TouchButton{ ... }; // auf dem Display anzeigen, touch erkennen, ...  
  TouchButton button1(205, 50, 408, 100);
  
  ... 
  button1.show();

Ich würde eine Klasse Button, eine Tochterklasse von UTFT und eine von URTOUCH erstellen, die die benötigten Funktionen aufnehmen.

Da du dich aber fragst wie man so etwas machen kann ist das vielleicht nicht dein Weg.

Statt der abgeleiteten Klassen könntest du auch Funktionen etwa wie

void drawButton(UTFT& utf, Button& butt);

benutzen, da wäre aber die Notation anders, faktisch ist es der gleiche Mechanismus.

Ja, das sieht für den Anfang evtl. einfacher aus.

Eine Button - Variable wäre dann eine struct mit den Koordinaten, und evtl noch anderen Werten (Farbe ?).

Wofür wird in deinem Vorschlag der Parameter  UTFT& utf  gebraucht? Wie viele verschiedene utf gäbe es?

Auch UTFT bekommt für seine Memberfunktionen einen Pointer auf das richtige UTFT, dieser ist nur versteckt, völlig unabhängig von der Anzahl existierender UTFTs.

Woher soll die Library/der Button-Kode wissen, dass dein UTFT Objekt myGLCD genannt wurde?

Für UTFT gibt es die UTFT_Buttons Library die genau das macht:

http://www.rinkydinkelectronics.com/library.php?id=61

Woher soll die Library/der Button-Kode wissen, dass dein UTFT Objekt myGLCD genannt wurde?

Gegenfrage: wie oft musst du ihr das mitteilen?

Wenn du nur einen Satz von Funktionen erstellst, können die ihr eigenes UTFT Objekt verwenden und dir, wenn du es direkt brauchst, einmal per Referenz geben. Oder umgekehrt.

Aber ich wollte Chris eigentlich nicht verwirren. Sorry.

michael_x: Aber ich wollte Chris eigentlich nicht verwirren. Sorry.

Habt Ihr eh schon...

@serenifly Die button lib habe ich schon gesehen - da kann man aber nur einfache Buttons nehmen.

Würde gerne Buttons mit Rahmen und beim drücken mit farbiger Bestätigung nehmen(also zum bestätigen entweder Farbfüllung oder den Rahmen farbig ändern). Und das gibt die Button lib nicht her.

@ Whandall

Kannst das auch für Anfänger erklären?

Ich hab jetzt z.B. Button1 und Button2

Bislang würde ich die Buttons zunächst stepbystep zeichen (Füllung mit Koordinaten, dann Rahmen mit Koordinaten, dann Text mit Koordinaten). Und die Touchabfrage wieder mit Koordinaten mit if-Funktion. Die Bestätigungsänderung der Touchrahmen mit Getx/Y und Farbe ändern.

Also etwas mehr Erklärung bräuchte ich da schon... vielleicht ein Beispiel?

MfG Chris

Würde gerne Buttons mit Rahmen und beim drücken mit farbiger Bestätigung nehmen(also zum bestätigen entweder Farbfüllung oder den Rahmen farbig ändern). Und das gibt die Button lib nicht her.

Lies dir die Doku genauer durch. Das geht alles. Man kann Rahmen, Text und Farbe nach dem Erstellen ändern. Siehe setButtonColors(). Und drawButton() zeichnet eine Schaltfläche mit diesen Einstellungen neu

Damit kann man sowas machen:

if(state == true)
{
    buttons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_WHITE, VGA_RED, VGA_RED);
}
else
{
   buttons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_WHITE, VGA_RED, VGA_BLUE);
}

buttons.drawButton(button);

Man kann auch sehr einfach einen Button selbst als Anzeige für eine sich ändernde Zahl verwenden (und solche Buttons dafür nutzen auszuwählen was man ändern will). Da ist schon vieles mögliches

michael_x:
Gegenfrage: wie oft musst du ihr das mitteilen?

Wenn du nur einen Satz von Funktionen erstellst, können die ihr eigenes UTFT Objekt verwenden und dir, wenn du es direkt brauchst, einmal per Referenz geben. Oder umgekehrt.

Deswegen würde ich ja auch UTFT so erweitern (durch Vererbung), dass sie Button Objekte verarbeiten kann,
syntaktisch so wie es Chris wollte.

myGLCD.fillRect(Button1);

Bei dem Aufruf stört dich auch die Angabe des UTFTs?

Bei allen nicht-statischen Member Funktionen in Klassen ist der Pointer das erste versteckte Argument,
ich kann an dem Schema nichts Ungewöhnliches oder Unpraktisches erkennen.

Loschder:
Kannst das auch für Anfänger erklären?

Ja, aber es wäre mir zu zeitraubend (und uninteressant).
Würdest du die Grundlagen von OOP und OOP mit C++ schon kennen, hättest du meinen Vorschlag verstanden.

Ich sehe mich außerstande Lerninhalte in Buchumfang in ein paar Worten zu vermitteln.
Der Umgang mit dem Nürnberger Trichter fällt mir noch schwerer als der Umgang mit der hier oft nötigen Glaskugel.

Kugel.png

Ab und zu kann ich in der Kugel immerhin schon was erkennen… :wink:

Whandall: Würdest du die Grundlagen von OOP und OOP mit C++ schon kennen, hättest du meinen Vorschlag verstanden. ... Der Umgang mit dem Nürnberger Trichter fällt mir noch schwerer als der Umgang mit der hier oft nötigen Glaskugel.

Danke für Deine Beleuchtung, aber meine Defizite kenne ich schon selbst...sonst hätte ich nicht gefragt !!! Wusste ja nicht dass Du ein Allwissender bist

Aber nun gut... ich nehme Deine Kritik als Empfehlung, vielleicht komm ich ja auch ohne (Deine) Erklärungen dahinter...

Wie gesagt macht UTFT_Buttons was du willst. Du hast das nur übersehen. Du musst die Farbeinstellungen ändern und dann die Schaltfläche neu zeichnen.

Ich wüsste nicht dass ich irgendetwas kritisiert hätte, aber manche sind empfindlich.

Es gibt unendlich viele Einführungen in Objekt-Orientierte-Programmierung, arbeite mal eine durch. An der Uni werden die absoluten Grundlagen auf zwei Vorlesungen verteilt, das kann man niemandem in ein paar Worten erklären.

Wenn man dann weiß, was man wie programmieren möchte, muss man "nur noch" die entsprechende Syntax von C++ erlernen.

Bis man sich in dem Bereich einigermaßen sicher fühlt braucht es einiges an Training.

Könnte ich das alles auf die Schnelle beliebigen Personen in kürzerer Zeit vermitteln, hätte ich einen gut bezahlten Job an irgendeiner Uni und keine Zeit in Foren zu lesen.

In diesem Fall musst du es nicht einmal selbst programmieren, sondern nur die Schnittstelle einer Library verstehen und benutzen. Da ich die Library nicht kenne, kann ich da nicht besonders hilfreich sein.

Hallo, "Würde gerne Buttons mit Rahmen und beim drücken mit farbiger Bestätigung nehmen(also zum bestätigen entweder Farbfüllung oder den Rahmen farbig ändern). Und das gibt die Button lib nicht her."

Vergesse das doch einfach, und erspare Dir Ärger und einen neuen Arduino. Nehme ein HMI, z.B. ein Nextion. Damit hast Du in wenigen Minuten Deine Touchoberfläche erstellt. Gruß und Spaß Andreas