Zum Inhalt springen
Arduino Lottozahlengenerator

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


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    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-1); 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 »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    6 Gedanken zu „Arduino Lottozahlen-Generator“

    1. Hab den Code ausprobiert und bin dabei auf eine Kleinigkeit gestoßen:

      Von den einmal generierten Zahlen wurden jedes mal alle, bis auf die erste, erneuert.

      Hab den Code dann bei “for (int i = numbersFound; i < 6; i++) {" auf
      "for (int i = (numbersFound-1); i < 6; i++) {" umgeschrieben.

      Seither werden ALLE Zahlen neu gewürfelt.

    2. Pingback: Arduino millis() – Arduino Tutorial

    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.