#include "Adafruit_NeoMatrix.h"
#define RGBMatrixPin 7
// Anzahl der LEDs für das Pixelmuster ⇒ kann angepasst werden
#define AnzahlLED 40
// RGBMatrix -> Name der Matrix
Adafruit_NeoMatrix RGBMatrix = Adafruit_NeoMatrix(8, 8, RGBMatrixPin,
NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
NEO_GRB + NEO_KHZ800);
// Farben definieren
#define Schwarz RGBMatrix.Color(0,0,0)
#define Rot RGBMatrix.Color(255,0,0)
#define Gruen RGBMatrix.Color(0,255,0)
#define Blau RGBMatrix.Color(0,0,255)
#define Magenta RGBMatrix.Color(139,0,139)
#define Pink RGBMatrix.Color(255,20,147)
#define Weiss RGBMatrix.Color(255,255,255)
#define Gelb RGBMatrix.Color(255,255,0)
#define MarineBlau RGBMatrix.Color(0,0,128)
#define DunkelGruen RGBMatrix.Color(0,100,0)
#define Golden RGBMatrix.Color(205,149,12)
#define ZufallsFarbe RGBMatrix.Color(random(1, 255), random(1, 255), random(1, 255))
// PixelFarbe -> Farbe der zufällig leuchtenden Pixel
// PixelCursor -> Farbe des sich bewegenden Pixels
#define PixelFarbe Blau
#define PixelCursor Gelb
// Variablen der Zeit
float StartZeit;
float VerstricheneZeit;
float Sekunden;
// entscheidet über den Neustart
bool Start = true;
int AnzahlKlicks = 1;
// Startposition der LED
int Zeile = 4;
int Spalte = 4;
int Taster;
int Analogwert;
void setup()
{
// setBrightness(0..255)
RGBMatrix.setBrightness(10);
// NeoPixel Bibliothek initialisieren
RGBMatrix.begin();
// Zufallsgenerator starten
randomSeed(analogRead(A0));
Serial.begin(9600);
}
int Tasterabfrage()
{
Analogwert = analogRead(A0);
// kurzes delay() -> doppelten Tastendruck so weit wie möglich verhindern
delay(200);
/*
A0 gibt je nach Taster einen Wert aus
über den Seriellen Monitor kann dieser Wert angezeigt
und kann dann eventuell angepasst werden
*/
// Serial.println(Analogwert);
switch (Analogwert)
{
case 0 ... 20:
Taster = 1;
break;
case 30 ... 60:
Taster = 2;
break;
case 70 ... 120:
Taster = 3;
break;
case 150 ... 200:
Taster = 4;
break;
case 300 ... 400:
Taster = 5;
break;
default:
return 0;
}
// gedrückten Taster zurückgeben
return Taster;
}
void ParcoursBauen()
{
int Minimum = 0;
int Maximum = 8;
RGBMatrix.clear();
for (int i = 0; i < AnzahlLED; i++)
{
// Zufallsposition der Pixel
Spalte = random(Minimum, Maximum);
Zeile = random(Minimum, Maximum);
RGBMatrix.drawPixel(Zeile, Spalte, PixelFarbe);
}
Zeile = 4;
Spalte = 4;
RGBMatrix.drawPixel(Zeile, Spalte, PixelCursor);
RGBMatrix.show();
}
void loop()
{
// wenn Start = true -> Parcour erstellen
if (Start)
{
RGBMatrix.clear();
ParcoursBauen();
Start = false;
StartZeit = millis();
int Zeile = 4;
int Spalte = 4;
}
Taster = Tasterabfrage();
// Ergebnisse anzeigen und Neustart
if (Taster == 5)
{
Start = true;
// Zeit berechnen
float Sekunden;
VerstricheneZeit = millis() - StartZeit;
Sekunden = VerstricheneZeit / 1000;
String GesamtSekunden = String(Sekunden);
// . durch , ersetzen
GesamtSekunden.replace(".", ",");
// Ausgabe im Seriellen Monitor
Serial.println("Sekunden insgesamt: " + GesamtSekunden + " Sekunden");
// Minuten berechnen
int Minute = int(Sekunden) / 60;
// nur Ausgabe der Minuten wenn Minute > 0
if (Minute > 0)
{
// Ausgabe verschönern, wenn Minute > 1 -> Ausgabe "Minuten"
// "Minute"
if (Minute > 1)
{
Serial.print(String(Minute) + " Minuten ");
}
else
{
Serial.print(String(Minute) + " Minute ");
}
}
// von Sekunden Anzahl der Minuten abziehen
Sekunden = Sekunden - Minute * 60;
// Sekunden in String umwandeln
// damit . durch , ersetzt werden kann
String AnzahlSekunden = String(Sekunden);
// . durch , ersetzen
AnzahlSekunden.replace(".", ",");
Serial.println(AnzahlSekunden + " Sekunden");
Serial.println(String(AnzahlKlicks) + " Klicks!");
AnzahlKlicks = 1;
}
/*
bei der Matrix gibt es kein oben oder unten
links oder rechts
die Funktion der Tasten muss durch Drehen der Matrix
entsprechend angepasst werden
*/
// links
if (Taster == 1)
{
RGBMatrix.drawPixel(Zeile, Spalte, Schwarz);
if (Zeile < 7) Zeile++;
RGBMatrix.drawPixel(Zeile, Spalte, PixelCursor);
RGBMatrix.show();
AnzahlKlicks ++;
}
// oben
if (Taster == 2)
{
RGBMatrix.drawPixel(Zeile, Spalte, Schwarz);
if (Spalte < 7) Spalte++;
RGBMatrix.drawPixel(Zeile, Spalte, PixelCursor);
RGBMatrix.show();
AnzahlKlicks ++;
}
// unten
if (Taster == 3)
{
RGBMatrix.drawPixel(Zeile, Spalte, Schwarz);
if (Spalte > 0) Spalte--;
RGBMatrix.drawPixel(Zeile, Spalte, PixelCursor);
RGBMatrix.show();
AnzahlKlicks ++;
}
// rechts
if (Taster == 4)
{
RGBMatrix.drawPixel(Zeile, Spalte, Schwarz);
if (Zeile > 0) Zeile--;
RGBMatrix.drawPixel(Zeile, Spalte, PixelCursor);
RGBMatrix.show();
AnzahlKlicks ++;
}
}
Letzte Aktualisierung: