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

Lese­zeit: 5 Minu­ten
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.

So sieht es aus:

Benö­tig­te Bau­tei­le:

  • 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 Biblio­thek:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

Metho­den der Bibi­lothek ubg2

Zusätz­lich benö­tig­te Biblio­thek:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

Das eigent­li­che Pro­gramm:

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

# 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
*/
// 1,3 Zoll SH1106
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

// 0,96 Zoll SSD1306
// U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Bounce initialisieren
Bounce Wuerfel = Bounce();

Der setup-Teil. Beach­te die Kom­men­ta­re.

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

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

  u8g2.begin();

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

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

Im loop-Teil wird die Metho­de Wuer­feln() und die Funk­ti­on Zufalls­Zahl() auf­ge­ru­fen:

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

Der loop-Teil:

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


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 3. Sep 2020 @ 14:16