Erstes Spiel für Touchpad

Im Rahmen der Schule mussten wir für ein Projekt ein Spiel erstellen mithilfe des Arduino Mega Board und einem 2,8" LCD.

Geplant war das unser Spiel ein Reaktionszeit Spiel wird in dem man durch anklicken von zufällig erscheinenden Quadrate einen Schritt weiterkommt und nach einer beliebigen Anzahl ( Wechselnd zwischen 5, 10 und 20 mal ) die gesamt Zeit ermittelt wird und der Durchschnitt berechnet wird.

Leider reichen unsere Fähigkeiten dazu nicht aus und wir haben uns nach Absprache mit den Lehrer auf eine abgespackte Version davon geeinigt

Es treten nun ungewöhnlich viele Fehlermeldungen auf und selbst unser Lehrer konnte uns das mit dem Touchpad nicht genau erklären. Ebenfalls wusste er keine Antwort darauf das x und p.x nicht die selbe Einheit haben.

Wir haben es geschafft das ein Viereck zufällig erscheint aber der Button für Touch außerhalb des Viereckes liegt.

Hat eventuell jemand eine Hilfestellung zu unserem Problem?

//Libaries für Grafik 
#include <Adafruit_GFX.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>
//Libaries für den 2,8" Bildschirm
#include <Adafruit_TFTLCD.h>
#include <pin_magic.h>
#include <registers.h>
//Modifizierte Libary für unser Shield
#include <Adafruit_ILI9341.h>
//Libary zur Benutzung des Touchpads
#include "TouchScreen.h"

//Analoge Eingänge initialisieren
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

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

// 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);

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

//Definition der Größe des Bildschirmes
#define TS_MINX 120
#define TS_MINY 70
#define TS_MAXX 900
#define TS_MAXY 920


void setup()
{
    Serial.begin(9600);                      // Die serielle Kommunikation starten
    tft.reset();                            // TFT Display reseten
    tft.begin(0x9341);                     //Identifier setzen für korrekte Funktionalitäten
    tft.fillScreen(0xFFFF);               // Display weiß machen
    pinMode(13, OUTPUT);                  // Touch Eingang aktiv schalten
      pinMode(XM, OUTPUT);
      pinMode(YP, OUTPUT);

      //tft.fillRect(0,0,15,15,RED); - Oben Links
      //tft.fillRect(225,305,15,15,BLUE); - Unten Rechts
     TSPoint p = ts.getPoint();  
       if (p.z > 10 && p.z < 1000) {          //Druck bei der Eingabe groß genug
            Serial.println("Originaldaten");
            Serial.print("x=");            
            Serial.println(p.x);    // Für Mega Board: X-Achse vom 120 bis 900
            Serial.print("y=");            
            Serial.println(p.y);    // Für Mega Board: Y-Achse von 70 bis 920
            
            //Umrechnen
            Serial.println("Umgerechnet");
            //p.x = map(p.x, 120, 900, 0, tft.width());
            //p.y = map(p.y, 70, 920,0,  tft.height());
            p.x = map(p.x, 120, 900, 0, 480);
            p.y = map(p.y, 70, 920,0,  320);
            Serial.print("x= "); Serial.println(p.x); Serial.print("y="); Serial.println(p.y);



  tft.fillRect(0,0,240,106,YELLOW);
    tft.setCursor(20,20);
    tft.setTextColor(BLACK);
    tft.setTextSize(3);
    tft.print("Start"); 

  
  tft.fillRect(0,106,240,106,BLUE);
    tft.setCursor(20,126);
    tft.setTextColor(YELLOW);
    tft.print("Blitzschnell");
   
    
  tft.fillRect(0,212,240,110,YELLOW);
    tft.setCursor(20,300);
    tft.setTextColor(BLACK);
    tft.setTextSize(1);
    tft.print("erstellt von D.M; I.J; P.R;");

 //TSPoint p = ts.getPoint();         
   //        p.x = map(p.x, TS_MAXX, TS_MINX, 0, 240);
     //      p.y = map(p.y, TS_MAXY, TS_MINY, 0, 320);
 

 //if(p.z > 20 && p.x > 0 && p.y > 0 && p.y < 106 );
  delay(10);  
}


void loop();
{

  
 TSPoint p = ts.getPoint();         
           p.x = map(p.x, TS_MAXX, TS_MINX, 0, 240);
           p.y = map(p.y, TS_MAXY, TS_MINY, 0, 320);
 

 if(p.z > 20 && p.x > 0 && p.y > 0 && p.y < 106 );

{
    tft.fillRect(0,0,240,320,WHITE);
    delay(1000);
    randomSeed(millis());      //Befehl für verbesserte Zufälligkeit
    int x_rand =random(0,270); //Definierter Bereich der Zufallszahlen auf der X-Achse
    int y_rand =random(0,430); //Definierter Bereich der Zufallszahlen auf der Y-Achse
    tft.fillRect(x_rand,y_rand,50,50,BLACK); //Erstellt ein schwarzes Viereck mit zufälligen X- und Y-Koordinaten
    Serial.println(x_rand);  //Ausgabe der zufälligen erstellen X-Koordinate im Seriellen Monitor
    Serial.println(y_rand);  //Ausgabe der zufälligen erstellen Y-Koordinate im Seriellen Monitor

   
   
          
            if  ((x_rand<=p.x) && (x_rand+50 <=p.x) && (y_rand<=p.y) && (y_rand+50 >p.y))         
            {
              tft.fillRect(x_rand,y_rand,30,30,RED);
            }// end(if)
            delay(5000);
      }
    
}
}

Hi

Da mir eine Vielzahl der von Euch benutzten Library's fehlt, wären Links zu den von Euch benutzten Paketen sinnvoll.
Wäre doch blöd, wenn Euer Sketch bei mir läuft, weil ich ganz andere Software benutze ...

STRG+T in der IDE rückt zumindest schon Mal den ganzen Kram etwas einheitlicher ein.

Wo benutzt Du 'x'?
Weshalb Ihr so umständlich (von Hinten durch die Brust ins Auge) auf die Rückgabewerte zugreift, wäre Mal interessant.
Wie machen Das die Beispiele zum Touch-Pad?
Auch per jedes Mal neu erstelltem 'p' des Typ 'TSPoint' und Zugriff auf Dessen Bestandteil 'x'?
Kann ich mir kaum vorstellen - bin Da aber durchaus lernfähig.

Wie bereits geschrieben: Fehlermeldungen bekomme ich auch 'jede Menge' - aber bei mir halt auch, weil mir einfach die benutzten Bibliotheken fehlen.

MfG

Ich weiß selber nicht ob wir auf alle Libaries darauf zugreifen brauchen.

Wir sind ohne Vorwissen ins Programmieren mit Arduino gestartet und haben nur bedingt die Befehle verstanden. - Das war halt der Weg der bei uns geklappt hat, wenn auch nur bedingt

Hi

GIbt'S davon verschiedene Versionen?
AdaFruit hat 'so schon' einige Lib's in der IDE direkt installierbar.

Wird Jetzt aber bei mir eh Nichts mehr.

MfG