Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

5.3 - Zeitmesser

Ein 4-stelliges 7-Segment-Display besteht aus vier miteinander verknüpften 7-Segment-Anzeigen.

Das 4-stellige 7-Segment-Display arbeitet eigenständig. Es nutzt das Prinzip der visuellen Persistenz des menschlichen Auges, um die Zeichen jedes 7-Segment-Displays in einer Schleife schnell anzuzeigen und so fortlaufende Zeichenfolgen zu bilden.

Zum Beispiel, wenn „1234“ angezeigt wird, erscheint die „1“ im ersten 7-Segment-Display, während „234“ nicht angezeigt werden. Nach einer kurzen Zeit zeigt das zweite 7-Segment-Display „2“, während die ersten, dritten und vierten 7-Segmente aus bleiben. Und so weiter, alle vier Ziffern werden nacheinander angezeigt. Dieser Prozess ist sehr kurz (typischerweise 5ms), und durch den optischen Nachleuchteffekt sowie das Prinzip der visuellen Persistenz sehen wir alle vier Zeichen gleichzeitig.

Benötigte Komponenten

Für dieses Projekt werden die folgenden Komponenten benötigt.

Ein Komplettset ist definitiv praktisch, hier ist der Link:

Name

ARTIKEL IN DIESEM SET

KAUF-LINK

Kepler-Set

450+

Kepler Ultimate Kit

Alternativ können Sie die Komponenten auch einzeln über die untenstehenden Links erwerben.

SN

KOMPONENTENBESCHREIBUNG

ANZAHL

KAUF-LINK

1

Den Pico W kennenlernen

1

KAUFEN

2

Micro-USB-Kabel

1

3

Steckbrett

1

KAUFEN

4

Jumperkabel

Mehrere

KAUFEN

5

Widerstand

4(220Ω)

KAUFEN

6

4-stellige 7-Segment-Anzeige

1

7

74HC595

1

KAUFEN

Schaltplan

sch_4dig

Die Verdrahtungsprinzipien sind im Grunde die gleichen wie bei 5.1 Mikrochip - 74HC595, der einzige Unterschied besteht darin, dass Q0-Q7 an die a ~ g Pins des 4-stelligen 7-Segment-Displays angeschlossen sind.

Dann werden G10 ~ G13 verwendet, um auszuwählen, welches 7-Segment-Display aktiv sein soll.

Verdrahtung

wiring_4dig

Code

Bemerkung

  • Die Datei 5.3_time_counter.ino finden Sie im Verzeichnis kepler-kit-main/arduino/5.3_time_counter.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

  • Vergessen Sie nicht, das Board (Raspberry Pi Pico) und den korrekten Port vor dem Klicken auf die Hochladen-Taste auszuwählen.

Nach dem Ausführen des Programms wird das 4-stellige 7-Segment-Display zu einem Zähler, und die Zahl erhöht sich jede Sekunde um 1.

Wie funktioniert es?

Das Senden von Signalen an jedes 7-Segment-Display erfolgt auf die gleiche Weise wie bei 5.2 - Zahlenanzeige, mit der Funktion hc595_shift(). Der Kernpunkt beim 4-stelligen 7-Segment-Display ist die selektive Aktivierung jedes 7-Segment-Displays. Der damit verbundene Code ist wie folgt.

const int placePin[4] = {13,12,11,10};

void setup ()
{
    for (int i = 0; i<4;i++){
        pinMode(placePin[i],OUTPUT);
    }
}

void loop()
{
    pickDigit(0);
    hc595_shift(count%10/1);

    pickDigit(1);
    hc595_shift(count%100/10);

    pickDigit(2);
    hc595_shift(count%1000/100);

    pickDigit(3);
    hc595_shift(count%10000/1000);
}

void pickDigit(int digit){
    for(int i = 0; i < 4; i++){
        digitalWrite(placePin[i],HIGH);
    }
    digitalWrite(placePin[digit],LOW);
}

Hier werden vier Pins (GP10, GP11, GP12, GP13) verwendet, um jede Stelle des 4-stelligen 7-Segment-Displays einzeln zu steuern. Wenn der Status dieser Pins LOW ist, ist das entsprechende 7-Segment-Display aktiv; wenn der Status HIGH ist, arbeitet es nicht.

Die Funktion pickDigit(digit) wird verwendet, um alle 7-Segment-Displays zu deaktivieren und dann eine bestimmte Ziffer individuell zu aktivieren. Danach wird hc595_shift() verwendet, um den entsprechenden 8-Bit-Code für das 7-Segment-Display zu schreiben.

Das 4-stellige 7-Segment-Display muss kontinuierlich nacheinander aktiviert werden, damit alle vier Ziffern sichtbar sind. Das bedeutet, dass man im Hauptprogramm nicht einfach Code hinzufügen kann, der das Timing beeinflusst.

Allerdings ist es notwendig, diesem Beispiel eine Timing-Funktion hinzuzufügen. Wenn wir ein delay(1000) einfügen, wird offensichtlich, dass nur ein 7-Segment-Display jeweils aktiv ist und die Illusion entlarvt wird, dass alle vier 7-Segment-Displays gleichzeitig arbeiten.

Eine ausgezeichnete Methode, dies zu erreichen, ist die Verwendung der millis()-Funktion.

void setup()
{
    timerStart = millis();
}

void loop()
{
    unsigned int count = (millis() - timerStart) / 1000;
}

Die millis()-Funktion gibt die Anzahl der Millisekunden zurück, die seit dem Start des aktuellen Programms vergangen sind. Der erste Zeitwert wird als timerStart gespeichert;

wenn die Zeit erneut abgerufen werden muss, rufen wir die millis()-Funktion wieder auf und subtrahieren timerStart, um die bisherige Laufzeit des Programms zu ermitteln.

Abschließend wird dieser Zeitwert umgewandelt, um ihn auf dem 4-stelligen 7-Segment-Display darzustellen.