LCD touchscreen terug gaan naar het begin van de void loop

hallo, ik ben met mijn eindwerk bezig met een afvuurmechanisme van een tennisbal te ontwerpen, de bedoeling is dat ik de tennisbal in emmers die 12m ver staan schiet. De opstelling is in een driehoek dus ik hou met mijn tft touchscreen lcd scherm (480x320 op een arduino mega 2560) een emmer selecteren en dan dat het afvuurmechanisme zich daar naartoe richt (aan de hand van stappenmotoren). Maar ik zit met een probleem, ik heb 3 'tabladen'. Het eerste is gewoon inleiding dus daar moet je je niks van aantrekken, dan staat er tik om verder te gaan en als dat gedaan wordt, wordt de opstelling getoond van de 6 emmers. Als ik dan op 1 van de emmers druk is de bedoeling dat de stappenmotoren aangestuurd gaan worden (dit weet ik al hoe ik dat ga doen maar dat staat nog niet in de code). Als ik dus op een emmer klik, gaan alle emmers weg op die ene na. Nu zou ik als ik een tweede keer op de emmer klik terug willen gaan naar de volledige opstelling, alleen weet ik niet hoe ik dit moet doen. Als het nog niet heel duidelijk is stel dan gerust een vraag want ik heb een deadline tegen januari 2023
dit is de code

#if 1

#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <TouchScreen.h>
#define MINPRESSURE 200
#define MAXPRESSURE 1000

char *name = "Jaarproject 6IW"; //edit name of shield

TSPoint tp;

const int XP = 6, XM = A2, YP = A1, YM = 7; //ID=0x9341
const int TS_LEFT = 907, TS_RT = 136, TS_TOP = 942, TS_BOT = 139;

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

Adafruit_GFX_Button emmer1_btn, emmer2_btn, emmer3_btn, emmer4_btn, emmer5_btn, emmer6_btn;

int pixel_x, pixel_y; //Touch_getXY() updates global vars

bool Touch_getXY(void)
{
TSPoint p = ts.getPoint();
pinMode(YP, OUTPUT); //restore shared pins
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //because TFT control pins
digitalWrite(XM, HIGH);
bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
if (pressed) {
pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width()); //.kbv makes sense to me
pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
}
return pressed;
}

int16_t BOXSIZE;
int16_t PENRADIUS = 1;
uint16_t ID, oldcolor, currentcolor;
uint8_t Orientation = 0; //PORTRAIT

#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF

void show_tft(void)
{

tft.println("");
tft.setTextSize(3);
tft.println(name);
tft.setTextSize(2);
tft.println("");
tft.println("Wij zijn Maxim, Alexander en Jente van 6IW Viio     tongeren en wij moeten eenafvuurmechanisme ontwerpenom mensen met een handicaptoch op 1 of andere manierhet spelletje bierpong    kunnen spelen. We moeten  een tennisbal in een emmerschieten dat 12m ver staatmaar we mogen niet in 1   keer erin schieten, de balmoet 1 of meerdere keren  botsen. Wij gaan gebruik  maken van luchtdruk door  middel van een vat dat we onder druk zetten en met  een magneetventiel zo de  lucht door te laten naar  de loop waar de tennisbal zit. Dit ventiel gaat opendoor een simpel tikje op  dit LCD scherm.                                       Tik om verder te gaan.");

tft.setTextSize(2);
tft.setTextColor(RED);
tft.setCursor((tft.width() - 48) / 2, (tft.height() * 2) / 4);
tft.print("");
  tft.setTextColor(YELLOW, BLACK);
tft.setCursor(0, (tft.height() * 6) / 8);
//tft.print("Touch screen for loc");
while (1) {
    tp = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
    if (tp.z < MINPRESSURE || tp.z > MAXPRESSURE) continue;
    if (tp.x > 450 && tp.x < 570  && tp.y > 450 && tp.y < 570) break;
    tft.setCursor(0, (tft.height() * 3) / 4);
    //tft.print("tp.x=" + String(tp.x) + " tp.y=" + String(tp.y) + "   ");
  }

}

void setup(void)
{
uint16_t tmp;

tft.reset();
ID = tft.readID();
tft.begin(ID);
Serial.begin(9600);
tft.setRotation(Orientation);
tft.fillScreen(BLACK);
show_tft();

uint16_t ID = tft.readID();
Serial.print("TFT ID = 0x");
Serial.println(ID, HEX);
if (ID == 0xD3D3) ID = 0x9486; // write-only shield

tft.fillScreen(BLACK);

emmer1_btn.initButton(&tft,  160, 380, 50, 40, WHITE, CYAN, BLACK, "1", 2);

emmer2_btn.initButton(&tft, 107, 240, 50, 40, WHITE, CYAN, BLACK, "2", 2);
emmer3_btn.initButton(&tft, 213, 240, 50, 40, WHITE, CYAN, BLACK, "3", 2);

emmer4_btn.initButton(&tft,  60, 100, 50, 40, WHITE, CYAN, BLACK, "4", 2);
emmer5_btn.initButton(&tft, 160, 100, 50, 40, WHITE, CYAN, BLACK, "5", 2);
emmer6_btn.initButton(&tft, 260, 100, 50, 40, WHITE, CYAN, BLACK, "6", 2);


emmer1_btn.drawButton(false);
emmer2_btn.drawButton(false);
emmer3_btn.drawButton(false);
emmer4_btn.drawButton(false);
emmer5_btn.drawButton(false);
emmer6_btn.drawButton(false);

}

void loop(void)
{

bool down = Touch_getXY();
emmer1_btn.press(down && emmer1_btn.contains(pixel_x, pixel_y));
emmer2_btn.press(down && emmer2_btn.contains(pixel_x, pixel_y));
emmer3_btn.press(down && emmer3_btn.contains(pixel_x, pixel_y));
emmer4_btn.press(down && emmer4_btn.contains(pixel_x, pixel_y));
emmer5_btn.press(down && emmer5_btn.contains(pixel_x, pixel_y));
emmer6_btn.press(down && emmer6_btn.contains(pixel_x, pixel_y));

if (emmer1_btn.justReleased())
    emmer1_btn.drawButton();
    
if (emmer2_btn.justReleased())
    emmer2_btn.drawButton();
if (emmer3_btn.justReleased())
    emmer3_btn.drawButton();
    
if (emmer4_btn.justReleased())
    emmer4_btn.drawButton();
if (emmer5_btn.justReleased())
    emmer5_btn.drawButton();
if (emmer6_btn.justReleased())
    emmer6_btn.drawButton();

if (emmer1_btn.justPressed()) {
    emmer1_btn.drawButton(true);
    tft.fillScreen(BLACK); 
    tft.setTextSize(2);
    tft.println("");    
    tft.println("");
    tft.println("even geduld, het geweer   gaat zich nu richten naar emmer 1"); // after this i want the servo to move and after that i want to press a button and return to the beginning of the void loop
 
}

if (emmer2_btn.justPressed()) {
    emmer2_btn.drawButton(true);
    tft.fillScreen(BLACK); 
    tft.setTextSize(2);
    tft.println("");    
    tft.println("");
    tft.println("even geduld, het geweer   gaat zich nu richten naar emmer 2");  
}
if (emmer3_btn.justPressed()) {
    emmer3_btn.drawButton(true);
    tft.fillScreen(BLACK); 
    tft.setTextSize(2);
    tft.println("");    
    tft.println("");
    tft.println("even geduld, het geweer   gaat zich nu richten naar emmer 3"); 
} 
  
if (emmer4_btn.justPressed()) {
    emmer4_btn.drawButton(true);
    tft.fillScreen(BLACK); 
    tft.setTextSize(2);
    tft.println("");    
    tft.println("");
    tft.println("even geduld, het geweer   gaat zich nu richten naar emmer 4");   
}
if (emmer5_btn.justPressed()) {
    emmer5_btn.drawButton(true);
    tft.fillScreen(BLACK); 
    tft.setTextSize(2);
    tft.println("");    
    tft.println("");
    tft.println("even geduld, het geweer   gaat zich nu richten naar emmer 5");   
}
if (emmer6_btn.justPressed()) {
    emmer6_btn.drawButton(true);
    tft.fillScreen(BLACK); 
    tft.setTextSize(2);
    tft.println("");    
    tft.println("");
    tft.println("even geduld, het geweer   gaat zich nu richten naar emmer 6");  
}

}
#endif

Voordat mensen hier tijd aan gaan verspillen, ik zie dat je al antwoorden hebt in LCD touchscreen return to beginning of void loop.

Dat ben ik ook, maar ze hebben mij toen naar het Nederlandse forum gestuurd omdat dat misschien makkelijker ging zijn om uit te leggen en makkelijker voor mij om te begrijpen want ik ben redelijk nieuw met arduino.

Nee, er was de vraag of het niet beter in de Nederlandse sectie paste. Je werd er niet naar toe gestuurd.

Zelf geef ik de voorkeur aan het engelstalige gedeelte van het forum; er zijn daar veel meer mensen actief die kunnen helpen, in de Nederlandse sectie kun je de mensen die actief helpen op een (1) hand tellen.

Maar de reden waarom ik een antwoord gaf, was, zoals gezegd, om te vookomen dat anderen hun tijd verspillen door min of meer dezelfde antwoorden te geven, niet wetende dat je al gelijkaardige antwoorden hebt in je andere draaje. In het engels heet het "cross post" en dat wordt op geen enkel forum gewaardeerd voor de gegeven reden.

No hard feelings :wink:

Ik ken je gebruikte libraries niet. Wat commentaar bij je code zou het eenvoudiger maken. Dat is ook wat je leerkrachten gaan vragen.

Op een bepaald moment zet je de knoppen uit. Dat lukt je. Dan is er toch ook een mogelijkheid om ze terug tevoorschijn te halen.

Is dit niet de bepaalde code om ze te laten verschijnen?

Is er in de librarie geen functie die je kan gebruiken om na te vragen of een knop zichtbaar is of niet? Anders een tellertje/boolean bijhouden. Bij eerste klik boolean zichtbaar => false. 2de klik boolean zichtbaar => true.

In reguliere programmeertalen zoals java, VB(.NET), c#, ... kan je bij een knop 2 zaken doen om hem te kunnen gebruiken of niet. Meestal iets als:
knop.setVisible(true) om hem te doen verschijnen of knop.setVisible(false) om hem te laten verdwijnen.
knop.setEnable(true) zorgt dat de knop kan gebruikt worden. knop.setEnable(false) laat de knop op het scherm staan maar maakt deze onbruikbaar. Je hebt ongetwijfeld al een 'aanvaarden' knop gezien die pas actief wordt als er bepaalde zaken werden ingevuld. Dat wordt dus op deze wijze gedaan.

Ik zal straks wat commentaar zetten bij de code en wat foto’s proberen erbij te zetten om het zo misschien wat duidelijker te maken.

een code zonder commentaar wordt niet goed gevonden dus ga aan de gang en maak het voor een ander makkelijk, ook een startscherm is een scherm net als de andere dus een scherm 0 aanroepen en dan naar scherm 1 gaan etc.
je zult ook wat moeten leren over wat een statemachine is.