Wür­feln mit einer ein­stel­li­gen Anzeige

Lese­zeit: 5 Minu­ten

Lösung
Seite als PDF

Ein Druck auf den Tas­ter setzt den Wür­fel in Gang. Die gewür­fel­te Zahl wird auf der ein­stel­li­gen Anzei­ge sicht­bar gemacht. Schnell auf­ein­an­der fol­gen­de Zah­len simu­lie­ren den Würfelvorgang.

So sieht es aus:

7-Segment-Anzeige

Die 7-Seg­ment-Anzei­ge 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 darstellen.

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 werden. 

Es gibt die 7-Seg­men­te-Anzei­ge 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) herausfinden.

Benö­tig­te Bauteile:

  • Taster 
  • Ein­stel­li­ge 7-Segment-Anzeige 
  • Lautsprecher 
  • Leitungsdrähte 

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 set­up-Teil. Beach­te die Kommentare.

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 Kommentare.

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 Funk­ti­on ZahlZ­ei­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 – übergeben. 

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 Zufallszahl.

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

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 12. Mrz 2024 @ 9:32