Hilfe mit Touchscreen Buttons

Servus zusammen! Nachdem ich nun meine Hardware nochmal umgeworfen hab und alles soweit funktioniert, bin ich am Sketch schreiben und komme ganz gut voran. Ich orientiere mich hierbei hauptsächlich an den Beispielen von Rinky Dink Elecronics und versuche das für meine Zwecke umzugestalten.

Hardware ist jetzt: Arduino Mega 1560 R3 + Elecfreaks LCD Mega Shield v2.2 + 4.3" TFT01 Touchscreen

Ich versuche für meinen BMW einen Bordcomputer zu schreiben. Layout soll hierbei so aussehen:
Insgesamt soll es 3 Bildschirme geben, die über jeweils ein Symbol aufgerufen werden können. Ich habe schon rausgefunden, wie ich Bilder oder Icons einbinde, jedoch nicht, wie ich diese auf Berührung reagieren lasse. die IDE schmeißt hierbei immer folgenden Fehler:

/Users/GearX/Desktop/V8_Bordcomputer/V8_Bordcomputer.ino: In function 'void loop()':
V8_Bordcomputer:93: error: 'pressed_button' was not declared in this scope
pressed_button = myButtons.checkButtons();
^
exit status 1
'pressed_button' was not declared in this scope

Mein Script lautet wie folgt:

#include <UTFT.h>
#include <UTouch.h>
#include <UTFT_Buttons.h> // Button Lib

// Initialisiere Display
UTFT myGLCD(TFT01_43,38,39,40,41);

// Initialisiere Touchscreen
UTouch myTouch( 6, 5, 4, 3, 2);

// Initialisiere Buttons
UTFT_Buttons myButtons(&myGLCD, &myTouch);

// Benutzte Schriften
extern uint8_t BigFont[];
extern uint8_t SmallFont[];

// This code block is only needed to support multiple
// MCU architectures in a single sketch.
#if defined(AVR)
#define imagedatatype unsigned int
#elif defined(PIC32MX)
#define imagedatatype unsigned short
#elif defined(arm)
#define imagedatatype unsigned short
#endif
// End of multi-architecture block

// Benutzte Bitmaps
extern imagedatatype engine[];
extern imagedatatype oil[];
extern imagedatatype water[];

/*************************
** Required functions **
*************************/

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

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

// Setup the LCD
myGLCD.InitLCD(0);
myGLCD.setFont(BigFont);
// Clear the screen and draw the frame
myGLCD.clrScr();

myGLCD.setColor(0, 0, 0);
myGLCD.fillRect(0, 0, 479, 13);
myGLCD.setColor(0,0,0); // Hintergrund Fusszeile
myGLCD.fillRect(0, 258, 479, 271);

myGLCD.setColor(255,255,255); //Kopfzeile Schriftfarbe
myGLCD.setBackColor(0, 0, 0);
myGLCD.print("BMW E30 V8", CENTER, 5);

// myGLCD.setBackColor(0,0,0); //Fusszeile Hintergrund Schriftfarbe
// myGLCD.setColor(255,255,255); //Fusszeile Schriftfarbe
// myGLCD.print("Control Panel", CENTER, 460); //Text, Position, Zeile

// myGLCD.setColor(139,69,19); // BRAUN
// myGLCD.setColor(255,255,255); //WEISS
// myGLCD.drawRect(5,30,265,450); //Außenrahmen
// myGLCD.drawLine(5,90,265,90); //Unterteil Kopfzeile
// myGLCD.drawLine(135,30,135,450); //Senkrechter Trenner

}

void loop()
{
int but1, but2, but3;

but1 = myButtons.addButton(10,30,70,70, engine);
but2 = myButtons.addButton(105,30,70,70, oil);
but3 = myButtons.addButton(195,30,70,70, water);
myButtons.drawButtons();

myGLCD.setColor(255,255,255);
myGLCD.print("Auswahl:", 10, 110);
myGLCD.print("Keine", 140, 110);

while(1)
{
if (myTouch.dataAvailable() == true)
{
pressed_button = myButtons.checkButtons();

if (pressed_button==but1)
myGLCD.print("Motor ",140,110);
if (pressed_button==but2)
myGLCD.print("Oel ",140,110);
if (pressed_button==but3)
myGLCD.print("Wasser",140,110);
}
}

delay (10000);
}

