Zeiten mit dem Arduino Nano und Oled Display

Guten Tag,
ich bin zur zeit damit beschäftig das Oled Display "ssd1306" (128*64px version) am Nano zum Laufen zu bringen. Normale Schrift und alles funktioniert, wie es soll allerdings bekomme ich Variablen nur eingeschränkt zum laufen. Ich habe mir einen kleinen Code zusammengesucht um mithilfe von millis() die Laufzeit in Minuten und Stunden zu errechnen. Ich habe 2 eigentlich identische Versionen des Quellcodes, eine gibt die Minuten, Stunden und Sekunden über den seriellen Monitor aus und die andere Sollte die zeiten eigentlich am Display ausgeben. Nach 60 sekunden soll die minute auf 1 gehen und die Sekunde aus 0, was leider nur am seriellen Monitor funktioniert.

unsigned long time;
unsigned long sekunden;
unsigned long minuten;
unsigned long stunden;
int output;
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  
  stunden= millis() / 3600000;

  minuten= millis() / 60000 -  (stunden)*60;
  sekunden= millis()/ 1000 -  (minuten) * 60;

  
  //millisekunden werden in Minuten umgewandelt, Stunden werden in minuten ungewandelt und dann von den  aktuellen Minuten abgezogen

  Serial.println(stunden);
  Serial.println(minuten);
  Serial.println(sekunden);
  // wait a second so as not to send massive amounts of data
  delay(1000);
}
#include <U8glib.h>

#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); 
unsigned long time;
unsigned long sekunden;
unsigned long minuten ;
unsigned long stunden;
int output;
void draw(void) {
  // graphic commands to redraw the complete screen should be placed here  
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  char buf [9];
  sprintf (buf, "%d", (stunden));
  u8g.drawStr( 10, 10, buf);
  
   char buf2 [9];
  sprintf (buf2, "%d", (sekunden));
  u8g.drawStr( 90, 10, buf2);
  
   
   char buf3 [9];
  sprintf (buf3, "%d", (minuten));
 
  u8g.drawStr( 70, 10, buf3);
}



void setup(void) {
 stunden= millis() / 3600000;

  minuten= millis() / 60000 -  (stunden)*60;
  sekunden= millis()/ 1000 -  (minuten) * 60;

  


  // flip screen, if required
  // u8g.setRot180();
  
  // set SPI backup if required
  //u8g.setHardwareBackup(u8g_backup_avr_spi);

  // assign default color value
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop(void) {
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
delay(250);
}

Der erste Code funktioniert einwandfrei, allerdings die Version für das Display bleibt jeweils bei 0 stehen ohne das etwas passiert. Ich muss zugeben das ich nicht gerade viel Ahnung von Arduinos habe.

Ich wäre euch sehr dankbar wenn ihr mir ein paar tipps geben könnt in welche Richtung sich meine Recherche richten sollte um die Lösung für mein Problem zu finden.

Nenkrich:
Der erste Code funktioniert einwandfrei, allerdings die Version für das Display bleibt jeweils bei 0 stehen ohne das etwas passiert.

Du musst die Zeichen wahrscheinlich auf eine konstante Breite formatieren. Also wenn du Zahlen kleiner als 10 ausgibst muss eine führende Null davor. bei printf() geht das mit "%02d" für zwei Zeichen

Nachtrag:
Im Display Code fällt dann auf dass die Zeit nur einmal in setup() berechnest. Da brauchst du dich nicht zu wundern, dass im eigentlichen Programm nie was gemacht wird. In dem anderen Code hast du es doch auch in loop()

Das ist der eigentliche Fehler!

Wie Serenifly schon schrieb, die Berechnung musst du in die Loop aufnehmen. In deinem Fall ist es die Funktion "draw()", die wird ja aus der Loop aufgerufen.
Aber was möchtest du mit dieser Zeitberechnung machen?
Ich hoffe nicht, dass du so eine Uhr aufbauen möchtest.
Das wird zu ungenau, dazu benötigst du eine RTC wie z.B. die DS3231.

Vielen Dank erstmal für eure schnellen Antworten. Es ist erschreckend wie klein mein Fehler war, wenn man bedenkt das ich nur einen teil des Codes 'fehlplatziert' hatte.

Nein ich hatte nicht vor eine Uhr zu machen, zumindest nicht direkt. Mit diesem Projekt wollte ich eigentlich nur ein bisschen zum Umgang mit dem Display und Zeiten erlernen, die Real time Clock sollte in den nächsten Tagen da sein, dann werde ich vielleicht eine Uhr oder was ähnliches machen.

Vielen Dank und schönen Abend