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?
:
Bearbeitet durch User
Und wo bleibt die Frage? Erwartest du, dass dir jemand auf Basis dieser Information ein für alle denkbaren Mikrocontroller-Umgebungen geltenden Code schreibt?
:
Bearbeitet durch User
Ich erwarte gar nichts. Entschuldige vielmals, dass ich einen Beitrag gestellt habe.
:
Bearbeitet durch User
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. > > Beispiel: Start 15:00 Uhr, Ende 16:00 Uhr Was passiert zwischen 16:00 Uhr und 17:00 Uhr?
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.
Hallo Lothar, tatsächlich wird die Funktion jede Sekunde ausgeführt. Also brauche ich nur die Stunde zu prüfen.
if ((Uhrzeit >= 15:00) && ( Uhrzeit <= 16:00)) return 1; else return 0;
:
Bearbeitet durch User
Danke euch ich habes mal so gelöst:
1 | startTime = 15; |
2 | |
3 | bool Check(void) |
4 | {
|
5 | ...
|
6 | if(startTime == getTimeDate.dateTime.hour) |
7 | {
|
8 | return true; |
9 | }
|
10 | return false; |
11 | }
|
:
Bearbeitet durch User
Harald K. schrieb: > Peter M. schrieb: >> ((Uhrzeit >= 15:00) && ( Uhrzeit <= 16:00)) > 3601 Sekunden. Der bekannte Off-by-one Klassiker: - https://de.wikipedia.org/wiki/Off-by-one-Error 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....
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Das sollte besser activeTime heißen.... activeHour wäre noch päziser, da ja nur die Stunde abgefragt wird.
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?
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.
Ralf K. schrieb: > If clock.hour == 15 > return TRUE > return FALSE Was ist das für eine seltsame Sprache? Kann die kein:
1 | return clock.hour == 15 |
:
Bearbeitet durch User
(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.
:
Bearbeitet durch User
Jo schrieb: > Unten finden Sie ein C-Code-Snippet für Arduino, das prüft, ob die > aktuelle Zeit genau auf die volle Stunde eingestellt ist Das ist nur leider keine Antwort auf die Frage. Die angefragte Funktion war eine ganz andere.
Ich darf mal, ja? He S. schrieb: > Muss ich in der Funktion auch die Minuten und Sekunden berücksichtigen? Nein! Damit wäre die Frage des TE umfassend und korrekt beantwortet gewesen.
Hallo, Norbert schrieb: > Nein! > > Damit wäre die Frage des TE umfassend und korrekt beantwortet gewesen. :-))) rhf
Beitrag #7450262 wurde von einem Moderator gelöscht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.