Go Down

Topic: TFT Push Buttons (Read 2747 times) previous topic - next topic

Poser

Oct 30, 2012, 07:27 am Last Edit: Oct 30, 2012, 08:45 am by uwefed Reason: 1
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:


Code: [Select]
#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

uwefed

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

Poser

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


Arduinokiller

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);

mde110

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:

Code: [Select]
 
// 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
}



Poser

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

mde110

Habs dir geschickt: PN

mde110

Poser, kommst du damit zurecht?

Tobias93

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

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ß
Nobody is perfect but - impossible is nothing

mde110

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?

Tobias93

hy,

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

Nobody is perfect but - impossible is nothing

mde110

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

Tobias93

hey,

ok jetzt weiß ich wo ich dir antworten soll :-) 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
Nobody is perfect but - impossible is nothing

Go Up