Count­down mit einer ein­stel­li­gen 7-Segment-Anzeige

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Das Pro­gramm soll nach einem Tas­ter­druck von 9 bis 0 her­un­ter­zäh­len. Zu jedem Wech­sel der Zahl wird ein kur­zer Ton wie­der­ge­ge­ben. Der Ablauf des Count­downs wird zusätz­lich mit dem Abspie­len einer zufäl­lig erzeug­ten Melo­die ergänzt.

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­ment-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[10] =
{
  B11101011, // 9
  B11101111, // 8
  B11100000, // 7
  B10101111, // 6
  B10101011, // 5
  B01100011, // 4
  B11101001, // 3
  B11001101, // 2
  B01100000, // 1
  B11101110, // 0
};

int TASTER = 13;
int LAUTSPRECHER = 10;

// der Frequenzbereich der Töne
int Minimum = 500;
int Maximum = 2000;

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

  // A (B11100111) anzeigen
  ZahlZeigen(B11100111);
}

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  int TasterLesen = digitalRead(TASTER);
  if (TasterLesen == LOW)
  {
    for (int i = 0; i <= sizeof(Zahlen) - 1; i++)
    {
      // aktuelles Array i (Zahlen als Folge von Bits) an Funktion ZahlZeigen übergeben
      ZahlZeigen(Zahlen[i]);
      tone(LAUTSPRECHER, 1000, 10);
      delay(1000);
    }

    // Countdown abgelaufen zufällige Tonfolge spielen
    for (int i = 0; i < 10; i++)
    {
      tone(LAUTSPRECHER, random(Minimum, Maximum), 500);
      delay(200);
    }
    // A (B11100111) anzeigen
    ZahlZeigen(B11100111);
  }
}

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

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 6. Okt 2023 @ 9:51