#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // Pins, an denen das LCD angeschlossen ist
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Erstellen des Objektes lcd
int buttonPin = 8; // Arduino-Pin, an dem der Button angeschlossen ist
int theNumbers[] = {0, 0, 0, 0, 0, 0}; // speichert die Glückszahlen
int timeToNumber = 3000; // Dauer der Animation bis zum Ergebnis
int numbersFound = 0;
long myTimer = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Button soll interne Pullup-Widerstande verwenden
lcd.begin(16, 2); // Initiierung des LCDs, 16 Zeichen, 2 Zeilen
randomSeed(analogRead(0)); // Start des Zufallsgenerators
myTimer = millis(); // Timer wird auf aktuelle Zeit gesetzt
}
void getNumbers() { // Methode liefert Zahlen
boolean uniqueNumbers = false; // ist so lange unwahr, bis Zahlen eindeutig sind
while (uniqueNumbers == false) { // wiederhole, solange Zahlen uneindeutig
uniqueNumbers = true;
for (int i = numbersFound; i < 6; i++) { // Zufallszahlen generieren, von 0 bis 5
theNumbers[i] = int(random(49)) + 1; // erzeuge Zufallszahl von 1 bis 49
}
for (int i = 0; i < 5; i++) { // Eindeutigkeit überprüfen
for (int j = i + 1; j < 6; j++) { // falls Zahl mehrfach auftraucht, wird
if (theNumbers[i] == theNumbers[j]) uniqueNumbers = false; // uniqueNumbers auf false gesetzt
} // und die while-Schleife wiederholt
}
}
}
void showNumbers(){ // zeige Zahlen auf LCD
for (int i = 0; i < 3; i++) { // Zeige drei Zahlen pro Zeile des LCD (von 0 bis 2)
lcd.setCursor(4 * i, 0); // Curserposition des LCD setzen, Zeile 1
if (theNumbers[i] < 10) lcd.print(" "); // falls einstellig, füge Lehrzeichen ein
lcd.print(theNumbers[i]); // gib Zahl auf LCD aus
lcd.setCursor(4 * i, 1); // Curserposition des LCD setzen, Zeile 2
if (theNumbers[i + 3] < 10) lcd.print(" "); // falls einstellig, füge Lehrzeichen ein
lcd.print(theNumbers[i + 3]); // gib Zahl auf LCD aus
}
}
void loop() {
if (digitalRead(buttonPin) == LOW) numbersFound = 0; // wenn der Taster gedrückt wird, setze numbersFound
// auf 0
if (myTimer + timeToNumber < millis()) { // Timeout für Zahlenanimation
numbersFound++; // erhöhe numbersFound in jedem Intervall
myTimer = millis(); // setze Timer auf aktuelle Millisekunden
}
getNumbers(); // erzeuge Glückszahlen
showNumbers(); // zeige Glückszahlen
delay(5000); // Wartezeit
}