Wie das ganze auf dem Bildschirm aussieht, hab ich auch mal angehängt.

Ich hoffe Ihr versteht, was ich meine und könnt mich bei meinem Vorhaben unterstützen :slight_smile:

So, es funktioniert jetzt, dass sich der Text ändert, wenn man die Buttons drückt. Ich kann mir aber nicht erklären warum! Was habe ich gemacht?

Den Teil void loop() aus dem Sketch UTouch_Buttons_Bitmap_Demo kopiert und meine Bildernamen und Positionen eingefügt. Anschließend habe ich den Sketch ausgedünnt, bis genau so viel übrig war, wie davor auch. Aber jetzt funktioniert es. Keine Ahnung wie das geht... Vielleicht kommt ja jemand drauf. Mein Sketch sieht jetzt so aus:

// This code block is only needed to support multiple
// MCU architectures in a single sketch.
#if defined(AVR)
#define imagedatatype unsigned int
#elif defined(PIC32MX)
#define imagedatatype unsigned short
#elif defined(arm)
#define imagedatatype unsigned short
#endif
// End of multi-architecture block

//Enthaltene Bibliotheken
#include <UTFT.h>
#include <UTouch.h>
#include <UTFT_Buttons.h>

// Benutzte Schriften
extern uint8_t BigFont[];
extern uint8_t SmallFont[];

// Benutzte Bitmaps
extern imagedatatype engine[];
extern imagedatatype oil[];
extern imagedatatype water[];

// Initialisiere Display
UTFT myGLCD(TFT01_43,38,39,40,41);

// Initialisiere Touchscreen
UTouch myTouch( 6, 5, 4, 3, 2);

// Initialisiere Buttons
UTFT_Buttons myButtons(&myGLCD, &myTouch);

void setup()

//Setup LCD, Touch
{
myGLCD.InitLCD(0);
myGLCD.clrScr();
myGLCD.setFont(BigFont);
myTouch.InitTouch(0);
myTouch.setPrecision(PREC_MEDIUM);
myButtons.setTextFont(BigFont);

// Setup Basis Layout
myGLCD.setColor(0, 0, 0);
myGLCD.fillRect(0, 0, 479, 13);
myGLCD.setColor(0,0,0); // Hintergrund Fusszeile
myGLCD.fillRect(0, 258, 479, 271);

myGLCD.setColor(255,255,255); //Kopfzeile Schriftfarbe
myGLCD.setBackColor(0, 0, 0);
myGLCD.print("BMW E30 V8", CENTER, 5);

// myGLCD.setBackColor(0,0,0); //Fusszeile Hintergrund Schriftfarbe
// myGLCD.setColor(255,255,255); //Fusszeile Schriftfarbe
// myGLCD.print("Control Panel", CENTER, 460); //Text, Position, Zeile

// myGLCD.setColor(139,69,19); // BRAUN
// myGLCD.setColor(255,255,255); //WEISS
// myGLCD.drawRect(5,30,265,450); //Außenrahmen
// myGLCD.drawLine(5,90,265,90); //Unterteil Kopfzeile
// myGLCD.drawLine(135,30,135,450); //Senkrechter Trenner

}

void loop()
{

int but1, but2, but3, pressed_button;

but1 = myButtons.addButton(10,30,70,70, engine);
but2 = myButtons.addButton(105,30,70,70, oil);
but3 = myButtons.addButton(195,30,70,70, water);
myButtons.drawButtons();

myGLCD.setColor(255,255,255);
myGLCD.print("Auswahl:", 10, 110);
myGLCD.print("Keine", 140, 110);

while(1)
{
if (myTouch.dataAvailable() == true)
{
pressed_button = myButtons.checkButtons();

if (pressed_button==but1)
myGLCD.print("Motor ",140,110);
if (pressed_button==but2)
myGLCD.print("Oel ",140,110);
if (pressed_button==but3)
myGLCD.print("Wasser",140,110);
if (pressed_button==-1)
myGLCD.print("Keine ",140,110);
}
}

delay (10000);
}

hi,

im ersten sketch hast Du

void loop()
{
int but1, but2, but3;

im zweiten:

void loop()
{
int but1, but2, but3, pressed_button;

variable muß man definieren...

gruß stefan