Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
Komponenten und Zubehör
| Komponente | Menge |
|---|---|
| Breadboard (generisch) | 1 |
| Jumper-Kabel (generisch) | 1 |
| SparkFun 7-Segment Serial Display – Rot | 1 |
| USB-A auf Mini-USB-Kabel | 1 |
| Arduino Mega 2560 | 1 |
Apps und Onlinedienste
- Arduino IDE
Projektbeschreibung
Dieses Projekt entstand aus der Notwendigkeit, einen Timer zu haben, als keiner zur Hand war. Der Countdown startet automatisch nach dem Hochladen des Codes auf den Arduino (jeder Typ funktioniert). Um die Gesamtzeit zu ändern, passen Sie die Variable n im Code an. Beachten Sie: 1000 = 1 Sekunde, also entspricht 60000 60 Sekunden. Die Formel lautet: Sekunden × 1000. Drückt man den Reset-Knopf, startet der Zähler neu.
long n = 60000; // Startzeit – kann auf beliebigen Wert geändert werden
Code
Der folgende Code steuert das 7-Segment-Display über Multiplexing. Er verwendet keine externe Bibliothek, sondern treibt die Segmente direkt an.
// Pin-Belegung für 7-Segment-Display (Common Anode)
// Segmente: A=12, B=10, C=8, D=7, E=6, F=11, G=9, Dezimalpunkt=5
// Stellen: 1. Stelle=1, 2. Stelle=2, 3. Stelle=3, 4. Stelle=4
const int a = 12, b = 10, c = 8, d = 7, e = 6, f = 11, g = 9;
int p = 0; // Dezimalpunkt-Pin
int startStopReset = 13;
const int d1 = 1, d2 = 2, d3 = 3, d4 = 4;
long n = 60000; // Startzeit in Millisekunden (60 Sek.)
int x = 100;
int del = 55; // Multiplexing-Delay in µs
void setup() {
pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT);
pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT);
pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(p, OUTPUT);
pinMode(startStopReset, INPUT_PULLUP);
}
void loop() {
// Multiplexing: jede Stelle kurz nacheinander ansteuern
digitalWrite(p, HIGH);
clearLEDs(); pickDigit(1); pickNumber((n/x/1000)%10); delayMicroseconds(del);
clearLEDs(); pickDigit(2); pickNumber((n/x/100)%10); delayMicroseconds(del);
clearLEDs(); pickDigit(3); dispDec(3); pickNumber((n/x/10)%10); delayMicroseconds(del);
clearLEDs(); pickDigit(4); pickNumber(n/x%10); delayMicroseconds(del);
n--; // Countdown; für Stoppuhr: n++
// Reset bei Tastendruck (Pin 13 auf LOW)
if (digitalRead(13) == LOW) {
n = 60000; // Ursprüngliche Startzeit wiederherstellen
}
}
void pickDigit(int x) {
digitalWrite(d1, HIGH); digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH); digitalWrite(d4, HIGH);
switch(x) {
case 1: digitalWrite(d1, LOW); break;
case 2: digitalWrite(d2, LOW); break;
case 3: digitalWrite(d3, LOW); digitalWrite(p, HIGH); break;
default: digitalWrite(d4, LOW); break;
}
}
void pickNumber(int x) {
switch(x) {
case 1: one(); break; case 2: two(); break; case 3: three(); break;
case 4: four(); break; case 5: five(); break; case 6: six(); break;
case 7: seven(); break; case 8: eight(); break; case 9: nine(); break;
default: zero(); break;
}
}
void dispDec(int x) { digitalWrite(p, LOW); }
void clearLEDs() {
digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW);
digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW);
digitalWrite(g, LOW); digitalWrite(p, LOW);
}
// Segmentmuster für Ziffern 0-9 (Common Anode: HIGH = Segment an)
void zero() { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,HIGH); digitalWrite(f,HIGH); digitalWrite(g,LOW); }
void one() { digitalWrite(a,LOW); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,LOW); digitalWrite(e,LOW); digitalWrite(f,LOW); digitalWrite(g,LOW); }
void two() { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,LOW); digitalWrite(d,HIGH); digitalWrite(e,HIGH); digitalWrite(f,LOW); digitalWrite(g,HIGH); }
void three() { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,LOW); digitalWrite(g,HIGH); }
void four() { digitalWrite(a,LOW); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,LOW); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); }
void five() { digitalWrite(a,HIGH); digitalWrite(b,LOW); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); }
void six() { digitalWrite(a,HIGH); digitalWrite(b,LOW); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); }
void seven() { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,LOW); digitalWrite(e,LOW); digitalWrite(f,LOW); digitalWrite(g,LOW); }
void eight() { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); }
void nine() { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); }
Schaltplan
Verbinden Sie das 4-stellige Display gemäß folgendem Diagramm mit dem Arduino:
Herstellungsprozess
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
- Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
- Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
- Intelligenter kabelloser Lichtschalter-Controller: Arduino-basierter Fernschalter-Manipulator
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
- Arduino Handwasch-Timer: Einfaches DIY-Tool gegen COVID-19
- Arduino-Sonnenblume: Elektronischer Sonnen-Tracker selbst bauen
- RC Porsche selbst bauen: Arduino-Schritt-für-Schritt-Anleitung