TFT Push Buttons

hallo

jetzt hab ich alles soweit das es aussieht wie ich es haben möchte Touch und eine Relaiskarte die mir dann alles schaltet nur habe ich ein problem wie kann man die buttons auf den display genau positionieren denn zur zeit gehen alle relais zusammen an und aus die schrift passt nur die Push buttons anscheinen nicht könnt ihr mir da helfen

mein script:

#include <UTFT.h>
#include <ITDB02_Touch.h>

// Declare which fonts we will be using
extern uint8_t BigFont[];// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int Relais6 = 13;
int Relais5 = 12;
int Relais4 = 11;
int Relais3 = 10;
int Relais2 = 9;
int Relais1 = 8;

// Uncomment the next line for Arduino 2009/Uno
//UTFT myGLCD(ITDB32S,19,18,17,16);   // Remember to change the model parameter to suit your display module!
//ITDB02_Touch  myTouch(15,10,14,9,8);

// Uncomment the next line for Arduino Mega
UTFT myGLCD(ITDB32S,38,39,40,41);   // Remember to change the model parameter to suit your display module!
ITDB02_Touch  myTouch(6,5,4,3,2);

int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";

void setup()
{
// Initial setup
  myGLCD.InitLCD(LANDSCAPE);
  myGLCD.clrScr();

  myTouch.InitTouch(LANDSCAPE);
  myTouch.setPrecision(PREC_MEDIUM);

  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(0, 0, 255);

// initialize the digital pin as an output.
  pinMode(Relais6, OUTPUT);
  pinMode(Relais5, OUTPUT); 
  pinMode(Relais4, OUTPUT);
  pinMode(Relais3, OUTPUT);
  pinMode(Relais2, OUTPUT);
  pinMode(Relais1, OUTPUT);

  
  
// Draw the upper row of buttons
  for (x=0; x<8; x++);
    {
  myGLCD.setBackColor (0, 0, 255);
  myGLCD.setColor(255, 255, 255);
  myGLCD.print("BAD", 10, 20);
  myGLCD.fillRoundRect (190, 15, 240, 40);
  myGLCD.drawRoundRect (190, 15, 240, 40);
  myGLCD.print("ON", 200, 20);
  myGLCD.fillRoundRect (250, 15, 300, 40);
  myGLCD.drawRoundRect (250, 15, 300, 40);  
  myGLCD.print("OFF", 250, 20);
  myGLCD.print("KUECHE", 10, 60);
  myGLCD.fillRoundRect (190, 55, 240, 80);
  myGLCD.drawRoundRect (190, 55, 240, 80);
  myGLCD.print("ON", 200, 60);
  myGLCD.fillRoundRect (250, 55, 300, 80);
  myGLCD.drawRoundRect (250, 55, 300, 80);
  myGLCD.print("OFF", 250, 60);
  myGLCD.print("WOHN", 10, 100);
  myGLCD.fillRoundRect (190, 95, 240, 120);
  myGLCD.drawRoundRect (190, 95, 240, 120);
  myGLCD.print("ON", 200, 100);
  myGLCD.fillRoundRect (250, 95, 300, 120);
  myGLCD.drawRoundRect (250, 95, 300, 120);
  myGLCD.print("OFF", 250, 100);
  myGLCD.print("POOL", 10, 140);
  myGLCD.fillRoundRect (190, 145, 240, 160);
  myGLCD.drawRoundRect (190, 145, 240, 160);
  myGLCD.print("ON", 200, 140);
  myGLCD.fillRoundRect (250, 145, 300, 160);
  myGLCD.drawRoundRect (250, 145, 300, 160);
  myGLCD.print("OFF", 250, 140);
  myGLCD.print("RADIO", 10, 180);
  myGLCD.fillRoundRect (190, 195, 240, 200);
  myGLCD.drawRoundRect (190, 195, 240, 200);
  myGLCD.print("ON", 200, 180);
// myGLCD.fillRoundRect (190, 15, 240, 40);
 // myGLCD.drawRoundRect (190, 15, 240, 40);
  myGLCD.print("OFF", 250, 180);
  myGLCD.print("LEER", 10, 220);
 // myGLCD.fillRoundRect (190, 15, 240, 40);
 // myGLCD.drawRoundRect (190, 15, 240, 40);
  myGLCD.print("ON", 200, 220);
 // myGLCD.fillRoundRect (190, 15, 240, 40);
 // myGLCD.drawRoundRect (190, 15, 240, 40);
  myGLCD.print("OFF", 250, 220);
  }
  //myGLCD.print("0", 267, 87);
// Draw the lower row of buttons
  //myGLCD.setColor(0, 0, 255);
  //myGLCD.fillRoundRect (10, 130, 150, 180);
  //myGLCD.setColor(255, 255, 255);
  //myGLCD.drawRoundRect (10, 130, 150, 180);
  //myGLCD.print("Clear", 40, 147);
  //myGLCD.setColor(0, 0, 255);
  //myGLCD.fillRoundRect (160, 130, 300, 180);
  //myGLCD.setColor(255, 255, 255);
  //myGLCD.drawRoundRect (160, 130, 300, 180);
  //myGLCD.print("Enter", 190, 147);
  //myGLCD.setBackColor (0, 0, 0);

}

