Forum: Mikrocontroller und Digitale Elektronik Arduino - Frage zu Überlauf bei Uhrzeit


von Mirko (mirkomikro)


Lesenswert?

Hallo,

ich trau mich gar nicht zu fragen, da ich dafür den von mir 
geschriebenen Sketch offenlegen muss und das ist mir ehrlichgesagt etwas 
peinlich.

Nagut. Ich habe folgendes Problem. Wenn ich eine Zeit einstellen möchte 
und diese über ein LCD anzeigen möchte, dann wird bei 60 Minuten + 1 
Minute der Wert 01:61 (HH:MM) ausgegeben, sollte aber 01:01 (HH:MM) 
sein. wie kann man das lösen?

Für ein Tip, Hinweis oder sogar angepassten Code wäre ich dankbar.
1
void Zeitumrechner() {
2
  lcd.clear();
3
  lcd.setCursor(0, 0);
4
   lcd.print("Fertig in");
5
   // Zeitumrechner
6
  Zeit = Timer;
7
  Stunde = Zeit / 3600;
8
  Minute = Zeit / 60;
9
  Sekunde = Zeit - Minute * 60;
10
  // Zeitumrechner Ende
11
  // Fuehrende Null anzeigen im Display
12
  if (Stunde < 10) {
13
    lcd.setCursor(0, 1);
14
     lcd.print("0");
15
     lcd.setCursor(1, 1);
16
     lcd.print(Stunde);
17
     } else {
18
    lcd.setCursor(0, 1);
19
     lcd.print(Stunde);
20
     }
21
  lcd.setCursor(2, 1);
22
   lcd.print(":");
23
   if (Minute < 10) {
24
    lcd.setCursor(3, 1);
25
     lcd.print("0");
26
     lcd.setCursor(4, 1);
27
     lcd.print(Minute);
28
     } else {
29
    lcd.setCursor(3, 1);
30
     lcd.print(Minute);
31
     }
32
  lcd.setCursor(5, 1);
33
   lcd.print(":");
34
   if (Sekunde < 10) {
35
    lcd.setCursor(6, 1);
36
     lcd.print("0");
37
     lcd.setCursor(7, 1);
38
     lcd.print(Sekunde);
39
     } else {
40
    lcd.setCursor(6, 1);
41
     lcd.print(Sekunde);
42
     }
43
  // Fuehrende Null anzeigen im Display Ende
44
}

: Verschoben durch Moderator
von Tobias S. (x12z34)


Lesenswert?

Stunde = Zeit / 3600;
Minute = (Zeit - Stunde * 3600 )/ 60;
Sekunde = Zeit - Stunde ** 3600 - Minute * 60;

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

Mirko schrieb:
> wie kann man das lösen?

Schau dir mal an, was Modulo (%) macht. Das könnte vielleicht nützlich 
sein.

von Pat A. (patamat)


Lesenswert?

Sekunde = Zeit % 60;  // modulo 60

von Mirko (mirkomikro)


Lesenswert?

Tobias S. schrieb:
> Stunde = Zeit / 3600;
> Minute = (Zeit - Stunde * 3600 )/ 60;
> Sekunde = Zeit - Stunde ** 3600 - Minute * 60;

Klasse, vielen Dank. Eigentlich logisch, aber manchmal sieht man den 
Wald vor lauter Bäumen nicht.. Danke!


Und wegen Modulo %

Ja über diesen Befehl bin ich bereits gestolpert, und es wäre bestimmt 
auch die korrekte Lösung, aber mir kam es so, wie ich es im Moment 
gelöst habe am sinnigsten vor.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.