Arduino Lottozahlen-Generator

Wir bauen einen Lottozahlen-Generator mit Arduino. Dazu verwenden wir ein LCD-Display für die Ausgabe. Gestartet wird der Generator mit einem Button.

Bauteile

Schaltplan

Das LCD wird ganz normal an das Arduino-Board angeschlossen. Wie das genau geht, habe ich schon mal hier erklärt: LCD-Display mit Arduino steuern. Zusätzlich ist noch ein Button in die Schaltung eingefügt. Wird der Button gedrückt, werden die neuen Lottozahlen generiert.

Achtung: Ich übernehme keinerlei Garantie, dass die Zahlen auch gewinnen. Ich sag mal: Alle Angaben ohne Gewähr ;-)

Arduino-Code

Das Programm verfügt über eine Methode (getNumbers), in der die zufälligen Lottozahlen generiert werden:

    for (int i = numbersFound; i < 6; i++) {
      theNumbers[i] = int(random(49)) + 1;
    }

Sind die Zahlen generiert, wird geprüft, ob sie eindeutig sind, d.h., dass sie nur jeweils einmal in der Zahlenkombination vorkommen:

// Eindeutigkeit überprüfen (doppelte Zahlen verboten)
    for (int i = 0; i < 5; i++) {
      for (int j = i + 1; j < 6; j++) {
        if (theNumbers[i] == theNumbers[j]) uniqueNumbers = false;
      }
    }

Sind sie nicht eindeutig, wird die gesamte Prozedur wiederholt.

Eine zweite Methode, showNumbers(), zeigt die einzelnen Zahlen auf dem LCD-Display an.

void showNumbers(){
  for (int i = 0; i < 3; i++) {
    lcd.setCursor(4 * i, 0);
    if (theNumbers[i] < 10) lcd.print(" ");
    lcd.print(theNumbers[i]);
    lcd.setCursor(4 * i, 1);
    if (theNumbers[i + 3] < 10) lcd.print(" ");
    lcd.print(theNumbers[i + 3]);
  }  
}

Der zusammenhängende Code sieht dann so aus:

#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int buttonPin = 8;

int theNumbers[] = {0, 0, 0, 0, 0, 0};
int timeToNumber = 600;
int numbersFound = 0;
long myTimer = 0;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  lcd.begin(16, 2); 
  randomSeed(analogRead(0));
  myTimer = millis();
  Serial.begin(115200);
}

void getNumbers() {
  boolean uniqueNumbers = false;
  while (uniqueNumbers == false) {
    uniqueNumbers = true;
    // Zufallszahlen generieren
    for (int i = numbersFound; i < 6; i++) {
      theNumbers[i] = int(random(49)) + 1;
    }
    // Eindeutigkeit überprüfen (doppelte Zahlen verboten)
    for (int i = 0; i < 5; i++) {
      for (int j = i + 1; j < 6; j++) {
        if (theNumbers[i] == theNumbers[j]) uniqueNumbers = false;
      }
    }
  }
}

void showNumbers(){
  for (int i = 0; i < 3; i++) {
    lcd.setCursor(4 * i, 0);
    if (theNumbers[i] < 10) lcd.print(" ");
    lcd.print(theNumbers[i]);
    lcd.setCursor(4 * i, 1);
    if (theNumbers[i + 3] < 10) lcd.print(" ");
    lcd.print(theNumbers[i + 3]);
  }  
}

void loop() {
  if (digitalRead(buttonPin) == LOW) numbersFound = 0;

  if (myTimer + timeToNumber < millis()) {
    numbersFound++;
    myTimer = millis();
  }

  getNumbers();
  showNumbers();
  delay(50);
}

Und jetzt viel Glück beim Lotto-Spielen! Wenn diese Zahlen gewinnen, möchte ich aber bitte was vom Gewinn abhaben ;-)


ishiro präsentiert buch

Wow! Ich hoffe, der Beitrag hat dir gefallen. Wenn ja hab ich was für dich. Das neue E-Book von StartHardware! Darin findest du die beliebtesten Projekte von StartHardware und vieles mehr!

Wenn du noch tiefer einsteigen willst, empfehle ich Dir das Buch: Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit wirst Du zum Arduino-Profi!

Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum :-)

2 thoughts on “Arduino Lottozahlen-Generator

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.