Hallo Gemeinde. Ich bin dabei mit einen Punktezähler für Softair, bzw. Nerf zu bauen.
Die Punkte sollen über einen Tast-Kontakt gezählt werden. Soweit funktioniert auch alles. Aber ist die Darstellung auf einem TFT wirklich so kompliziert oder denke ich falsch ?
Im oberen drittel soll nach einem Treffer ein Fadenkreuz erscheinen, danach verschwinden und an gleicher Stelle die getroffene Punktzahl. Im unteren drittel soll die aufaddierte Gesamtpunktzahl erscheinen. Im meinem Beispiel soll der Taster 50 Punkte zählen. Jede weiter Punktzahl soll hinzu addiert werden. Aber : Er schreibt die neue Punktzahl immer über die alte, was natürlich nicht mehr lesbar ist.
Zur Zeit ist mein Lösungsansatz folgender :
Bevor die Rechnung und die darauffolgende Ausgabe auf dem TFT erscheint, lege ich erst mal ein
schwarzes Rechteck über das alte Ergebnis.
Gibt es da eventuell elegantere Lösungen ?
Der auskommentierte Teil ist im Moment vollkommen egal, da ich den Part vom ersten Taster kopiere und die Werte ändere.
`// Pins zuordnen
# define TFT_PIN_CS 10
# define TFT_PIN_DC 9
# define TFT_PIN_RST 8
//Targets festlegen
int Target10mm = A1;
int Status10mm = 0;
int Target20mm = A2;
int Status20mm = 0;
int Score = 0;
// Bibliotheken einbinden
# include "SPI.h"
# include "Adafruit_GFX.h"
# include "Adafruit_ST7735.h"
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_PIN_CS, TFT_PIN_DC, TFT_PIN_RST);
void setup()
{
Serial.begin(9600);
delay(500);
Serial.println("Bildschirm: " + String(tft.height()) + " x " + String(tft.width()));
tft.initR(INITR_GREENTAB);
pinMode(Target10mm, INPUT);
pinMode(Target20mm, INPUT);
// Bildschirm um 180 Grad drehen
tft.setRotation(2);
// schwarzer Hintergrund
tft.fillScreen(ST7735_BLACK);
tft.setTextSize(3);
tft.setCursor(22, 80);
tft.setTextColor(ST7735_WHITE);
tft.print("Score");
tft.setTextSize(3);
tft.setCursor(61, 120);
tft.setTextColor(ST7735_WHITE);
tft.print(Score);
}
void loop()
{
// Abfrage Target 10mm - Taster an A1
Status10mm = digitalRead(Target10mm);
if (Status10mm == HIGH)
{
tft.drawCircle(64, 40, 25, ST7735_WHITE);
tft.drawFastVLine(64, 10, 60, ST7735_WHITE);
tft.drawFastHLine(34, 40, 60, ST7735_WHITE);
delay(1000);
tft.drawCircle(64, 40, 25, ST7735_BLACK);
tft.drawFastVLine(64, 10, 60, ST7735_BLACK);
tft.drawFastHLine(34, 40, 60, ST7735_BLACK);
delay(1000);
tft.setTextSize(4);
tft.setCursor(43, 28);
tft.setTextColor(ST7735_WHITE);
tft.print("50");
delay(1000);
tft.setTextSize(4);
tft.setCursor(43, 28);
tft.setTextColor(ST7735_BLACK);
tft.print("50");
delay(1000);
tft.fillRect(0, 120, 128, 40, ST7735_BLACK);
tft.setTextSize(3);
tft.setCursor(40, 120);
tft.setTextColor(ST7735_WHITE);
Score = Score + 50;
tft.print(Score);
}
// Status20mm = digitalRead(Target20mm);
// if (Status20mm == HIGH)
// {
// tft.drawCircle(64, 40, 25, ST7735_WHITE);
// tft.drawFastVLine(64, 10, 60, ST7735_WHITE);
// tft.drawFastHLine(34, 40, 60, ST7735_WHITE);
// delay(1000);
// tft.drawCircle(64, 40, 25, ST7735_BLACK);
// tft.drawFastVLine(64, 10, 60, ST7735_BLACK);
// tft.drawFastHLine(34, 40, 60, ST7735_BLACK);
// delay(1000);
// tft.setTextSize(4);
// tft.setCursor(43, 28);
// tft.setTextColor(ST7735_WHITE);
// tft.print("40");
// delay(1000);
// tft.setTextSize(4);
// tft.setCursor(43, 28);
// tft.setTextColor(ST7735_BLACK);
// tft.print("40");
// delay(1000);
// }
}`