# include "Adafruit_GFX.h" # include "Adafruit_SSD1306.h" # define SCREEN_WIDTH 128 # define SCREEN_HEIGHT 64 // Reset-Pin -> wird nicht verwendet, muss angegeben werden # define OLED_RESET 4 // Display-Parameter Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); # include /* Bibliothek ArduinoSort Download: https://github.com/emilv/ArduinoSort/releases Installieren: Sketch -> Bibliothek einbinden -> Zip-Bibliothek hinzufügen */ const byte Minimum = 1; const byte Maximum = 49; // Berührungssensor Pin 7 byte SENSOR = 7; // Anzahl der zu ziehenden Zahlen const byte Anzahl = 6; // Array für die gezogenen Zahlen byte LottoZahl[Anzahl]; void setup() { Serial.begin(9600); oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // bei Verwendung eines Berührungssensors // pinMode(SENSOR, INPUT); // bei Verwendung eines Tasters pinMode(SENSOR, INPUT_PULLUP); // Zufallsgenerator starten randomSeed(0); oled.clearDisplay(); // Schriftfarbe und -größe oled.setTextColor(WHITE); oled.setTextSize(1); oled.setCursor(0, 0); oled.print("Lottozahlen"); // Anzeige oled.display(); } void loop() { byte SpielZahl[6]; String GespielteZahlen = ""; String GezogeneZahlen = ""; byte Treffer = 0; byte SensorLesen ; // bei Verwendung eines Berührungssensors SensorLesen = digitalRead(SENSOR); // bei Verwendung eines Berührungssensors // if (SensorLesen == HIGH) // bei Verwendung eines Tasters if (SensorLesen == LOW) { delay(200); // Ziehung der "angekreuzten" Zahlen Ziehung(); /* Array Sortieren mit ArduinoSort sortArray(NameArray, AnzahlElemente) sortArrayReverse(NameArray, AnzahlElemente) */ sortArray(LottoZahl, 6); // String GespielteZahlen aus den Elementen des Arrays LottoZahl // zusammensetzen for (byte i = 0; i < Anzahl; i++) { GespielteZahlen = GespielteZahlen + LottoZahl[i] + " "; SpielZahl[i] = LottoZahl[i]; } // Anzeige Serieller Monitor Serial.println("Gespielte Zahlen"); Serial.println("-----------------------------"); Serial.println(GespielteZahlen); Serial.println("-----------------------------"); // Anzeige OLED // Bildschirm löschen oled.clearDisplay(); oled.setCursor(0, 0); oled.print("Gespielte Zahlen"); oled.setCursor(0, 10); oled.print(GespielteZahlen); oled.drawLine(0, 22, 128, 22, WHITE); // Ziehung der Lottozahlen Ziehung(); sortArray(LottoZahl, 6); // Vergleichen der Elemente der Arrays SpielZahl und LottoZahl for (byte i = 0; i < Anzahl; i++) { for (byte ii = 0; ii < Anzahl; ii++) { // Übereinstimmung gefunden -> Treffer um 1 erhöhen if (SpielZahl[i] == LottoZahl[ii]) Treffer ++; } } // String GezogeneZahlen aus den Elementen des Arrays LottoZahl // zusammensetzen for (byte i = 0; i < Anzahl; i++) { GezogeneZahlen = GezogeneZahlen + LottoZahl[i] + " "; } // Anzeige der Zahlen Serieller Monitor Serial.println("Gezogene Zahlen"); Serial.println("-----------------------------"); Serial.println(GezogeneZahlen); Serial.println("-----------------------------"); // geänderte Ausgabe bei keinem Treffer if (Treffer == 0) Serial.println("keine Treffer!"); else { Serial.println(String(Treffer) + " Treffer"); } Serial.println("-----------------------------"); // Anzeige OLED oled.setCursor(0, 26); oled.print("Gezogene Zahlen"); oled.setCursor(0, 38); oled.print(GezogeneZahlen); oled.drawLine(0, 50, 128, 50, WHITE); oled.setCursor(0, 56); if (Treffer == 0) oled.print("keine Treffer"); else { oled.print(Treffer); oled.print(" Treffer"); } oled.display(); } } int Ziehung() { for (byte i = 0; i < Anzahl; i++) { /* die Lottozahl gilt solange als bereits gezogen bis in der for-Schleife nachgewiesen wird, dass sie neu ist BereitsGezogen den Wert false hat */ bool BereitsGezogen = true; while (BereitsGezogen) { // Zahl ziehen LottoZahl[i] = random(Minimum, Maximum); BereitsGezogen = false; /* Zufallszahl mit den bereits gezogenen Zahlen vergleichen i wird in der ersten for-Schleife hochgezählt alle bisherigen Zahlen (ii) werden mit den bisher gezogenen verglichen (ii < i) ist sie identisch, erhält BereitsGezogen den Wert true es wird erneut eine Zufallszahl bestimmt wenn die Zahl neu ist, (BereitsGezogen hat noch den Wert false) wird die while-Schleife verlassen und die nächste Zahl gezogen */ for (byte ii = 0; ii < i; ii++) { if (LottoZahl[i] == LottoZahl[ii]) BereitsGezogen = true; } } } return LottoZahl[Anzahl]; }