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