void updateStr(int val)
{
  if (stCurrentLen<20)
  {
    stCurrent[stCurrentLen]=val;
    stCurrent[stCurrentLen+1]='\0';
    stCurrentLen++;
    myGLCD.setColor(0, 255, 0);
    myGLCD.print(stCurrent, LEFT, 224);
  }
  else
  {
    myGLCD.setColor(255, 0, 0);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    delay(500);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    myGLCD.setColor(0, 255, 0);
  }
}
// Draw a red frame while a button is touched
void waitForIt(int x1, int y1, int x2, int y2)
{
  myGLCD.setColor(255, 0, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  while (myTouch.dataAvailable())
    myTouch.read();
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
}
void loop()
{
  while (true)
  {
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
      
      if ((y>=15) && (y<=120))  // Upper row
      {
        if ((x>=190) && (x<=240))  // Button: Bad ON
        digitalWrite(Relais1, LOW);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(190, 15, 240, 40);
                  }
        if ((x>=250) && (x<=300))  // Button: Bad OFF
        digitalWrite(Relais1, HIGH);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(250, 15, 300, 40);
         
            
        if ((x>=190) && (x<=240))  // Button: Kueche ON
        digitalWrite(Relais2, LOW);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(190, 55, 240, 80);
         
        }
        if ((x>=250) && (x<=300))  // Button: Kueche OFF
        digitalWrite(Relais2, HIGH);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(250, 55, 300, 80);
        
        }
        if ((x>=190) && (x<=240))  // Button: Wohn ON
        digitalWrite(Relais3, LOW);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(190, 95, 240, 120);
       
        if ((x>=250) && (x<=300))  // Button: Wohn OFF
        digitalWrite(Relais3, HIGH);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(250, 95, 300, 120);

        }
        if ((x>=190) && (x<=240))  // Button: POOL ON
        digitalWrite(Relais4, LOW);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(190, 145, 240, 160);
        
        }
        if ((x>=250) && (x<=300))  // Button: POOL OFF
        digitalWrite(Relais4, HIGH);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(250, 145, 300, 160);
        
        }
        if ((x>=190) && (x<=240))  // Button: Radio ON
        digitalWrite(Relais5, LOW);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(190, 195, 240, 200);
        
        }
        if ((x>=250) && (x<=300))  // Button: Radio OFF
        digitalWrite(Relais5, HIGH);   // turn the LED on (HIGH is the voltage level)
        {
          waitForIt(250, 195, 300, 200);
       
        }
      }

      //if ((y>=10) && (y<=180))  // Upper row
      {
       // if ((x>=10) && (x<=150))  // Button: Clear
        {
         // waitForIt(10, 130, 150, 180);
         // stCurrent[0]='\0';
         // stCurrentLen=0;
         // myGLCD.setColor(0, 0, 0);
          //myGLCD.fillRect(0, 224, 319, 239);
        }
       // if ((x>=160) && (x<=300))  // Button: Enter
        {
        //  waitForIt(160, 130, 300, 180);
        //  if (stCurrentLen>0)
          {
         //   for (x=0; x<stCurrentLen+1; x++)
            {
         //     stLast[x]=stCurrent[x];
            }
         //   stCurrent[0]='\0';
         //   stCurrentLen=0;
         //   myGLCD.setColor(0, 0, 0);
         //   myGLCD.fillRect(0, 208, 319, 239);
         //   myGLCD.setColor(0, 255, 0);
         //   myGLCD.print(stLast, LEFT, 208);
          }
//          else
          {
            //myGLCD.setColor(255, 0, 0);
            //myGLCD.print("BUFFER EMPTY", CENTER, 192);
            //delay(500);
            //myGLCD.print("            ", CENTER, 192);
            //delay(500);
            //myGLCD.print("BUFFER EMPTY", CENTER, 192);
            //delay(500);
            //myGLCD.print("            ", CENTER, 192);
            //myGLCD.setColor(0, 255, 0);
     
   }
   }
   }
   }
   }
   }
   }
   }

