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 - 4 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Touchscreen - Problem mit den Buttons
06.02.2014, 21:33
Beitrag #1
Touchscreen - Problem mit den Buttons
Hallo
Habe versucht eine passende Antwort zu meinem Problem zu finden, leider vergebens.
Hoffe ihr könnt mir helfen

ich nutze ein Arduino Mega 2560 mit Touchscreen.
Hier ist der Code

Code:
#include <UTFT.h>            
#include <UTouch.h>
#include <UTFT_Buttons.h>
extern uint8_t BigFont[];    
extern uint8_t SmallFont[];

UTFT          myGLCD(ITDB32S,38,39,40,41);
UTouch        myTouch(6,5,4,3,2);
UTFT_Buttons  myButtons(&myGLCD, &myTouch);
unsigned int main_but1, main_but2,main_but3, start_but, stop_but;
int m_press;
int led = 13;
void setup() {  
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(BigFont);  
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);  
  myButtons.setTextFont(BigFont);
  pinMode(led,OUTPUT);  
}

void loop(){
  const boolean default_colors = true;
start:  
//Button Hauptmenue
  main_but1 = myButtons.addButton (30,60,260,40,"LED SETUP");
  main_but2 = myButtons.addButton (30,110,260,40,"GAME SETUP");
  start_but = myButtons.addButton (30,160,125,40,"Start");
  stop_but = myButtons.addButton (165,160,125,40,"Stop");
  myButtons.drawButtons();
  
// Abfrage der geklickten Buttons
  while(1)
  {
    if (myTouch.dataAvailable() == true)
    {
      m_press = myButtons.checkButtons();
    
      if (m_press==main_but1) l_1_screen(1);
      if (m_press==main_but2) l_1_screen(2);
      if (m_press==start_but) do_s_98();
      if (m_press==stop_but) do_s_99();
      goto start;    
     }
  }  
}
// Funktion
void l_1_screen(unsigned int submenu)
{
      myButtons.deleteAllButtons();
      myGLCD.clrScr();
      myButtons.checkButtons();
      unsigned int main_but4,m_press_2;
      
      switch (submenu)
     {
     case 1:
     main_but1=myButtons.addButton(20,60,50,50,"11");
     main_but2=myButtons.addButton(80,60,50,50,"12");
     main_but3=myButtons.addButton(140,60,50,50,"13");
     break;
     case 2:
     main_but1=myButtons.addButton(20,60,50,50,"21");
     main_but2=myButtons.addButton(80,60,50,50,"22");
     main_but3=myButtons.addButton(140,60,50,50,"23");
     break;      
     }
    // Zurueck-Button setzen um ins Hauptmenu zu kommen
     main_but4 = myButtons.addButton (30,190,260,40,"Return");
     myButtons.drawButtons();
     while(2)
     {
       if (myTouch.dataAvailable() == true)
        {
          myButtons.drawButtons();
          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_23();
            break;
          }
        if (m_press_2==main_but4) break;
        }
     }  
  myButtons.deleteAllButtons();
  myGLCD.clrScr();
  return;
}

void do_s_11(){digitalWrite(led, HIGH);
}
void do_s_12(){digitalWrite(led, LOW);
}
void do_s_13(){
  do{  
  digitalWrite(led, HIGH);  
  delay(1000);              
  digitalWrite(led, LOW);    
  delay(1000);
} while(2);
}    
void do_s_21(){
}
void do_s_22(){
}
void do_s_23(){
}
void do_s_98(){digitalWrite(led, HIGH);
}
void do_s_99(){digitalWrite(led, LOW);
}

So, nun zum Problem.
das hin und her schalten zwischen dem Hauptmenü und dem beiden unter Menüs "Led Setup" und "Game Setup" funktioniert auch wunderbar.
Die Hinterlegten Funktionen im "Led Setup" auf 11 und 12 klappt auch ohne Probleme. Bei der Funktion die hinter 13 hinterlegt ist sollte ausgewählt werden und so lange laufen bis eine weitere Taste gedrückt wird die das beendet oder wieder 11 oder 12 gewählt werden. Hierzu fehlt mir noch die Idee. Zurzeit startet die Taste 13 die Schleife danach kann ich aber nichts mehr machen.

Ein weiteres Problem ist die Start/Stop Tasten was im Untermenü mit 11/12 wunderbar klappt funktioniert hier leider nicht. Kann die LED zwar anmachen aber danach kann ich wieder keinen Button mehr betätigen.

Hoffe das ich das einigermaßen erklären konnte.

Gruß Kücki
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2014, 16:29
Beitrag #2
RE: Touchscreen - Problem mit den Buttons
Hallo Kücki,

dass du in der do_s13() nix mehr machen kannst liegt an der Zeile "while(2);"
Die Funktion gibt immer wahr zurück, und da du im while nix tust, tut der Arduino auch nix ausser dort zu verweilen.
Die Frage ist was du mit "...eine weitere Taste gedrückt ..." meinst. Eine taste oder einen Button auf dem GLCD?
Wenn es ein Button auf dem GLCD sein soll, machst du in der do_s13() eine weitere
.dataAvailable und .checkButtons - Abfrage innerhalb der while(2), ganz genauso wie für die anderen Menüebenen.
Wenn die Taste sowas wie ein Pushbutton / echte Taste sein soll musst du den Status des Buttons innerhalb der whil(2) abfragen und bei Änderung des Status reagieren und aus der while(2) rausspringen. Guckst du hier: http://arduino.cc/en/Tutorial/ButtonStateChange

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2014, 18:02
Beitrag #3
RE: Touchscreen - Problem mit den Buttons
Danke für die Hilfe
Im Hauptmenü funktioniert das jetzt mit dem schalten der Led.

Im Untermenü"LEDs Setup" leider noch nicht so.
Habe versucht auch hier .dataAvailable und .checkButtons einzubringen leider gelinkt mir das nicht so recht.
Muss das in die Klammer von "while" stehen oder dahinter?

Hier einer meiner versuche:
Code:
void do_s_13(){
    do{
    digitalWrite (led, HIGH);
    delay (500);
    digitalWrite (led,LOW);
    delay(500);
    }
   while(3);{
     if (myTouch.dataAvailable() == true)
        {
          m_press_2 = myButtons.checkButtons();
        }
   }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.02.2014, 13:44
Beitrag #4
RE: Touchscreen - Problem mit den Buttons
Hallo

Habe das jetzt soweit hin bekommen, das wenn ich die Schleife anwähle das die LED blinkt bis ich einen anderen Button drücke. Was leider noch nicht funktioniert ist das, wenn ich das Menü verlassen möchte und den Zurück-Button drücke das den auch die LED weiterblinkt.


Hier der Code:
Code:
void do_led_1(){  
          while(1){
             digitalWrite (led, HIGH);
             delay(500);
             digitalWrite (led, LOW);
             delay(500);
            
              if (myTouch.dataAvailable() == true)
              {
                press_2 = myButtons.checkButtons();
                if (press_2==led_but2){
                    do_led_2();}
                if (press_2==led_but3){
                    do_led_3();}
                if (press_2==led_but4){
                    do_led_4();}
                if (press_2==main_but4) break;
                return;                
              }          
           }
        }


Habe schon mehrer Varianten ausprobiert aber funktioniert alles nicht so wie ich mir das vorstelle.

Gruß Kücki
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2014, 18:19
Beitrag #5
RE: Touchscreen - Problem mit den Buttons
Hallo Kücki,

nimm mal
Code:
digitalWrite (led, HIGH);
    delay(500);
    digitalWrite (led, LOW);
    delay(500);
aus der while Schleife raus und setze es davor. Generell würde ich sowas in eine eigene Funktion packen, da es nicht wirklich zur Menüsteuerung dazugehört.

Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2014, 20:39
Beitrag #6
RE: Touchscreen - Problem mit den Buttons
Hi,
das ist auch nicht direkt in der Menüsteuerung. Das ist quasi der Code hintern dem Schalter das wenn die LED Szene läuft ich aus dieser die anderen schalten kann, klappt auch ganz gut. Mit dem Off Button funktioniert auch ganz gut. Was nicht funktioniert ist das wenn ich das Menü verlassen möchte (als zurück ins Hauptmenü gehe) das die LED dann weiterblinkt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.02.2014, 08:15
Beitrag #7
RE: Touchscreen - Problem mit den Buttons
Hallo Kücki,

jetzt hab ich es kapiert.
Klar die Led blinkt nicht mehr weil du die Funktion, in der
Zitat:digitalWrite (led, HIGH);
delay(500);
digitalWrite (led, LOW);
delay(500);
steht ja dann verlässt. Somit wird der Code auch nicht mehr ausgeführt.
Ich würde es folgendermaßen machen:
1. Den Code in eine Funktion abc auslagern
2. Anstatt Delay() mit millis() arbeiten, da bei delay() der Arduino nix macht.
3. bei
Code:
if (m_press_2==main_but3) do_s_13();
eine Variable setzen.
4. die Funktion abc in die Loop() rein und ausführen wenn die Variable einen bestimmtem Wert hat. Die Variable muss vor Setup() deklariert werden, da sie von überall erreichbar sein muss (global).

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2014, 21:47 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2014 21:49 von Kücki.)
Beitrag #8
RE: Touchscreen - Problem mit den Buttons
Hi
Danke das mit "millis" hat mich jetzt schon mal ordentlich weiter gebraucht.
Habe mich jetzt mit "millis" vertraut gemacht.

