Wür­feln mit einer ein­stel­li­gen Anzei­ge

Lese­zeit: 5 Minu­ten
Navi­ga­ti­on

Die 7-Segment-Anzeige besteht aus sie­ben hori­zon­tal und ver­ti­kal ver­lau­fen­den Seg­men­ten und einem Punkt in der rech­ten unte­ren Ecke, die ein­zeln ange­steu­ert wer­den. Es las­sen sich alle Zah­len und eine Rei­he von Buch­sta­ben dar­stel­len.

Die Seg­men­te sind von a bis g gekenn­zeich­net. Jedes Seg­ment muss mit einem Pin des Ardui­nos ver­bun­den wer­den.

Es gibt die 7-Segmente-Anzeige in zwei Aus­füh­run­gen: ent­we­der - (Com­mon Catho­de → GND) oder + (Com­mon Anode → 5V).
Die ver­wen­de­te Ver­si­on kannst du durch ein­fa­ches Umste­cken (GND/5V) her­aus­fin­den.

Das Pro­gramm wür­felt eine Zahl und zeigt sie auf dem 7-Segment-Display an. Kurz ange­zeig­te Zufalls­zah­len simu­lie­ren den Wür­fel­vor­gang, bevor die end­gül­tig gewür­fel­te Zahl ange­zeigt wird.

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

  • Tas­ter
  • Ein­stel­li­ge 7-Segment-Anzeige
  • Laut­spre­cher
  • Lei­tungs­dräh­te

Die Zah­len, die dar­ge­stellt wer­den sol­len, wer­den als Binär­wert notiert. Eine 1 steht für Seg­ment ein­schal­ten, eine 0 zeigt das Seg­ment nicht an. Die Rei­hen­fol­ge der Zif­fern ent­spricht der Rei­hen­fol­ge der Pins. Die ers­te Zif­fer schal­tet Pin 2, die zwei­te Pin 3 und die letz­te Pin 9.

Lege die Varia­blen fest.

byte Zahlen[6] =
{
  B01100000, // 1
  B11001101, // 2
  B11101001, // 3
  B01100011, // 4
  B10101011, // 5
  B10101111, // 6
};

int TASTER = 13;
int LAUTSPRECHER = 10;

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

void setup()
{
  // Pins auf OUTPUT setzen
  for (int i = 2; i <= 9; i++)
  {
    pinMode(i, OUTPUT);
  }

  pinMode(TASTER, INPUT_PULLUP);

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

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

void loop()
{
  /* 
   der Bereich der Zahlen 1 bis 6
   als oberer Wert muss 7 angegeben werden,
   weil immer nach unten gerundet wird
  */
  int Minimum = 1;
  int Maximum = 7;
  
  int TasterLesen = digitalRead(TASTER);
  if (!TasterLesen)
  {
    // Würfeleffekt
    // in schneller Folge werden 10 Zufallszahlen angezeigt
    for (int i = 0; i < 10; i++)
    {
      /*
        das Array der Zahlen beginnt mit 0 und endet bei 5
        die Würfelzahlen beginnen mit 1
        -> 1 von der gewürfelten Zahl abziehen,
        um das richtige Array anzuzeigen 
      */
      ZahlZeigen(Zahlen[ZufallsZahl(Minimum, Maximum) - 1]);
      delay(100);
    }

    // gewürfelte Zahl anzeigen
    byte Zahl = ZufallsZahl(Minimum, Maximum);
    ZahlZeigen(Zahlen[Zahl - 1]);
    tone(LAUTSPRECHER, 1000, 10);
  }
}

Im loop-Teil wird die Metho­de Zahl­Zei­gen() auf­ge­ru­fen. Als Para­me­ter wird ihr ein Ele­ment des Arrays Zah­len – einer der Binär­wer­te für die Zahl 9 bis 0 – über­ge­ben.

void ZahlZeigen(byte ArrayZahl)
{
  // Bits des Arrays ArrayZahl prüfen
  // von Pin 2 bis Pin 9 durchlaufen
  for (int i = 2; i <= 9; i++)
  {
    /*
      vergleicht das Byte ArrayZahl mit dem Byte B10000000
      befindet sich an beiden Positionen eine 1
      das Ergebnis der Prüfung ist also nicht 0
      -> Segment einschalten
      ist eine der Positionen eine 0
      das Ergebnis der Prüfung ist 0
      -> Segment ausschalten
      1 Bit nach links schieben -> nächstes Bit prüfen
      nach 8 Durchläufen sind alle Segmente (Pins) richtig geschaltet
    */
    if ((ArrayZahl & B10000000) != 0) digitalWrite(i, HIGH);
    else  digitalWrite(i, LOW);

    ArrayZahl = ArrayZahl << 1;
  }
}

Die Funk­ti­on Zufalls­zahl ermit­telt die Zufalls­zahl.

int ZufallsZahl(int Minimum, int Maximum)
{
  int Zahl =  random(Minimum, Maximum);
  return Zahl;
}


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 23. Aug 2020 @ 19:39