INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Menü mit Submenüs auf LCD Touch Screen
21.09.2013, 15:30 (Dieser Beitrag wurde zuletzt bearbeitet: 22.09.2013 14:39 von rkuehle.)
Beitrag #1
Menü mit Submenüs auf LCD Touch Screen
Hallo Forum,
da ich mir selbst eine Weile die Zähne daran ausgebissen habe, und alle etwas davon haben sollen, hier ein Sketch, der zeigt wie man auf einem LCD Touch Screen ein Menü mit Submenüs aufsetzen kann. Vielleicht kann es ja jemand gebrauchen.

Benutzte Hardware:
Mega + Adapter + LCD Touch Screen wie hier:
http://www.sainsmart.com/sainsmart-mega2...ga8u2.html
Bibliotheken von Henning Karlsen. Siehe hier:
http://www.sainsmart.com/sainsmart-mega2...ga8u2.html
Der Code sollte durch die Kommentare verständlich sein. Auf grafischen Schnickschnack habe ich verzichtet.

Grüße Ricardo

Code:
/* UTFT_Buttons_Demo_320x240
angepasst auf 2 Ebenen - 3 Hauptmenupunkte und
je Submenu wieder 3 Menupunkte + "Zurueck"-Button */

#include <UTFT.h>        // TFT Lib
#include <UTouch.h>        // Touch Lib
#include <UTFT_Buttons.h>     // Button Lib
extern uint8_t BigFont[];    // Zeichengroeße fuer Buttons und Text
// Instanzen
UTFT          myGLCD(ITDB32S,38,39,40,41);
UTouch        myTouch(6,5,4,3,2);
UTFT_Buttons  myButtons(&myGLCD, &myTouch);
// Diese Buttons werden in allen Menuebenen verwendet
unsigned int main_but1, main_but2,main_but3;
/* m_press der aktuell geklickte Button im Hauptmenu
kann auch -1 für kein Button sein, daher int */
int m_press;
// Footertext Hauptmenu
const char footertext[]="Hauptmenue";
void setup() {
  // LCD starten
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(BigFont);
  // Touch starten
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_HI);
  myButtons.setTextFont(BigFont);
}
void loop() {
  // Standardfarben entspr. Vorgaben in den Libs benutzen
  const boolean default_colors = true;
start:
  // Buttons des Hauptmenu setzen
  main_but1 = myButtons.addButton (10,50,300,30,"Menu 1");
  main_but2 = myButtons.addButton (10,80,300,30,"Menu 2");
  main_but3 = myButtons.addButton (10,110,300,30,"Menu 3");
  // Buttons anzeigen
  myButtons.drawButtons();
  // Einen Text schreiben
  myGLCD.print(footertext, 20, 200);
  myGLCD.setColor(VGA_WHITE);
  // Hier beginnt die Abfrage der geklickten Buttons
  while(1)
  {
    if (myTouch.dataAvailable() == true)
    {
      m_press = myButtons.checkButtons();
      // Je nach ausgewahltem Button wird Funktion mit Parameter aufgerufen
      if (m_press==main_but1) l_1_screen(1);
      if (m_press==main_but2) l_1_screen(2);
      if (m_press==main_but3) l_1_screen(3);
      // Hoch zu Start um Hauptmenu (wieder) anzuzeigen
      goto start;
    }
  }
}
/* Funktion stellt je nach Auswahl im Hauptmenu
das zugehoerige Submenu dar */
void l_1_screen(unsigned int submenu)
{
  // Footertext Submenu
  const char sfootertext[]="Submenue: ";
  // Zusatzbutton fuer Ruecksprung ins Hauptmenu und aktuell geklickter Button
  unsigned int main_but4,m_press_2;
  // Buttons des Hauptmenu loeschen
  myButtons.deleteAllButtons();
  // Je nach Auswahl Submenu neue Buttons setzen
  switch (submenu)
  {
  case 1:
    main_but1=myButtons.addButton(10,50,300,30,"S-Menu-11");
    main_but2=myButtons.addButton(10,80,300,30,"S-Menu-12");
    main_but3=myButtons.addButton(10,110,300,30,"S-Menu-13");
    break;
  case 2:
    main_but1=myButtons.addButton(10,50,300,30,"S-Menu-21");
    main_but2=myButtons.addButton(10,80,300,30,"S-Menu-22");
    main_but3=myButtons.addButton(10,110,300,30,"S-Menu-23");
    break;
  case 3:
    main_but1=myButtons.addButton(10,50,300,30,"S-Menu-31");
    main_but2=myButtons.addButton(10,80,300,30,"S-Menu-32");
    main_but3=myButtons.addButton(10,110,300,30,"S-Menu-33");
    break;
  }
  // Zurueck-Button setzen um ins Hauptmenu zu kommen
  main_but4 = myButtons.addButton (10,140,300,30,"Zurueck");
  while(2)
  {
    if (myTouch.dataAvailable() == true)
    {
      myButtons.drawButtons();
      myGLCD.print(sfootertext, 20, 200);
      // Text welches Submenu
      myGLCD.printNumI(submenu, 160, 200);
      myGLCD.setColor(VGA_WHITE);
      m_press_2 = myButtons.checkButtons();
      // Aufruf der Funktionen zu den Submenubuttons
      switch (submenu)
      {
      case 1:
        if (m_press_2==main_but1) do_s_11();
        if (m_press_2==main_but2) do_s_12();
        if (m_press_2==main_but3) do_s_13();
        break;
      case 2:
        if (m_press_2==main_but1) do_s_21();
        if (m_press_2==main_but2) do_s_22();
        if (m_press_2==main_but3) do_s_33();
        break;
      case 3:
        if (m_press_2==main_but1) do_s_31();
        if (m_press_2==main_but2) do_s_32();
        if (m_press_2==main_but3) do_s_33();
        break;
      }
      if (m_press_2==main_but4) break;
    }
  }
  // Buttons des Submenu loeschen
  myButtons.deleteAllButtons();
  myGLCD.clrScr(); // LCD leeren
  return; // raus aus Funktion
}
/* Die Funktionen hinter den Submenueintraegen
sonst läuft der Sketch nicht */
void do_s_11(){
}
void do_s_12(){
}
void do_s_13(){
}
void do_s_21(){
}
void do_s_22(){
}
void do_s_23(){
}
void do_s_31(){
}
void do_s_32(){
}
void do_s_33(){
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.12.2013, 03:05
Beitrag #2
RE: Menü mit Submenüs auf LCD Touch Screen
Hallo Ricardo,

danke für den guten Job.

Der Link zu den Bibliotheken ist leider der gleiche wie zur Hardware.

Gruß Joe

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.12.2013, 07:34
Beitrag #3
RE: Menü mit Submenüs auf LCD Touch Screen
Moin Joe,

danke für den Dank Smile

Ja, der Link für die Lib war Unsinn. Nimm bitte die Lib aus Touch.zip von hier:
http://www.arduinoforum.de/arduino-Threa...een?page=2

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.12.2013, 19:38
Beitrag #4
RE: Menü mit Submenüs auf LCD Touch Screen
Es funktioniert...

gruselig gut ...

hab nix zu meckern...

Ok, was mach ich dann hier???


Uwe

Martin Luther King sagte am 28 August 1963 :

I have a Dream !!

Ich bin weiter:

I have a Schaltplan !!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 11:28
Beitrag #5
RE: Menü mit Submenüs auf LCD Touch Screen
Hallo Ricardo,

vielen Dank für das Menü!
Ich hätte dazu nur eine Frage, wie komme ich denn wieder in das Hauptmenü wenn ich im ausgewählten Submenü bin?

Code:
/* Die Funktionen hinter den Submenueintraegen
sonst läuft der Sketch nicht */
void do_s_11(){
}
void do_s_12(){
}
void do_s_13(){
}

Ich habe in void do_s11 zum Beispiel eine eine Anzeige einer Spannung laufen, das setzten des Buttons Zurück etc. klappt. Aber wie sage ich dem Button nun dass er ins Hauptmenü zurück soll?

Ist mein erstes Project mit Arduino...

Gruß
Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 17:19
Beitrag #6
RE: Menü mit Submenüs auf LCD Touch Screen
Hallo,

zum Menuecode von Ricardo hier noch eine Ergänzug zum Thema.
http://www.arduinoforum.de/arduino-Threa...aufproblem

Gruß Franz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 17:34
Beitrag #7
RE: Menü mit Submenüs auf LCD Touch Screen
Siehe Info von Franz!
Generell ist der Code so geschrieben (auch der korrigierte) dass man von den do_s_xx - Funktionen in die 2. Menüebene zurückkommt und von dort in die 1. Ebene, also das Hauptmenü.
In den do_s_xx - Funktionen musst du ebenfalls einen "Zurück"-Button einbauen und diesen dann abfragen wie in der 2. Ebene auch. Also etwa so:
Code:
unsigned int zur_button;
int m_press;
zur_button = myButtons.addButton (10,140,300,30,"Zurueck"); // Koordinaten anpassen
while(2)
  {
    if (myTouch.dataAvailable() == true)
    {
      myButtons.drawButtons();
      if (m_press==zur_button) break;
    }
  }
return;
}
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2014, 19:00 (Dieser Beitrag wurde zuletzt bearbeitet: 29.09.2014 20:14 von Bavarian.)
Beitrag #8
RE: Menü mit Submenüs auf LCD Touch Screen
Servus Franz, Ricardo,

vielen Dank für eure Antworten.
Ich habe zwar meinen schönen "Back" Button und der unterbricht auch die Schleife aber das Return führt immer an den Anfang der void do_x_xx zurück und leider nicht in die Ebene drüber.

Habs grad in der do_s_31 und so wie Du schreibst müsste ich mit return; dann zu case: 3 gelangen oder?

Übrigens habe ich das Problem auch mit der bereinigten Version.


Gruß
Christian


(28.09.2014 17:34)rkuehle schrieb:  Siehe Info von Franz!
Generell ist der Code so geschrieben (auch der korrigierte) dass man von den do_s_xx - Funktionen in die 2. Menüebene zurückkommt und von dort in die 1. Ebene, also das Hauptmenü.
In den do_s_xx - Funktionen musst du ebenfalls einen "Zurück"-Button einbauen und diesen dann abfragen wie in der 2. Ebene auch. Also etwa so:
Code:
unsigned int zur_button;
int m_press;
zur_button = myButtons.addButton (10,140,300,30,"Zurueck"); // Koordinaten anpassen
while(2)
  {
    if (myTouch.dataAvailable() == true)
    {
      myButtons.drawButtons();
      if (m_press==zur_button) break;
    }
  }
return;
}
Grüße Ricardo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste