Forum: Mikrocontroller und Digitale Elektronik Frage zu if Bedingung


von Zo R. (hsch1978)


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?

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

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
von Peter D. (peda)


Lesenswert?

1
  return hour & 1;

von Zo R. (hsch1978)


Lesenswert?

Ich erwarte gar nichts. Entschuldige vielmals, dass ich einen Beitrag 
gestellt habe.

: Bearbeitet durch User
von Ingo L. (corrtexx)


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.
>
> Beispiel: Start 15:00 Uhr, Ende 16:00 Uhr
Was passiert zwischen 16:00 Uhr und 17:00 Uhr?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Zo R. (hsch1978)


Lesenswert?

Hallo Lothar,

tatsächlich wird die Funktion jede Sekunde ausgeführt. Also brauche ich 
nur die Stunde zu prüfen.

von Peter M. (peterdermeter87)


Lesenswert?

if ((Uhrzeit >= 15:00) && ( Uhrzeit <= 16:00)) return 1;
else return 0;

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Peter M. schrieb:
> ((Uhrzeit >= 15:00) && ( Uhrzeit <= 16:00))

3601 Sekunden.

von Zo R. (hsch1978)


Lesenswert?

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
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Jobst Q. (joquis)


Lesenswert?

Lothar M. schrieb:
> Das sollte besser activeTime heißen....

activeHour wäre noch päziser, da ja nur die Stunde abgefragt wird.

von Zo R. (hsch1978)


Lesenswert?

Ok werde es anpassen

von Stefan F. (Gast)


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?

von Ralf K. (kurtx)


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.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

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
von Jo (buildroot)


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.

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

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.

von Norbert (der_norbert)


Lesenswert?

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.

von Roland F. (rhf)


Lesenswert?

Hallo,
Norbert schrieb:
> Nein!
>
> Damit wäre die Frage des TE umfassend und korrekt beantwortet gewesen.

:-)))

rhf

von Franz (kubawu)


Lesenswert?

ChatGPT hilft dir bei solchen Fragen, mit einem funktionierenden Code ;)

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
Noch kein Account? Hier anmelden.