Für den Arduino gibt es Sieben-Segment-Anzeigen in verschiedenen Bauweisen. Eine kleine Übersicht darüber habe ich im ersten Video zum Thema zusammengestellt:

Im zweiten Video wird es dann etwas konkreter. Wir bauen uns einen Würfel, also einen Zufallszahlengenerator, der das Ergebnis am Sieben-Segment-Display anzeigt.

Die Vorgehensweise habe ich im folgenden Video beschrieben.

ACHTUNG: Bei ca. 01:15 im folgenden Video kommt eine falsche Information. Das CA in der Seriennummer des gezeigten Displays bedeutet nicht „Common Anode“ wie ich im Video sage, sondern steht für „Common CAthode“. Eben deswegen gehört das mittlere Pin ja auch an Ground (=Kathode). Vielen Dank an Leser Ben für den Hinweis (siehe Kommentar unten).

Und hier ist der Arduino Sketch zum Projekt:

// Sieben Segment Würfel
// Mehr Info zum Projekt auf www.makerblog.at
 
// Welche Segmente muss für welche Ziffer eingeschaltet werden?
int segmente[10][7] = { {1,1,1,1,1,1,0},  // 0
                        {0,1,1,0,0,0,0},  // 1
                        {1,1,0,1,1,0,1},  // 2
                        {1,1,1,1,0,0,1},  // 3
                        {0,1,1,0,0,1,1},  // 4
                        {1,0,1,1,0,1,1},  // 5
                        {1,0,1,1,1,1,1},  // 6
                        {1,1,1,0,0,0,0},  // 7
                        {1,1,1,1,1,1,1},  // 8
                        {1,1,1,1,0,1,1}}; // 9
 
// Welches Arduino Pin für welches Segment
int pinArray[] = {8,9,3,4,5,7,6};
// Beispiel: Um die Ziffer 1 anzuzeigen, müssen die Segmente b und ) HIGH werden.
// Im segmente[1] entspricht das den Positionen [1][1] und [1][2] (Arrays starten bei 0). 
// Im pinArray ist dem Segment b=[1] das Pin 9 zugeordnet, dem Segment c=[2] das Pin 3.
// Diese müssen wir also HIGH schalten
 
int buttonPin = 12;
 
// void() wird einmal beim Start des Programm aufgerufen
void setup() {
  // Pins 3-9 auf dem Arduino als OUTPUT setzen
  for (int i=3; i<10;i++) {
    pinMode(i, OUTPUT);
  }
 
  // Pin 12 für den Pushbutton auf INPUT
  pinMode(buttonPin, INPUT);
 
  // Zufallszahlengenerator mit Analogwert von Pin A0 initialisieren. Da an A0 nichts angeschlossen ist,
  // liefert das Pin einen mehr oder weniger zufälligen Wert.
  randomSeed(analogRead(0));
}
 
// loop() wird immer wieder ausgeführt, solange der Arduino läuft
void loop() {
 
  // Wenn Button an Pin 12 gedrückt, dann...
  if (digitalRead(buttonPin)==1) {
    // 40 mal eine Zufallszahl ermitteln und am Display anzeigen
    // Das sorgt für den Flackereffekt beim Würfelvorgang
    for (int i=0; i<40; i++) {
      // Zufallszahl zwischen 1 und 6 ermitteln und anzeigen
      showDigit(random(1,7));
      // Bei jedem Durchgang etwas länger warten (deswegen das ansteigende i der Schleife)
      delay(i);
    }
  }
}
 
// Funktion zur Anzeige einer Ziffer auf dem Siebensegment-Display
void showDigit(int num) {
    // Alle 7 Segmente (von 0-6) bei der gewünschten Ziffer durchgehen
    for (int j=0; j<7; j++) {
      // Ist in segmente[] das Pin gesetzt?
      if (segmente[num][j]==1) {
        // dann setze das zugehörige Arduin-Pin HIGH
        digitalWrite(pinArray[j], HIGH);
      }
      else {
        // ansonsten setze das Pin LOW
        digitalWrite(pinArray[j], LOW);
      }   
 
      // in Kurzform mit trinärem Operator ?: würde das obige if so aussehen:
      // digitalWrite(pinArray[j], (segmente[num][j]==1)?HIGH:LOW);
    }
}

