# include "LedControl.h"
# include "Bounce2.h"
// Joystick-Button zuordnen
Bounce ZeitStoppen = Bounce();
// Joystick analoge Pins
int XAchse = A0;
int YAchse = A1;
// Joystick Knopf
int JoystickButton = 7;
// Variablen für die Auswertung der Bewegung des Joysticks
int PositionX;
int PositionY;
// Startposition der LED
int Reihe = 4;
int Spalte = 4;
// Anzahl zufälliger LEDs
int AnzahlLED = 5;
// Variablen der Zeit
float StartZeit;
float VerstricheneZeit;
float Sekunden;
// Variable für den Neustart
bool Start = false;
/*
VCC -> 5V
GND
Pin 12 -> DATA IN-pin
Pin 11 -> CLK-pin
Pin 10 -> CS-pin
*/
LedControl LEDMatrix = LedControl(12, 11, 10, 1);
void setup()
{
Serial.begin(9600);
ZeitStoppen.attach(JoystickButton);
// Zufallsgenerator starten
randomSeed(analogRead(5));
// Matrix "aufwecken"
LEDMatrix.shutdown(0, false);
// mittlere Helligkeit setzen
LEDMatrix.setIntensity(0, 2);
PfeilUnten();
pinMode(JoystickButton, INPUT_PULLUP);
// Start-LED setzen
LEDMatrix.setLed(0, Reihe, Spalte, true);
// Zeit starten
StartZeit = millis();
}
void ParcoursBauen()
{
LEDMatrix.clearDisplay(0);
int Minimum = 0;
int Maximum = 7;
for (int i = 0; i < AnzahlLED; i++)
{
int Spalte = random(Minimum, Maximum);
int Zeile = random(Minimum, Maximum);
LEDMatrix.setLed(0, Spalte, Zeile, true);
}
}
void PfeilUnten()
{
byte Zeichen[8] =
{
B00010000, // 1. Reihe
B00110000, // 2. Reihe
B01111111, // 3. Reihe
B11111111, // 4. Reihe
B01111111, // 5. Reihe
B00110000, // 6. Reihe
B00010000, // 7. Reihe
B00000000 // 8. Reihe
};
// Matrix anzeigen
for (int i = 0; i < 8; i ++)
{
LEDMatrix.setRow(0, i, Zeichen[i]);
}
}
void loop()
{
// Start
if (Start)
{
ParcoursBauen();
Start = false;
StartZeit = millis();
int Reihe = 4;
int Spalte = 4;
LEDMatrix.setLed(0, Reihe, Spalte, true);
}
// Joystick-Button lesen
if (ZeitStoppen.update())
{
if (ZeitStoppen.read() == LOW)
{
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");
}
}
// Bewegung der X-Achse lesen
PositionX = analogRead(XAchse);
// Bewegung X-Achse nach oben
if (PositionX > 600)
{
// zu schnelles "Springen" verhindern
delay(200);
LEDMatrix.setLed(0, Reihe, Spalte, false);
if (Spalte > 0) Spalte--;
LEDMatrix.setLed(0, Reihe, Spalte, true);
}
// Bewegung X-Achse nach unten
if (PositionX < 300)
{
delay(200);
LEDMatrix.setLed(0, Reihe, Spalte, false);
if (Spalte < 7) Spalte++;
LEDMatrix.setLed(0, Reihe, Spalte, true);
}
// Bewegung der Y-Achse lesen
PositionY = analogRead(YAchse);
// Bewegung Y-Achse nach rechts
if (PositionY > 600)
{
delay(200);
LEDMatrix.setLed(0, Reihe, Spalte, false);
if (Reihe > 0) Reihe--;
LEDMatrix.setLed(0, Reihe, Spalte, true);
}
// Bewegung Y-Achse nach links
if (PositionY < 300)
{
delay(200);
LEDMatrix.setLed(0, Reihe, Spalte, false);
if (Reihe < 7) Reihe++;
LEDMatrix.setLed(0, Reihe, Spalte, true);
}
}
Letzte Aktualisierung: