Frage zu if Bedingung

OP #7447053
Lesenswert?

Hallo,

ich habe folgendes Problem bei einer Softwareumsetzung in C.

Eine Funktion soll den Wert true zurückgeben, sobald die volle Stunde erreicht wird und nach einer 1 Stunde soll der Wert wieder false sein.

Beispiel: Start 15:00 Uhr, Ende 16:00 Uhr

In diesem Zeitfenster soll die Funktion den Wert true zurückgeben. Muss ich in der Funktion auch die Minuten und Sekunden berücksichtigen?

Moderator (Firma: Titel) Persönliche Seite #7447062
Lesenswert?

He S. schrieb:

Muss ich in der Funktion auch die Minuten und Sekunden berücksichtigen?

Wenn Start bei Anfang der Sekunde 15:00:00 ist und das Gerät mit dem Ende der Sekunde 16:00:00 abgeschaltet werden soll, dann läuft das Gerät das 3601 Sekunden.

Wenn du aber wie alle Welt mit "eine Stunde von 15 bis 16 Uhr" aussagen willst, dass das Gerät 3600 Sekunden eingeschaltet ist, dann muss bei jedem Sekundenwechsel die Zeit geprüft werden und es reicht tatsächlich aus, einfach auf die Stunde zu schauen. Solange da 15 steht, mus das Ding aktiv sein.

Egal, wie du es machst: der Fehler ist nur ein viertel Promille.

Moderator (Firma: Titel) Persönliche Seite #7447074
Lesenswert?

Harald K. schrieb:

Peter M. schrieb:

((Uhrzeit >= 15:00) && ( Uhrzeit <= 16:00))

3601 Sekunden.

Der bekannte Off-by-one Klassiker:

Hier sogar speziell "Off-by-one-minute", denn hier wird (dank sekündlicher Abfrage) auch bei 16:00:59 noch true zurückgegeben. Also ganze 61 Minuten lang.

He S. schrieb:

ich habes mal so gelöst: startTime = 15;

startTime ist hier im Grunde ein arg unglücklicher Name. Das sollte besser activeTime heißen....

Gast #7448142
Lesenswert?

He S. schrieb:

Eine Funktion soll den Wert true zurückgeben, sobald die volle Stunde erreicht wird und nach einer 1 Stunde soll der Wert wieder false sein.

Nur die eine volle Stunde (15:00 bis 15:59:59.999) oder jede volle Stunde?

Ich frage, weil um 16:00 (wo du ein false erwartest) bereits die nächste volle Stunde begonnen hat. Das ist so bei jeder Stunde des Tages.

Irgendwie ist deine Anforderung sehr unklar. In welchem Format liegt dir denn die Uhrzeit vor?

#7449652
Lesenswert?

If clock.hour == 15 return TRUE return FALSE

Wenn Jahr / Tag / Stunde / Minute / Sekunde ... bei dir nicht so leicht abfragbar sind, solltest du

  • ein bisserl gucken, wie man es bei deiner Notation schaffen könnte,
  • oder dir eine abfragbarere Notation ausdenken.

Oder das Programmieren gegen Ikebana o.ä. eintauschen.

#7449684
Lesenswert?

(prx) A. K. schrieb:

Und wo bleibt die Frage? Erwartest du, dass dir jemand auf Basis dieser Information ein für alle denkbaren Mikrocontroller-Umgebungen geltenden Code schreibt?

Natürlich, eine KI hat damit kein Problem. Vielleicht noch nicht perfekt, aber damit werden wir noch viel Spaß bekommen...

Mal ein Beispiel:

AI-Codegenerator Speisekarte Was soll ich für Sie codieren? Bitte geben Sie Ihre Eingabeaufforderung auf Englisch an, überprüfen Sie Eingabeaufforderungsbeispiele und schreiben Sie vollständige Sätze, um optimale Ergebnisse zu erzielen.

Eine Funktion soll den Wert true zurückgeben, sobald die volle Stunde erreicht wird und nach einer 1 Stunde soll der Wert wieder false sein.

Beispiel: Start 15:00 Uhr, Ende 16:00 Uhr

Unten finden Sie ein C-Code-Snippet für Arduino, das prüft, ob die aktuelle Zeit genau auf die volle Stunde eingestellt ist, und true zurückgibt, wenn dies der Fall ist, und false, wenn dies nicht der Fall ist.

1
#include <Wire.h>
2
#include "RTClib.h"
3

4
RTC_DS1307 rtc;
5

6
bool isItFullHour() {
7
  DateTime now = rtc.now();
8
  if (now.minute() == 0 && now.second() == 0) {
9
    return true;
10
  } else {
11
    return false;
12
  }
13
}
14

15
void setup () {
16
  rtc.begin();
17
}
18

19
void loop () {
20
  if (isItFullHour()) {
21
    // Do something
22
  } else {
23
    // Do something else
24
  }
25
}

Zunächst müssen Sie die erforderlichen Bibliotheken einbinden, in diesem Fall die Wire- und RTClib-Bibliotheken. Die Wire-Bibliothek ermöglicht die Kommunikation mit I2C/TWI-Geräten und die RTClib-Bibliothek wird für die Echtzeituhr verwendet.

Die isItFullHour()Funktion ruft die aktuelle Zeit von der Echtzeituhr ab und prüft, ob die aktuelle Minute und Sekunde beide 0 sind. Wenn dies der Fall ist, bedeutet dies, dass die aktuelle Zeit genau auf die volle Stunde eingestellt ist, sodass die Funktion „true“ zurückgibt. Andernfalls wird false zurückgegeben.

In der setup()Funktion initialisieren Sie die Echtzeituhr.

In der loop()Funktion überprüfen Sie fortlaufend, ob die aktuelle Uhrzeit auf die volle Stunde genau ist. Wenn dies der Fall ist, können Sie etwas tun (z. B. eine LED einschalten, eine Nachricht drucken usw.), und wenn nicht, können Sie etwas anderes tun.

Beitrag #7450262 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren