Programmlaufzeit auf 4 7 Segment Display

Ich bin ein einem Proekt und will ein 4 7 Segment Display Sekunden und Minuten vom Start des Programms programmieren. Ich habe schon ein Programm diese zählt aber nicht im richtigen Sekundentakt.

Was ist falsch oder was könnte ich anders machen???

#include <core_build_options.h>

#include "SevSeg.h" //Die vorher hinzugefügte Library laden
SevSeg sevseg; 
long zaehler = 0;


void setup() {
  
long zaehler = 0;
 
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5}; 
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; 
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins); 

}

void loop() 
{
delay(1);

zaehler++;

 
sevseg.setNumber(zaehler/1000); 

sevseg.refreshDisplay();
//erscheinen.
sevseg.setBrightness(90);

}

Vielen Dank

Challenger

Ich nehme mal an dein Zähler läuft ein wenig zu langsam ??

Delay ist keine gute Idee.
Das macht ca. 1 Sekunde Pause aber dein Code macht ja auch noch andere Dinge die
Zeit brauchen also bis du schon >1 Sekunde -> Ausgabe wieder 1 Sekunde warten
und wieder Zeit für "alles Mögliche". Uhr geht nach.

Warum eigentlich Zähler / 1000 ?
Da du bei Zähler = 0 anfängst ergibt Zähler / 1000 erst nach fast 20 Minuten 1 !!!!

Besser ist es du misst die Zeit mit "millis" !

.
.
.
.

uint32_t lastMillis = 0;

void loop()
{
   if ((millis() - lastMillis) > 1000) // in Millisekunden
   {
      lastMillis = millis();
      Zaehler ++;
 
      /* Tue was immer du tun willst */

      lastMillis = millis();
   }

    // And so on ........

}

Ulli

Ich möchte zu einem späteren Programm parallel die Programmlaufzeit auf einer 7 Segmentanzeige laufen lassen.
Ich hätte gerne, dass die beiden letzten Ziffern bis 59 zählen und die vorderen Zahlen die Minuten anzeigen.

Ich weiss allerdings nicht wie ich an die Sache ran gehen soll.

Kann mir einer mit einem Code helfen?

Ich habe den Aufbau so realisiert:

Byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5}; 
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; 
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);

Du hast die Arrays immer noch an der falschen Stelle stehen.

Schmeiss alle Delays raus.

Mach aus dem einen Mini-Projekt nicht tausend Threads.

Verstehe ich nicht was anstatt den Delays reinamchen???

Datei / Beispiele / 02.Digital / BlinkWithoutDelay zeigt das Prinzip.

BlinkwithoutDelay - Die Nachtwächtererklärung

Das Thema ist bis zum Erbrechen durchgenudelt, ich werde das hier nicht wieder hochwürgen.

Danke viel mals und Entschuldingung ich wollte Sie nicht verärgern.

Du kannst mich ruhig duzen, aber bitte beschränke technische Fragen auf das Forum,
dann haben auch andere etwas davon und können sich vor allem an der Diskussion beteiligen.

challenger:
Verstehe ich nicht was anstatt den Delays reinamchen???

Das steht in #1, bitte lesen!

Der Teil mit den Millis ist jetzt klar Danke.

Wie kann ich Minuten und Sekunden auf einem 4 7 Segmanet Display anzeigen lassen?
Die ersten zwei Segmente sollen die Minuten anzeigen die anderen zwei die Sekunden.
Die Laufzeit beträgt vorraussichtlich 30min. Eine Anzeige in Sekunden reicht nicht und eine Anzeige in Minuten wäre für die Anwendung "langweilig".

Danke

Challenger

uint8_t Minuten;
uint8_t Sekunden;

Minuten   = Zaehler  / 60;   // Schon mal gehört ?
Sekunden = Zaehler % 60;  // Ist das wirklich so schwer ?

Ulli