# include "EEPROM.h"
byte Zufallszahl;
byte MaxWuerfeln = 5;
int Minumum = 1;
int Maximum = 7;
int TASTER = 12;
int TasterLesen;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
pinMode(TASTER, INPUT_PULLUP);
randomSeed(analogRead(A0));
/*
Überblick Statistik
Speicherstelle EEPROM
0 -> Anzahl der Spiele
1 -> Anzahl Dreierpasch
2 -> Anzahl Vierpasch
3 -> Anzahl Kniffel
*/
Serial.print("Anzahl bisheriger Spiele: ");
Serial.println(EEPROM[0]);
Serial.print("Anzahl Dreierpasch: ");
Serial.println(EEPROM[1]);
Serial.print("Anzahl Viererpasch: ");
Serial.println(EEPROM[2]);
Serial.print("Anzahl Kniffel: ");
Serial.println(EEPROM[3]);
/*
Statistik in %
für die Division muss der ausgelesene Wert nach float umgewandelt werden
nur rechnen, wenn AnzahlSpiele > 0 (durch 0 kann nicht geteilt werden)
*/
if (EEPROM[0] > 0)
{
Serial.println("-----------------------------");
Serial.print("Anzahl bisheriger Spiele: ");
Serial.println(EEPROM[0]);
// Anzahl der bisherigen Dreier- Vierpasch und Kniffel anzeigen
Serial.print("Anzahl Dreierpasch: ");
Serial.print(EEPROM[1]);
Serial.print(" ");
String PaschDrei = String(float(EEPROM[1]) / float(EEPROM[0]) * 100);
PaschDrei.replace(".", ",");
Serial.println(PaschDrei + " %");
Serial.print("Anzahl Viererpasch: ");
Serial.print(EEPROM[2]);
Serial.print(" ");
String PaschVier = String(float(EEPROM[2]) / float(EEPROM[0]) * 100);
PaschVier.replace(".", ",");
Serial.println(PaschVier + " %");
Serial.print("Anzahl Kniffel: ");
Serial.print(EEPROM[3]);
Serial.print(" ");
String KniffelAnzahl = String(float(EEPROM[3]) / float(EEPROM[0]) * 100);
KniffelAnzahl.replace(".", ",");
Serial.println(KniffelAnzahl + " %");
}
/*
Abfrage ob die bisherigen Daten aus dem EEPROM gelöscht werden sollen
Umlaute ersetzen:
ö -> \u00f6
ü -> \u00fc
*/
Serial.println("---------------------------------------");
Serial.println("Bisherige Statistik l\u00f6schen (j/n)?");
Serial.println("---------------------------------------");
}
void loop()
{
// auf serielle Eingabe warten
while (Serial.available() > 0)
{
// solange lesen, bis return \n eingegeben wurde
String Eingabe = Serial.readStringUntil('\n');
// das letzte Zeichen ist return = \n → soll entfernt werden (-1)
Eingabe = Eingabe.substring(0, Eingabe.length() - 1);
// die ersten 5 Speicherstellen mit 0 überschreiben
if (Eingabe == "j")
{
for (int i = 0; i < 5; ++i)
{
EEPROM.write(i, 0);
}
Serial.println("Statistik gel\u00f6scht!");
}
else Serial.println("Statistik bleibt erhalten!");
Serial.println("Bitte zum W\u00fcrfeln Taster dr\u00fccken!");
}
// alle Werte zurücksetzen
byte Summe = 0;
int AnzahlEins = 0;
int AnzahlZwei = 0;
int AnzahlDrei = 0;
int AnzahlVier = 0;
int AnzahlFuenf = 0;
int AnzahlSechs = 0;
// Werte aus EEPROM lesen
byte AnzahlSpiele = EEPROM[0];
byte DreierPasch = EEPROM[1];
byte ViererPasch = EEPROM[2];
byte Kniffel = EEPROM[3];
if (AnzahlSpiele < EEPROM.length())
{
TasterLesen = digitalRead(TASTER);
delay(200);
if (TasterLesen == LOW)
{
AnzahlSpiele ++;
Serial.println("W\u00fcrfele ...");
for (int i = 0; i < MaxWuerfeln; i++)
{
Zufallszahl = random(Minumum, Maximum);
// Anzahl der einsen, zweien ... zählen
// wird für die Auswertung benötigt
switch (Zufallszahl)
{
case 1:
AnzahlEins ++;
break;
case 2:
AnzahlZwei ++;
break;
case 3:
AnzahlDrei ++;
break;
case 4:
AnzahlVier ++;
break;
case 5:
AnzahlFuenf ++;
break;
case 6:
AnzahlSechs ++;
break;
}
Serial.println(Zufallszahl);
// Summe berechnen
Summe += Zufallszahl;
}
// Summe anzeigen
Serial.println("-----------------------------");
Serial.print("Summe: ");
Serial.println(Summe);
/*
Auswertung Dreierpasch
Anzahl wird um 1 erhöht und in die Speicherstelle 1 geschrieben
*/
if (AnzahlEins == 3)
{
Serial.println("Dreierpasch 1");
DreierPasch ++;
EEPROM.update(1, DreierPasch);
}
if (AnzahlZwei == 3)
{
Serial.println("Dreierpasch 2");
DreierPasch ++;
EEPROM.update(1, DreierPasch);
}
if (AnzahlDrei == 3)
{
Serial.println("Dreierpasch 3");
DreierPasch ++;
EEPROM.update(1, DreierPasch);
}
if (AnzahlVier == 3)
{
Serial.println("Dreierpasch 4");
DreierPasch ++;
EEPROM.update(1, DreierPasch);
}
if (AnzahlFuenf == 3) {
Serial.println("Dreierpasch 5");
DreierPasch ++;
EEPROM.update(1, DreierPasch);
}
if (AnzahlSechs == 3)
{
Serial.println("Dreierpasch 6");
DreierPasch ++;
EEPROM.update(1, DreierPasch);
}
/*
Auswertung Viererpasch
Anzahl wird um 1 erhöht und in die Speicherstelle 2 geschrieben
*/
if (AnzahlEins == 4)
{
Serial.println("Viererpasch 1");
ViererPasch ++;
EEPROM.update(2, ViererPasch);
}
if (AnzahlZwei == 4)
{
Serial.println("Viererpasch 2");
ViererPasch ++;
EEPROM.update(2, ViererPasch);
}
if (AnzahlDrei == 4)
{
Serial.println("Viererpasch 3");
ViererPasch ++;
EEPROM.update(2, ViererPasch);
}
if (AnzahlVier == 4)
{
Serial.println("Viererpasch 4");
ViererPasch ++;
EEPROM.update(2, ViererPasch);
}
if (AnzahlFuenf == 4)
{
Serial.println("Viererpasch 5");
ViererPasch ++;
EEPROM.update(2, ViererPasch);
}
if (AnzahlSechs == 4)
{
Serial.println("Viererpasch 6");
ViererPasch ++;
EEPROM.update(2, ViererPasch);
}
/*
Auswertung Kniffel
wenn AnzahlEins == 5 oder (||) AnzahlZwei = 5 ...
keine Auswertung mit welcher Zahl der Kniffel gewürfelt wurde
Anzahl wird um 1 erhöht und in die Speicherstelle 2 geschrieben
*/
if (AnzahlEins == 5 || AnzahlZwei == 5 || AnzahlDrei == 5 || AnzahlVier == 5 || AnzahlFuenf == 5 || AnzahlSechs == 5)
{
Serial.println("Kniffel");
Kniffel ++;
EEPROM.update(3, Kniffel);
}
// Anzahl der Spiele in Speicherstelle 0 schreiben und anzeigen
EEPROM.update(0, AnzahlSpiele);
Serial.println("-----------------------------");
Serial.print("Anzahl bisheriger Spiele: ");
Serial.println(EEPROM[0]);
// Anzahl der bisherigen Dreier- Vierpasch und Kniffel anzeigen
Serial.print("Anzahl Dreierpasch: ");
Serial.print(EEPROM[1]);
Serial.print(" ");
String PaschDrei = String(float(EEPROM[1]) / float(EEPROM[0]) * 100);
PaschDrei.replace(".", ",");
Serial.println(PaschDrei + " %");
Serial.print("Anzahl Viererpasch: ");
Serial.print(EEPROM[2]);
Serial.print(" ");
String PaschVier = String(float(EEPROM[2]) / float(EEPROM[0]) * 100);
PaschVier.replace(".", ",");
Serial.println(PaschVier + " %");
Serial.print("Anzahl Kniffel: ");
Serial.print(EEPROM[3]);
Serial.print(" ");
String KniffelAnzahl = String(float(EEPROM[3]) / float(EEPROM[0]) * 100);
KniffelAnzahl.replace(".", ",");
Serial.println(KniffelAnzahl + " %");
Serial.println("-----------------------------");
}
}
else Serial.println("Kein Speicherplatz mehr vorhanden!");
}
Letzte Aktualisierung: