Hallo mal wieder
Ich arbeite gerade an ein Projekt, welches ein Menü aus mehreren Seiten auf einem Touchscreen-Display darstellen und steuern soll. Es sollen später auf einer Seite Einstellungen (z.B. Uhrzeit) vorgenommen werden und auf einer anderen Seite einige Daten angezeigt werden.
Ich habe soweit als erstes eine Startseite erstellt, die durch einen einfachen Touch auf das Display zur nächsten Seite "Menue" (menue) springt. Dort habe ich zwei Button erstellt, die im Moment des Betätigens einen roten Rand haben, damit die Betätigung auch visuell erkennbar ist. Beim Betätigen des oberen Button, springt die Anzeige auf die Seite "Einstellungen" (setting). Beim Betätigen des unteren Button, springt die Anzeige auf die Seite "Startseite". Auf der Seite "Einstellungen" gibt es nur einen Button, der beim Betätigen die Seite "Menue" springt.
Nun zum Problem: Ich drücke auf der Startseite auf das Display>das Display springt auf die Menue-Seite. Danach drücke ich auf dieser Seite den unteren Button > das Display springt auf die Einstellungen-Seite. Drücke ich auf dieser Seite den einzelnen Button>springt das Display wieder auf die Startseite. Dort ins Display gedrückt>springt das Display wieder auf die Menue-Seite.
Bis jetzt ist alles so wie es sein soll. Nur geht es hier nicht mehr weiter. Ich kann nur noch den oberen Button betätigen(wird auch rot umrandet), aber leider springt das Display immer wieder in sich selbst(Menue-Seite) und der andere Button hat keine Funktion mehr.
Das selbe habe ich auch wenn ich von der Startseite>Menue-Seite>oberer Button drücken>Einstellungen-Seite>einziger Button drücken(soll eigentlich auf die Menue-Seite springen), springt das Display immer wieder in sich selbst(Einstellungen-Seite).
Anbei unten der Sketch und ein paar Bilder von den Screens.
Ich vermute einmal, dass im loop irgendetwas faul ist oder etwas fehlt und ich komme nicht drauf.
Hat vielleicht jemand eine Idee?
Vielen Dank schon mal.
// Remember to change the next line if you are using as 16bit module!
#include <ITDB02_Graph16.h>
#include <ITDB02_Touch.h>
#include <avr/pgmspace.h>
// Schriftarten in Benutzung
extern uint8_t SmallFont[];
extern uint8_t Sinclair_S[];
extern uint8_t Sinclair_M[];
extern uint8_t BigFont[];
//Pinbelegung für das Display+Touchscreen
//myGLCD(RS,WR,CS,RST,ALE,mode);
ITDB02 myGLCD(A1,A2,A0,A3,A5,ITDB32S);
//myTouch(TCLK,TCS,DIN,DOUT,IRQ);
ITDB02_Touch myTouch(13,10,11,12,A4);
//Konstanten
int cx, cy;
int rx[10], ry[10];
float px, py;
int ox, oy;
int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";
void setup()
{
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setFont(Sinclair_S);
myTouch.InitTouch();
myTouch.setPrecision(PREC_LOW);
}
/*void waitForTouchRelease()
{
// Wait for release
while (myTouch.dataAvailable()==true)
myTouch.read();
}*/
void waitForTouch()
{
while (myTouch.dataAvailable() == true)
{
myTouch.read();
}
while (myTouch.dataAvailable() == false) {}
while (myTouch.dataAvailable() == true)
{
myTouch.read();
}}
//zeichnet eine rote Umrandung, wenn der Button gedrückt wird
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);
}
//Aufbau der Startseite
void startseite()
{
myGLCD.setColor( 0, 0, 0); //setzt die Farbe im Hintergrund
myGLCD.fillRect(0, 0, 239, 320); //setzt die Größe und Position des Hintergrundes
myGLCD.setColor(255, 255, 255); //setzt die Schriftfarbe
myGLCD.setBackColor(0, 0, 237); //setzt die hinterleget Farbe des Textes
myGLCD.drawLine(0, 14, 239, 14); //setzt die Position und Länge der Linie
myGLCD.setColor( 0, 0, 237);
myGLCD.fillRect(0, 0, 239, 12); //setzt die Größe und Position des Hintergrundes
myGLCD.setColor(255, 255, 255);
myGLCD.print("Startseite by Knippi", CENTER, 3);
myGLCD.setBackColor(0, 0, 0);
myGLCD.setFont(Sinclair_M);
myGLCD.print("Startseite", CENTER, 30);
myGLCD.setFont(Sinclair_S);
myGLCD.setBackColor(0, 0, 237); //setzt die hinterleget Farbe des Textes
myGLCD.print("Touch screen to continue", CENTER, 305);
myGLCD.setBackColor(0, 0, 0); //setzt die hinterleget Farbe des Textes
myGLCD.print("jens.knipphals@gmx.de", CENTER, 290);
waitForTouch();
}
//Aufbau der Menueseite
void menue()
{
myGLCD.setColor( 0, 0, 0); //setzt die Farbe im Hintergrund
myGLCD.fillRect(0, 0, 239, 320); //setzt die Größe und Position des Hintergrundes
//myGLCD.setColor(255, 255, 255); //setzt die Schriftfarbe
myGLCD.setBackColor(255, 255, 0); //setzt die hinterleget Farbe des Textes
myGLCD.drawLine(0, 14, 239, 14); //setzt die Position und Länge der Linie
myGLCD.setColor( 255, 255, 0); //setzt die Farbe des Farbbalkens oben
myGLCD.fillRect(0, 0, 239, 13); //setzt die Größe und Position des Hintergrundes des Balkens oben
myGLCD.setColor(0, 0, 0); //setzt die Schriftfarbe für den nachfolgenden Text
myGLCD.print("Menue", CENTER, 3);
myGLCD.setBackColor(0, 0, 0); //setzt die Schriftfarbe für den nachfolgenden Texte
myGLCD.setFont(Sinclair_M);
myGLCD.setColor(255, 255, 255);
myGLCD.print("Menue", CENTER, 30);
myGLCD.setFont(Sinclair_S);
/* myGLCD.setBackColor(0, 0, 237); //setzt die hinterleget Farbe des Textes
myGLCD.print("Touch screen to continue", CENTER, 305);*/
myGLCD.setBackColor(0, 0, 0); //setzt die hinterleget Farbe des Textes
myGLCD.print("jens.knipphals@gmx.de", CENTER, 290);
//waitForTouch();
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (10, 60, 60, 10);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (10, 60, 60, 10);
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (60, 130, 10, 80);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (60, 130, 10, 80);
//myGLCD.print("1", 28, 27);
// waitForTouch();
waitForIt(10, 10, 60, 60);
}
//Aufbau der Settingseite
void setting()
{
myGLCD.setColor( 0, 0, 0); //setzt die Farbe im Hintergrund
myGLCD.fillRect(0, 0, 239, 320); //setzt die Größe und Position des Hintergrundes
myGLCD.setColor(255, 255, 255); //setzt die Schriftfarbe
myGLCD.setBackColor(255, 0, 0); //setzt die hinterleget Farbe des Textes
myGLCD.drawLine(0, 14, 239, 14); //setzt die Position und Länge der Linie
myGLCD.setColor( 255, 0, 0); //setzt die Farbe des Farbbalkens oben
myGLCD.fillRect(0, 0, 239, 12); //setzt die Größe und Position des Hintergrundes des Balkens oben
myGLCD.setColor(255, 255, 255);
myGLCD.print("Einstellungen", CENTER, 3);
myGLCD.setBackColor(0, 0, 0);
myGLCD.setFont(Sinclair_M);
myGLCD.print("Einstellungen", CENTER, 30);
myGLCD.setFont(Sinclair_S);
/* myGLCD.setBackColor(0, 0, 237); //setzt die hinterleget Farbe des Textes
myGLCD.print("Touch screen to continue", CENTER, 305);*/
myGLCD.setBackColor(0, 0, 0); //setzt die hinterleget Farbe des Textes
myGLCD.print("jens.knipphals@gmx.de", CENTER, 290);
//waitForTouch();
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (10, 60, 60, 10);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (10, 60, 60, 10);
//myGLCD.print("1", 28, 27);
// waitForTouch();
waitForIt(10, 10, 60, 60);
}
void loop ()
{
startseite();
menue();
// Betätigunsfunktion des oberer Button auf der Menueseite
while (true)
{
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((y>=10) && (y<=60)) // vertikaler Abstand (von oben)
{ if ((x>=179) && (x<=239)) // horizontaler Abstand (von rechts)
waitForIt(10, 10, 60, 60); //Größe des roten Umrandung
setting();
}
//Betätigunsfunktion des unteren Button auf der Menueseite
else if((y>=80) && (y<=130)) // vertikaler Abstand (von oben)
{ if ((x>=179) && (x<=239)) // horizontaler Abstand (von rechts)
waitForIt(10, 80, 60, 130); //Größe des roten Umrandung
startseite();
setting();
//Betätigunsfunktion des Button auf der Settingseite
{
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((y>=10) && (y<=60)) // vertikaler Abstand (von oben)
{ if ((x>=179) && (x<=239)) // horizontaler Abstand (von rechts)
waitForIt(10, 10, 60, 60); //Größe des roten Umrandung
menue();
delay(10);
}}}}}}}