Arduino Mega2560 tft touchscreen if-statement probleem

Arduino shields
Berichten: 4
Geregistreerd: 25 Apr 2018, 18:30

Arduino Mega2560 tft touchscreen if-statement probleem

Berichtdoor Hadinon » 27 Mei 2018, 18:47

Beste Allen,

Zoals eerder gepost, ben ik bezig met het gebruiken van een Velleman vma412 touchscreen en een arduino mega 2560. Het idee van de school is dat men boter/kaas/eieren speelt op het touchscreen en vervolgens een robot het spel in real-life naboots. Echter heb ik de tft. library nog niet helemaal onder de knie. Ik wil namelijk dat wanneer een getekende knop op het scherm aangeraakt wordt, niet alleen een actie wordt uitgevoerd door de robot maar ook het scherm veranderd. (de knop of het gehele scherm zou bijvoorbeeld blauw moeten worden) Helaas willen alle tft. commando's niet luisteren in een if-statement heb ik gemerkt behalve de tft.resest. Zou iemand mij hier mee kunnen helpen, de volledige code plaats ik hieronder:



#include <stdint.h>
#include "TouchScreen.h"
#include <MCUFRIEND_kbv.h>

MCUFRIEND_kbv tft;
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A3 // must be an analog pin, use "An" notation!
#define YM 8 // can be a digital pin
#define XP 9 // can be a digital pin

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

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

void setup(void) {
tft.reset();
uint16_t id = tft.readID();
tft.begin(id);
tft.fillScreen(RED);
Serial.begin(9600);

}

void loop(void) {
// a point object holds x y and z coordinates

TSPoint p = ts.getPoint();

// we have some minimum pressure we consider 'valid'
// pressure of 0 means no pressing!
if (p.z > ts.pressureThreshhold) {
Serial.print("X = "); Serial.print(p.x);
Serial.print("\tY = "); Serial.print(p.y);
Serial.print("\tPressure = "); Serial.println(p.z);
}

if ((p.y > 156) && (p.y < 237) && (p.x > 105) && (p.x < 188)) {

tft.fillScreen(BLUE);

}

delay(10);
}


Ik hoop hiermee voldoende uitgelegd te hebben over het probleem.


Mvg

Advertisement

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Arduino Mega2560 tft touchscreen if-statement probleem

Berichtdoor zuid » 29 Mei 2018, 10:08

Hoe weet je zo zeker dat de if het probleem is?
1.Als je voor het testen "tft.fillScreen(BLUE);" vervangt door "Serial.print("blauw");" werkt deze print dan wel?
2.Als je de if helemaal weghaalt wordt het tft scherm dan wel BLUE ?

indien 1. ja -- > syntax tft,fillScreen(BLUE) niet correct. (voorbeelden tft scherm goed bestuderen, werken voorbeelden wel?, juiste library gebruikt?)
indien 2. ja -- > syntax if niet correct.

NB ik heb nog niet met een dergelijk scherm gewerkt.
m.v.g.
Nico

Berichten: 4
Geregistreerd: 25 Apr 2018, 18:30

Re: Arduino Mega2560 tft touchscreen if-statement probleem

Berichtdoor Hadinon » 29 Mei 2018, 12:14

Beste Nico,

Als ik de tft.fillscreen(BLUE) verander voor enig ander commando zoals serial.print of digital.Write o.i.d dan werkt dat prima. Via de serial monitor krijg ik de coördinaten binnen van mijn vinger en kan ik aan een testgetal zien (0 of 1) of mijn vinger in het betreffende gebied zit. En dat werkt allemaal prima, echter de geen van alle tft.code's wil werken in een if-statement. buiten het if-statement werken ze wel.

Mvg

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Arduino Mega2560 tft touchscreen if-statement probleem

Berichtdoor baco1978 » 29 Mei 2018, 14:25

kan je eens een serial.print van ts.pressureThreshhold doen?
dan weet je iig aan wat voor p.z waarde aan moet voldoen.

PS. in het voorbeeld programma werkte de touchscreen wel?
Met vriendelijke groet Arjan

Terug naar Shields

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten