// ---------- Pin-Zuordnungen ----------
// Segmente a–g des 7-Segment-Displays
int segmentPins[] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
// 4 Stellen des Displays (Common Cathode)
int digitPins[] = {10, 11, 12, 13}; // D1, D2, D3, D4
// ---------- Segment-Kombinationen für 0–9 ----------
// Für jede Zahl speichern wir, welche Segmente leuchten sollen
byte numbers[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,0,0,1,1} // 9
};
// ---------- Zeit und Zählervariable ----------
unsigned long previousMillis = 0; // speichert letzte Zeit
int currentDigit = 0; // aktuelle Zahl von 0 bis 9
void setup() {
// Alle Segmentpins als Ausgang
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// Alle Digitpins als Ausgang
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
}
void loop() {
// --- Jede Sekunde neue Zahl ---
if (millis() - previousMillis >= 1000) {
previousMillis = millis(); // aktuelle Zeit merken
currentDigit++; // Zahl erhöhen
if (currentDigit > 9) {
currentDigit = 0; // zurück zu 0
}
}
// --- Alle 4 Stellen mit der gleichen Zahl anzeigen ---
// Durch schnelles Wechseln sieht es aus, als würden alle gleichzeitig leuchten
for (int i = 0; i < 4; i++) {
showDigit(currentDigit, i);
delay(5); // kurze Pause pro Stelle
}
}
// ---------- Zeigt eine Zahl (0–9) auf einer Stelle (0–3) ----------
void showDigit(int num, int digitIndex){
// Zuerst alle Stellen ausschalten (HIGH bei Common Cathode)
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH);
}
// Segmente setzen (1 = an, also HIGH bei Common Cathode)
for (int i = 0; i < 7; i++) {
if (numbers[num][i] == 1) {
digitalWrite(segmentPins[i], HIGH);
} else {
digitalWrite(segmentPins[i], LOW);
}
}
// Die gewünschte Stelle aktivieren (LOW = an)
digitalWrite(digitPins[digitIndex], LOW);
}