Minuten/Sekunden Zähler

Hallo,
ich habe ein 4 digits 7 Segment Display, und möchte gerne das auf den letzten beiden Digits die Sekunden gezählt werde(0-60) und dann immer wenn 60 Sekunden rum sind eine Minute oben drauf kommt, dass heißt dann auf den 1. und 2. Digi.

Hilfeeeeeee;D

Hast Du schon eine Schaltung für das Display aufgebaut? Multiplexer, Decoder?

oder liegt das Problem im Sketch?
Grüße Uwe

#define SegA_An digitalWrite(13, LOW)
#define SegA_Aus digitalWrite(13, HIGH)
#define SegB_An digitalWrite(12, LOW)
#define SegB_Aus digitalWrite(12, HIGH)
#define SegC_An digitalWrite(11, LOW)
#define SegC_Aus digitalWrite(11, HIGH)
#define SegD_An digitalWrite(10, LOW)
#define SegD_Aus digitalWrite(10, HIGH)
#define SegE_An digitalWrite(9, LOW)
#define SegE_Aus digitalWrite(9, HIGH)
#define SegF_An digitalWrite(8, LOW)
#define SegF_Aus digitalWrite(8, HIGH)
#define SegG_An digitalWrite(7, LOW)
#define SegG_Aus digitalWrite(7, HIGH)
#define Speed 200
void setup()
{

pinMode(13, OUTPUT);
pinMode(7, OUTPUT);
pinMode(10, OUTPUT);
pinMode(8, OUTPUT);
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
pinMode(11, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
digitalWrite(2, HIGH);

}

const byte Muster[10] = { 63, 6, 91, 79, 102, 109, 125, 7, 127, 111 };
void Zeige(byte Position, byte Zahl)
{
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
digitalWrite(2, LOW);

if (Position == 1)
digitalWrite(5, HIGH);
if (Position == 2)
digitalWrite(4, HIGH);
if (Position == 3)
digitalWrite(3, HIGH);
if (Position == 4)
digitalWrite(2, HIGH);

byte d = Muster[Zahl];
if (d & 1)SegA_An;
else SegA_Aus;
if (d & 2)SegB_An;
else SegB_Aus;
if (d & 4)SegC_An;
else SegC_Aus;
if (d & 8)SegD_An;
else SegD_Aus;
if (d & 16)SegE_An;
else SegE_Aus;
if (d & 32)SegF_An;
else SegF_Aus;
if (d & 64)SegG_An;
else SegG_Aus;
delay(5);
}

void Zeige4(int i)
{
byte t, h, z, e;
t = i / 1000; i -= t * 1000;
h = i / 100; i -= h * 100;
z = i / 10; i -= z * 10;
e = i / 1;
Zeige(1, t);
Zeige(2, h);
Zeige(3, z);
Zeige(4, e);
}

void loop()
{
Zeige4(millis() / 1000);
}

Also so sieht das ganze aus, der Sketch ist noch von von einem Anderen Projekt aber er ist mit der Schaltung angepasst.

Hallo,

den laufenden Zähler von millis() zerlege ich wie folgt:

void time_ms_vereinzeln (unsigned long m_Sekunden)
{   // Zeit in ms seit µC Reset wird zerlegt für hh:mm:ss Format
 m_Sekunden = m_Sekunden/1000;         // Bsp. aus 8.000.000millis werden 8000sec
 _Laufende_Stunden = m_Sekunden/3600;   // 8000/3600=2,22 > 2h
 _Laufende_Minuten = (m_Sekunden/60)-(_Laufende_Stunden*60);  // (8000/60)-(2*60)=13min
 _Laufende_Sekunden = m_Sekunden-(_Laufende_Stunden*3600)-(_Laufende_Minuten*60); // 8000-7200-780=20sec
}

kannste bei Bedarf gern erweitern auf Tage.

sind bei mir globale Variablen, kannste aber in Deiner Funktion lokal machen

_Laufende_Stunden
_Laufende_Minuten
_Laufende_Sekunden