Fragen und Anregungen bitte einfach in die Kommentare schreiben.

7 thoughts on “Würfelspiel: Sieben-Segment-Display am Arduino

  • 12. Dezember 2014 um 15:40
    Permalink

    Hallo :)
    Schönes Tutorial, aber wenn die mittleren Pins der 7-Segment Anzeige an Ground angeschlossen werden, dann ist das eine gemeinsame Kathode, nicht Anode ;) (unteres Video)

    Gruß
    Ben

    Antworten
    • 12. Dezember 2014 um 22:24
      Permalink

      Vielen Dank für den Hinweis, du hast natürlich recht. Ich habe das sowohl hier im Blog als auch als Anmerkung im Youtube-Video richtig gestellt.

      Antworten
  • 24. Januar 2016 um 11:44
    Permalink

    Hallo es hätte mich mehr interessiert das Arduino Sketch Project mit dem Countdown statt dem würfel also abwärts von 9-0 beim erreichen der null einen piezzo pipser der los fiept zum Beispiel

    Antworten
  • 18. Oktober 2016 um 13:15
    Permalink

    Hallo AdiDax,

    zuerst und vor allem: Vielen Dank für die vielen Anregungen, die einem blutigen Anfänger sicher eine Menge Frust vermeiden helfen.
    Aber eine Sache habe ich in dem 7-Segment-Sketch nicht verstanden und der Compiler auch nicht, jedenfalls kommt diese Fehlermeldung:

    ’showDigit‘ cannot be used as a function

    Ich habe versucht, ganz am Anfang „showDigit“ zu „initialisieren“ (int showDigit = 0), aber geholfen hat es nicht. Was habe ich falsch gemacht?

    Viele Grüße und nochmals vielen Dank!

    Antworten
    • 18. Oktober 2016 um 15:44
      Permalink

      Ich hab hier die Arduino IDE 1.6.12 und der Sketch von der Seite lässt sich unverändert erfolgreich fehlerfrei kompilieren. Welche Version der Arduino IDE verwendest du?
      Was meinst du mit „int showDigit = 0“? Das ist ja als Funktion definiert und du würdest damit versuchen den gleichen Namen nochmal für eine Variable zu verwenden. Das funktioniert so nicht.

      Antworten
  • 21. Februar 2019 um 22:23
    Permalink

    Hallo, bin Arduino-Anfänger. Allerdings hapert es noch ein wenig an Erfolgserlebnissen. Da kam dein 7-Segment-Würfelprojekt gerade recht. Funktioniert hervorragend. Habe auch probiert, von 0-9 anzeigen zu lassen. Kein Problem. Jetzt würde ich gern alles in ein Gehäuse bauen, aber mit einem zusätzlichen Schalter an einem Pin, mit dem man von Anzeige 1-6 auf 0-9 (hier mit zus. Dezimalpunkt) umschalten kann. Habe versucht, im Loop einfach einen if-Befehl voranzustellen und dann den Inhalt deines Sketches laufen zu lassen, bzw eine geänderte Version für die 0-9 Anzeige + Punkt. Läuft aber nicht, scheitert schon am Kompillieren, scheint also nicht so einfach zu sein. Kanst du mir helfen?

    MfG

    Ingolf

    Antworten
    • 3. März 2019 um 22:37
      Permalink

      Hi Ingolf, sorry für die späte Reaktion.
      Willst du zum Umschalten des Modus einen Taster oder einen Kippschalter verwenden?
      Wie schaut denn dein Sketch derzeit aus? Schick ihn mir einfach, ich schau gerne drüber.
      lg, Adi

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.