Frage zur Programierung

Hallo Forum

Ich habe einmal eine Frage, und zwar geht es mir darum eine Unwetter Simulation bei meinem Riffaquarium zu erstellen. Aber ich möchte diese nicht jeden Tag haben sondern nur an 4 Tagen im Monat,. das Unwetter läuft schon, lediglich die Einteilung der Tage muss ich noch fest legen. Da ich nicht so viel Ahnung vom Programmieren habe habe ich eine if abfrage gemacht und möchte gerne wissen ob das so geht oder ob ich was verkehrt mache. Gesteuert wird das über eine RTC DSF1307 . Der if CODE lautet:

if( datum[ 5 ] == 7 && datum[ 2 ] == 23 or datum[ 5 ] == 14 && datum[ 2 ] == 23 or datum[ 5 ] == 21 && datum[ 2 ] == 23 or datum[ 5 ] == 28 && datum[ 2 ] == 23 )

Ich weis nicht ob ich es richtig gemacht habe, der Arduino gibt mir keinen Fehler raus, es wäre lieb wenn mir einer sagen könnte ob es so geht.

Ich weiß auch nicht ob Du's richtig gemacht hast. Dein Coderschnipsel ist sehr kryptisch.
Was sind datum[ 2 ] bzw datum[ 5 ] ?
Grüße Uwe

Hallo, datum[ 2 ] ist das was aus dem RTC ausgelesen wird also die STD. , datum 2 ist die volle Stunde, das passt schon , datum [ 5 ] ist der Tag aus dem Datum wo es mir drum geht ist die zusammenstellung der IF Abfrage. die Zeichen && kenne ich gar nicht ich kenne nur and und or als abfrage. ich möchte gerne z.B. bei datum [ 7 ] das wäre der 7.Tag im Monat um 23 UHR das Unwetter laufen lassen. und das sollte 4 mal im Monat passieren, also am 7. 14. 21. und 28. Tag im Monat. ich habe es so eingegeben und die Software des Arduino meckert nicht.

Ah, so versteht man auch was du willst :wink:

Im Grunde ist es wie Mathematik, es gilt quasi punkt vor strich oder hier eben && vor ||..allerdings lassen sich mit klammern die Bedingungen und wie sie zusammengehören übersichtlicher darstellen.. In deinem Fall wäre das: (mit or = ||)

    if((datum[5] == 7 && datum[2] == 23) || (datum[5] == 14 && datum[2] == 23) || (datum[5] == 21 && datum[2] == 23) || (datum[5] == 28 && datum[2] == 23)) 
    (hier wärs auch ohne Klammern gegangen - also so wie du das hattest)

Oder etwas eleganter

   if((datum[2] == 23) && (datum[5] == 7  || datum[5] == 14 || datum[5] == 21 || datum[5] == 28 ))

Ich danke Dir für die Erklärung, ich wusste nichts von den 2 Trenn Strichen, da mir die Software des Arduino keinen Fehler angezeigt hat. Danke.

Hätte auch gepasst, die Symbole kannst du analog zu den verbalen Ausdrücken nutzen. && = and bzw. || = or
Für das Resultat spielts hier auf jeden Fall keine Rolle, ich wollts nur einheitlich gestalten.

Pass nur auf dass du || und nicht | schreibst. Einmal einen logischen Operator ist eine bitweise Verknüpfung. Zweimal ein logische. Das Problem damit ist dass dir die bitweise Verknüpfung natürlich das Ergebnis zurückgibt, wodurch der Code kompiliert aber eine völlig andere Funktion hat. Ein ähnliches Problem gibt es bei = und ==.

Danke für den Hinweis