Wür­feln - Anzei­ge auf einem OLED-Display

Lese­zeit: 5 Minu­ten

Seite als PDF
Navi­ga­ti­on

Das Pro­gramm wür­felt auf Tas­ter­druck eine Zahl zwi­schen 1 und 6, simu­liert im OLED-Display durch die Anzei­ge schnell auf­ein­an­der fol­gen­der zufäl­li­ger Ergeb­nis­se den Wür­fel­vor­gang und zeigt anschlie­ßend die gewür­fel­te Zahl an.
Damit die Wür­fel­au­gen gut sicht­bar ange­zeigt wer­den, ist das OLED um 90° nach rechts gedreht.

Die Wür­fel­au­gen:

So sieht es aus:

Benö­tig­te Bauteile:

  • Tas­ter
  • OLED-Display
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

OLED-Display

Benö­tig­te Bibliotheken:

oder: Sketch -> Biblio­thek ein­bin­den -> Biblio­the­ken verwalten

Funk­ti­onn der Bibi­lothek u8g2

Bin­de die benö­tig­ten Biblio­the­ken ein und defi­nie­re die Varia­blen. Beach­te die Kommentare.

# include <U8g2lib.h>
# include <Bounce2.h>

int Minimum = 1;
int Maximum = 7;
int TASTER = 7;
/*
  OLED initialisieren
  Controller: SH1106 oder SSD1306
  es wird der Page buffer mode verwendet
  Typbezeichnung mit Bildschirmgröße in Pixeln
  1 = page buffer mode, F = full screen buffer mode 
  Hardware I2C 
  Name des OLEDs
  Rotation R0 (keine)
*/

// 1,3 Zoll SH1106
// U8G2_SH1106_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);

// 0,96 Zoll SSD1306

U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);

// Bounce initialisieren
Bounce Wuerfel = Bounce();

Der setup-Teil. Beach­te die Kommentare.

void setup()
{
  pinMode(TASTER, INPUT_PULLUP);

  // Taster Bounce zuordnen
  Wuerfel.attach(TASTER);
  Wuerfel.interval(20); 

  oled.begin();

  // Zufallsgenerator starten
  randomSeed(analogRead(0));

  // Farbe weiß
  oled.setDrawColor(1);

  // Position 90 Grad
  oled.clearDisplay();
  oled.setFont(u8g2_font_t0_22_te);

  // oled.setDisplayRotation(U8G2_R1);
  oled.setFlipMode(1);

  // Hinweis anzeigen
  oled.firstPage();
  do
  {
    oled.drawStr(2, 20, "Start");
    oled.drawStr(2, 50, "->");
    oled.drawStr(2, 80, "Taste");
  }
  while (oled.nextPage());

  oled.setDisplayRotation(U8G2_R0);
  oled.setFlipMode(1);
}

Im loop-Teil wird die Funk­ti­on Wuer­feln() aufgerufen:

void Wuerfeln()
{
  int Zahl =  random(Minimum, Maximum);
  oled.firstPage();

  // Würfelaugen zeichnen
  // 1
  if (Zahl == 1)
  {
    do
    {
      oled.drawRFrame(0, 0, 128, 64, 5);
      oled.drawDisc(60, 32, 8);
    }
    while (oled.nextPage());
  }

  // 2
  if (Zahl == 2)
  {
    do
    {
      oled.drawRFrame(0, 0, 128, 64, 5);
      oled.drawDisc(14, 14, 8);
      oled.drawDisc(112, 50, 8);
    }
    while (oled.nextPage());
  }

  // 3
  if (Zahl == 3)
  {
    do
    {
      oled.drawRFrame(0, 0, 128, 64, 5);
      oled.drawDisc(14, 14, 8);
      oled.drawDisc(60, 32, 8);
      oled.drawDisc(112, 50, 8);
    }
    while (oled.nextPage());
  }

  // 4
  if (Zahl == 4)
  {
    do
    {
      oled.drawRFrame(0, 0, 128, 64, 5);
      oled.drawDisc(14, 14, 8);
      oled.drawDisc(14, 50, 8);
      oled.drawDisc(112, 14, 8);
      oled.drawDisc(112, 50, 8);
    }
    while (oled.nextPage());
  }

  // 5
  if (Zahl == 5)
  {
    do
    {
      oled.drawRFrame(0, 0, 128, 64, 5);
      oled.drawDisc(14, 14, 8);
      oled.drawDisc(60, 32, 8);
      oled.drawDisc(112, 14, 8);
      oled.drawDisc(14, 50, 8);
      oled.drawDisc(112, 50, 8);
    }
    while (oled.nextPage());
  }

  // 6
  if (Zahl == 6)
  {
    do
    {
      oled.drawRFrame(0, 0, 128, 64, 5);
      oled.drawDisc(14, 14, 8);
      oled.drawDisc(60, 14, 8);
      oled.drawDisc(112, 14, 8);
      oled.drawDisc(14, 50, 8);
      oled.drawDisc(60, 50, 8);
      oled.drawDisc(112, 50, 8);
    }
    while (oled.nextPage());
  }
}

Der loop-Teil:

void loop()
{
  // Taster abfragen
  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);
      }
    }
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 2. Dez 2022 @ 12:34