Meine Motorsteuerung funktioniert damit super(Motor dreht in zufälligen Richtungen vor und zurück)

Die Led´s damit blinken zu lassen funktioniert auch ganz gut.

Was leider damit immer noch nicht hin haut ist das sie die ganze Zeit weitere Blinken wenn ich mich im Menü bewege. Wenn ich die LEDSzene ausgewählt habe startet sie jetzt erst wenn ich wieder im Hauptmenü bin. Wenn ich den wieder in die Untermenüs gehe oder den Start-Knopf drücke bleiben sie in letzten zustand stehen, solange bis ich mich wieder im Hauptmenü befinde.

Soweit ich das hoffentlich richtig verstanden habe machen sie das ja weil ich den LOOP verlasse und ne andere Funktion ausführe. Aber es müsste doch möglich seit das Blinken auswählen zu können wie du geschrieben hast mit einer Variablen und erst wenn ich diese wieder auf "false" setze das es dann erst auf hört zu blinken.
Habe jetzt den ganzen Tag mehrere Varianten ausprobiert.
Finde aber nicht den richtigen Ansatz
Hoffe das dazu jemand noch ne Idee hat.

Hier noch mal der Code vom Loop
Code:
void loop() {
start:
//Button Hauptmenue
  myButtons.setTextFont(BigFont);
  main_but1 = myButtons.addButton (30,60,260,40,"LED SETUP");
  main_but2 = myButtons.addButton (30,110,260,40,"GAME SETUP");
  start_but = myButtons.addButton (30,160,125,40,"Start");
  stop_but = myButtons.addButton (165,160,125,40,"Stop", BUTTON_DISABLED);
  myButtons.drawButtons();
  while(1)
  {
    
    if (myTouch.dataAvailable() == true)
    {
      m_press = myButtons.checkButtons();
    
      if (m_press==main_but1) l_1_menu='L';        
      if (m_press==main_but2)l_1_menu='G';          
      if (m_press==start_but){
          myButtons.enableButton(stop_but, true);
          myButtons.disableButton(start_but, true);
          myButtons.disableButton(main_but1, true);
          myButtons.disableButton(main_but2, true);
          do_start_motor();}        
      if (m_press==stop_but){
          myButtons.enableButton(start_but, true);
          myButtons.enableButton(main_but1, true);
          myButtons.enableButton(main_but2, true);
          myButtons.disableButton(stop_but, true);          
          do_stop_motor();}
      l_1_screen(l_1_menu);
      goto start;
    }
if(led_szene==1)
   {if (millis() - aktuelle_zeit_1 > 500) {
    aktuelle_zeit_1 = millis();  
    led_status_1 = !led_status_1;
    digitalWrite(led_1, led_status_1);
    }
}    
}
}

Gruß Kücki
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Adafruit 2.8" Color TFT Touchscreen mittlig1977 3 207 14.10.2016 22:23
Letzter Beitrag: Tommy56
  Problem mit SD Card Library BennIY 4 192 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Problem mit SD.remove Eichner 6 212 22.08.2016 19:42
Letzter Beitrag: Eichner
  4x16 Tastermatrix Problem Michel 16 846 14.07.2016 10:02
Letzter Beitrag: StephanBuerger
  Problem mit Delay und Millis funnyzocker 1 458 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 599 13.06.2016 21:14
Letzter Beitrag: torsten_156
  ESP8266_01 flashen - Problem torsten_156 12 1.051 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 480 19.05.2016 12:25
Letzter Beitrag: amithlon
  ESP8266 HTML Problem arduino_weatherstation 1 497 25.04.2016 21:52
Letzter Beitrag: rkuehle
  3,2 zoll Touchscreen Kalibrierungsproblem ElAleMaNo 9 964 10.04.2016 20:06
Letzter Beitrag: rkuehle

Gehe zu:


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