Knif­fel

# 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: 25. Jul 2023 @ 18:41