# include "LiquidCrystal_I2C.h" LiquidCrystal_I2C lcd(0x27, 20, 4); # include "Bounce2.h" // "Prallverhinderer" für den Taster starten Bounce TasteStart = Bounce(); int TASTER = 7; // Anzahl der Schritte Minimum/Maximum int Minimum = 1; int Maximum = 4; // Schritte bis zum Ziel int Ziel = 10; int Schritte = 0; int Runde = 1; // wenn Neustart = true -> Variable zurücksetzen bool Neustart = false; /* Arrays für die Schnecken BisherigeSchritte[] -> Anzahl zurückgelegter Schritte Schnecke[] -> Namen der Schnecken SchrittZeichen[] -> Zeichen für die zurückgelegten Schritte es können (fast) beliebige Zeichen verwendet werden */ int BisherigeSchritte[2]; String Schnecke[2] = {"Lisa", "Karl"}; String SchrittZeichen[2] = {"#", "*"}; void setup() { lcd.init(); lcd.backlight(); Serial.begin(9600); pinMode(TASTER, INPUT_PULLUP); // Instanzen des Objekts Bounce für den Taster zuordnen // Zeitintervall einstellen TasteStart.attach(TASTER); TasteStart.interval(20); // Info über das Spiel lcd.setCursor(0, 0); lcd.print("Schneckenrennen"); lcd.setCursor(0, 1); lcd.print(Schnecke[0] + " und " + Schnecke[1]); lcd.setCursor(0, 2); lcd.print("Ziel: " + String(Ziel)); lcd.setCursor(0, 3); lcd.print("-> Taster dr\365cken"); // Zufallsgenerator starten randomSeed(analogRead(0)); } void loop() { // auf serielle Eingabe warten if (TasteStart.update()) { if (TasteStart.read() == LOW) { // beim Neustart -> alle Variable zurücksetzen if (Neustart) { BisherigeSchritte[0] = 0; BisherigeSchritte[1] = 0; Runde = 1; Neustart = false; } lcd.clear(); // Schnecke 1 // Anzahl der Schritte zufällig ermitteln Schritte = ZufallsZahl(Minimum, Maximum); // Summe der Schritte berechnen BisherigeSchritte[0] = BisherigeSchritte[0] + Schritte; /* Variabeln an die Methode Bildschirmausgabe übergeben Name der Schnecke, Summe der Schritte, Zeichen für die zurückgelegten Schritte für das erste Element [0] -> die erste Schnecke */ Bildschirmausgabe(Schnecke[0], BisherigeSchritte[0], SchrittZeichen[0], 0); /* Variabeln an die Methode Bildschirmausgabe übergeben Name der Schnecke, Summe der Schritte, Zeichen für die zurückgelegten Schritte für das zweite Element [1] -> die zweite Schnecke */ Schritte = ZufallsZahl(Minimum, Maximum); BisherigeSchritte[1] = BisherigeSchritte[1] + Schritte; Bildschirmausgabe(Schnecke[1], BisherigeSchritte[1], SchrittZeichen[1], 2); // Sieger Schnecke 1 if (BisherigeSchritte[0] > Ziel) { if (BisherigeSchritte[0] > BisherigeSchritte[1]) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(Schnecke[0] + " hat gewonnen!"); Neustart = true; } } // Sieger Schnecke 2 if (BisherigeSchritte[1] > Ziel) { if (BisherigeSchritte[0] < BisherigeSchritte[1]) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(Schnecke[1] + " hat gewonnen!"); Neustart = true; } } // unentschieden if (BisherigeSchritte[0] > Ziel && BisherigeSchritte[1] > Ziel) { if (BisherigeSchritte[0] == BisherigeSchritte[1]) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Unentschieden!"); Neustart = true; } } if (Neustart) { lcd.setCursor(0, 2); lcd.print("Neustart"); lcd.setCursor(0, 3); lcd.print("-> Taster dr\365cken"); } } } } int ZufallsZahl(int Minimum, int Maximum) { int Zahl = random(Minimum, Maximum); return Zahl; } void Bildschirmausgabe(String Name, int Schritte, String SchrittZeichen, int Zeile) { lcd.setCursor(0, Zeile); // Name der Schnecke und Anzahl der Schritte anzeigen lcd.print(Name + " " + String(Schritte)); lcd.setCursor(0, Zeile + 1); // entsprechend der Anzahl der Schritte Zeichen anzeigen for (int i = 0; i < Schritte; i ++) { lcd.print(SchrittZeichen); } lcd.setCursor(Ziel, Zeile + 1); lcd.print("|"); }