Anzeige

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 ;-)


Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book an!

Darin findest du die beliebtesten Arduino-Projekte von StartHardware. Jedes Projekt umfasst Schaltplan, Bauteile, Beschreibung und Code. Für Einsteiger gibt es ein Arduino-Schnellstart-Kapitel und einen kompakten Programmierkurs. Zusätzlich findest du Zwischenkapitel mit Expertenwissen zu den Komponenten, die verwendet werden. Alle Code-Beispiele gibt es natürlich als Download.

Weitere Informationen findest du auf der Produktseite. Klicke jetzt auf den Button, um Details anzusehen.


Welches Projekt würdest du gern auf dieser Seite finden? Worüber soll ich schreiben? *


Stefan Hermann

Ich bin Stefan und arbeite seit 2007 mit Arduino. Als Designer und Produktmanager setze ich das Board in erster Linie zum Bau von Prototypen ein. Hier teile ich meine Faszination und Erfahrung mit dir!

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.