danke

Bitte schreib uns welche Shield bzw display Du hast. (am besten Link zum Verkäufer).
Grüße Uwe

sorry
habe das arduinio 2560 mit 3,2" touch mit tft Shield von sainsmart
http://www.ebay.de/itm/221082189384?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649#ht_5886wt_1102

Hallo,

myGLCD.setBackColor (0, 0, 255);

  • myGLCD.setColor(255, 255, 255);*
  • myGLCD.print("BAD", 10, 20);*
  • myGLCD.fillRoundRect (190, 15, 240, 40);*
  • myGLCD.drawRoundRect (190, 15, 240, 40);*

hier die Reihenfolge ändern, zuerst das Rechteck füllen, dann beschriften, sonst sieht man die Schrift nicht;

if ((y>=15) && (y<=120)) // Upper row

  • {*
  • if ((x>=190) && (x<=240)) // Button: Bad ON*

hier und bei den weiteren Abfragen (if) die Werte anpassen (Upper Row y>=15 y<=40, x Werte entsprechend, gleiche Werte wie bei draw und fill);

Ich habe eine Klasse erstellt, die Steuerelemente für Touchdisplays enthält.
Also Push-Button, Slider und sowas...

Alles noch im Aufbau und undokumentiert. Buttons gehen aber zu 100%.
Hast du Interesse sowas einzusetzen oder willst du deinen "Eigenen Weg" gehen?

Implementierung wäre wie folgt:

// Include
  #include <Steuerelemente.h>

// Define
  DeElemente Button[AnzButton];

// Init Klasse
  for (int i=0;i<AnzButton;i++) Button[i].Clear();
  for (int i=0;i<AnzButton;i++) Button[i].SetGLCD(myGLCD);

// Int Buttons
  Button[0].Init(90,20,80,50, "AN", ElementButton);
  Button[0].FunctionRelease = Funktion1;

  Button[1].Init(90,80,80,50, "AUS", ElementButton);
  Button[1].FunctionRelease = Funktion2;

  Button[2].Init(90,140,80,50, "NEU", ElementButton);
  Button[2].FunctionRelease = Funktion3;

// Zeichnen
  for (int i=0;i<AnzButton;i++) Button[i].drawElement();

// Touch-Aktionen müssen weitergegeben werden:

    for (int i=0;i<AnzButton;i++) Button[i].Push(x,y);
    for (int i=0;i<AnzButton;i++) Button[i].Move(x,y);
    for (int i=0;i<AnzButton;i++) Button[i].Release(x,y);

void Funktion1()
{
 // dein Code bei "AN" Button loslassen
}

void Funktion2()
{
 // dein Code bei "AN" Button loslassen
}

void Funktion3()
{
 // dein Code bei "AN" Button loslassen
}

I ich wäre interessiert
Was habt ihr für Bücher dazu gehabt?

Habs dir geschickt: PN

Poser, kommst du damit zurecht?

würde gerne Posers frage von weiter oben nochmal aufrollen:

Was habt ihr für Bücher dazu gehabt?

Habe mir ebenfalls ein TouchShield angeschafft ( das selbe wie Poser) und stehe nun etwas verloren da was das Programmieren von Touch Shields angeht. Könnt ihr irgendwelche Bücher, Internetseiten, pdf´s, ect. empfehlen die einem den Einstieg erleichtern ?

Gruß

Ich habe keine Bücher verwendet was das Programmieren von Controllern angeht.Zum erlernen der Sprachen ansich schon, jedoch ist selten beschrieben, wie bei sowas das grundsätzliche Vorgehen ist.

Meiner Meinung nach, sollte man sich erst einmal C-Grundkenntnisse anschaffen und dann mit seinen Aufgaben wachsen.

Der direkte Einstig ins Touchdisplay und Grafikroutinen ist ein großer Schritt, wenn keine Vorkenntnisse vorhanden sind.

Welche Vorkenntnisse sind denn vorhanden?

hy,

ich habe vor gut 2 Monaten ohne Vorkenntnisse der Programmierung mit "Arduino" angefangen.

Und wo hängst du jetzt genau?
Geht das Display?
Hast du schon bissle "rumgezeichet"?

hey,

ok jetzt weiß ich wo ich dir antworten soll :slight_smile: sry nochmal. Mein Problem ist das ich nicht weiß wie ich die Beispieldatein auf den Arduino einspielen kann weil da alles nur Processing dateien sind und ich bis jetzt nur über das arduino programm den Arduino beschrieben habe. Kannst du weiterhelfen?

Gruß,
Tobi