2.8 TFT LCD Shield Version 2.0

Hey ich hab mal eine Frage zum TFT LCD Shield Version2.0 von Adafruit.

Folgendes soll realisiert werden:

Zwei Rechtecke, welche beim einmaligen betätigen einen Kreis gelb erscheinen lassen.
Wird das ein Rechteck noch einmal betätigt, wird der Kreis wieder rot.

Folgendes Problem kann ich nicht lösen:

Wenn ich das Touchpad betätige erhalte ich mehrer Punkte geliefert. Ich möchte aber nur einen Punkt erhalten, da der Kreis sonst toggelt(kontinuierlich für die Anzahl der erhaltenden Punkte die Farben wechselt).

Anbei mein Prgramm:

void loop()
{
	if ( !touch.bufferEmpty()  )
	{
		TS_Point point = touch.getPoint();
		//Skalierung
		point.x = map(point.x, TS_MINX, TS_MAXX, 0, tft.width());
		point.y = map(point.y, TS_MINY, TS_MAXY, 0, tft.height());

		Serial.print("Y = "); Serial.print(point.y);
		Serial.print("\tX = "); Serial.println(point.x);

		if ( point.x > RECTSIZE  && point.x < 2*RECTSIZE && point.y > RECTSIZE && point.y < 2*RECTSIZE)		//Taster 1
		{
			tft.fillCircle(1.5*RECTSIZE, 2.5*RECTSIZE, RECTSIZE / 2, coler_t1);
			delay(500);
			if (coler_t1 == offcoler) coler_t1 = ILI9341_YELLOW;
			else coler_t1 = ILI9341_RED;			
		}

		else if(point.x > 3*RECTSIZE  && point.x < 4*RECTSIZE && point.y > RECTSIZE && point.y < 2*RECTSIZE)		//Taster 1
		{
			tft.fillCircle(3.5*RECTSIZE, 2.5*RECTSIZE, RECTSIZE / 2, coler_t2);			
			delay(500);
			if (coler_t2 == offcoler) coler_t2 = ILI9341_YELLOW;
			else coler_t2 = ILI9341_RED;
		}
		

		
	}
}

Danke für eure Hilfe

Ich habe das durch eine Mittelwertbildung und Flankenerkennung beruhigt:

  TSPoint p = ts.getPoint();    // Retrieve a point
  unsigned int pos_z = (4 * altpos_z + p.z) / 5;
  if (pos_z > MINPRESSURE && altpos_z == 0) {}

Klingt zunächst gut!

Aber woher weißt du, dass du genau 5 Werte (explizit bei deinem Lösungsvorschlag) bekommst. Es ist unterschiedlich. Es sind manchmal 3, dann 2,... Könnte ich dein komplettes Programm sehen, um es logisch besser nachzuvollziehen.

Lukas_Lukas: Aber woher weißt du, dass du genau 5 Werte (explizit bei deinem Lösungsvorschlag) bekommst.

Ich habe mir die z-Werte im seriellen Monitor protokollieren lassen. Die Werte schwankten etwas, um dann einmalig in den Keller, also bei 0 abzusacken. Daraufhin habe ich verschiedene einfache Möglichkeiten probiert, dieses Absacken aufzufangen, weil dadurch ein Prellen verursacht wird. Die gefundene Lösung war mein gefühltes Optimum.

Leider kann ich nicht mit schöner Mathematik glänzen, bin nur Pragmatiker :)