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