/************************************************************************************************* PROGRAMMINFO ************************************************************************************************** Funktion: Würfel ************************************************************************************************** Version: 27.04.2022 ************************************************************************************************** Board: ESP32vn IoT UNO ************************************************************************************************** C++ Arduino IDE V1.8.19 ************************************************************************************************** Einstellungen: https://dl.espressif.com/dl/package_esp32_index.json http://dan.drown.org/stm32duino/package_STM32duino_index.json https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json ************************************************************************************************* **************************************************************************************************/ #include #include #ifdef U8X8_HAVE_HW_SPI #include #endif #ifdef U8X8_HAVE_HW_I2C #include #endif # include int Minimum = 1; int Maximum = 7; int TASTER = 27; /* OLED initialisieren Controller: SH1106 oder SSD1306 es wird der Page buffer mode verwendet */ // 1,3 Zoll SH1106 U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // 0,96 Zoll SSD1306 // U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ unsigned long delayTime; // Bounce initialisieren Bounce Wuerfel = Bounce(); void setup() { pinMode(TASTER, INPUT); // Taster Bounce zuordnen Wuerfel.attach(TASTER); Wuerfel.interval(20); u8g2.begin(); // Zufallsgenerator starten randomSeed(A0); // Farbe weiß u8g2.setDrawColor(1); // Position 90 Grad u8g2.clearDisplay(); u8g2.setFont(u8g2_font_t0_22_te); u8g2.setDisplayRotation(U8G2_R1); u8g2.setFlipMode(1); // Hinweis anzeigen u8g2.firstPage(); do { u8g2.drawStr(2, 20, "Start"); u8g2.drawStr(2, 50, "->"); u8g2.drawStr(2, 80, "Taste"); } while (u8g2.nextPage()); u8g2.setDisplayRotation(U8G2_R0); u8g2.setFlipMode(1); } void Wuerfeln() { int Zahl = random(Minimum, Maximum); u8g2.firstPage(); // Würfelaugen zeichnen // 1 if (Zahl == 1) { do { u8g2.drawRFrame(0, 0, 128, 64, 5); u8g2.drawDisc(60, 32, 8); } while (u8g2.nextPage()); } // 2 if (Zahl == 2) { do { u8g2.drawRFrame(0, 0, 128, 64, 5); u8g2.drawDisc(14, 14, 8); u8g2.drawDisc(112, 50, 8); } while (u8g2.nextPage()); } // 3 if (Zahl == 3) { do { u8g2.drawRFrame(0, 0, 128, 64, 5); u8g2.drawDisc(14, 14, 8); u8g2.drawDisc(60, 32, 8); u8g2.drawDisc(112, 50, 8); } while (u8g2.nextPage()); } // 4 if (Zahl == 4) { do { u8g2.drawRFrame(0, 0, 128, 64, 5); u8g2.drawDisc(14, 14, 8); u8g2.drawDisc(14, 50, 8); u8g2.drawDisc(112, 14, 8); u8g2.drawDisc(112, 50, 8); } while (u8g2.nextPage()); } // 5 if (Zahl == 5) { do { u8g2.drawRFrame(0, 0, 128, 64, 5); u8g2.drawDisc(14, 14, 8); u8g2.drawDisc(60, 32, 8); u8g2.drawDisc(112, 14, 8); u8g2.drawDisc(14, 50, 8); u8g2.drawDisc(112, 50, 8); } while (u8g2.nextPage()); } // 6 if (Zahl == 6) { do { u8g2.drawRFrame(0, 0, 128, 64, 5); u8g2.drawDisc(14, 14, 8); u8g2.drawDisc(60, 14, 8); u8g2.drawDisc(112, 14, 8); u8g2.drawDisc(14, 50, 8); u8g2.drawDisc(60, 50, 8); u8g2.drawDisc(112, 50, 8); } while (u8g2.nextPage()); } } int ZufallsZahl() { int Zahl = random(Minimum, Maximum); return Zahl; } void loop() { if (Wuerfel.update()) { if (Wuerfel.read() == LOW) { // Würfeleffekt: Zufallszahlen in schneller Folge anzeigen // bedingt durch den Page buffer mode nicht sehr schnell for (int i = 0; i < 5; i++) { int Zahl = random(Minimum, Maximum); Wuerfeln(); delay(50); } } } }