Count­down ein­stel­li­ge 7-Segment-Anzeige

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;

int Minimum = 500;
int Maximum = 2000;

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

  Serial.begin(9600);
  pinMode(TASTER, INPUT_PULLUP);

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

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

void loop()
{
  int TasterLesen = digitalRead(TASTER);
  if (!TasterLesen)
  {
    for (int i = 0; i <= sizeof(Zahlen) - 1; i++)
    {
      // aktuelles Array i (Zahlen als Bytes) 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);

  }
}

void ZahlZeigen(byte ArrayZahl)
{
  // aktuelles Byte anzeigen
  Serial.println(ArrayZahl, BIN);

  // Bits des Arrays ArrayZahl prüfen
  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 richtig geschaltet
    */
    if ((ArrayZahl & B10000000) != 0) digitalWrite(i, HIGH);
    else  digitalWrite(i, LOW);

    ArrayZahl = ArrayZahl << 1;
  }
}

Letzte Aktualisierung: 24. Jul 2023 @ 8:24