Frage zu Sketch von Jurs

Hallo agmue
Vielen Dank
Leider übersteigt das meine Fähigkeiten wie ich so was Programmieren muss.
Aber wenn du sagst das die Abweichungen im Sekunden Bereich liegen kann ich mit dem jetzigen Stand leben.
Nochmals Danke Smithi

Smithi:
Leider übersteigt das meine Fähigkeiten wie ich so was Programmieren muss.

Wenn das alle gesagt hätten, wäre Die Hilfe für Dich mager ausgefallen :wink:

Gruß Tommy

Habe jetzt mal alles aufgebaut und es funktioniert auch.
Leider habe ich noch ein Problem bei meinem Projekt gefunden bei dem ich nochmal Hilfe benötige.
Die jetzigen Schaltzeiten sind für mein Projekt nicht gerade optimal.
Ich möchte eine Stele beleuchten. Das ganze geschieht mit Bat./Solar. Muss also Strom sparen.
Wie kann ich die Schaltzeiten für Sommerzeit und Winterzeit getrennt behandeln.
z.B.
Sommerzeit: 20:00:00 Uhr Licht an 23:00:00 Uhr Licht aus
Winterzeit: 18:00:00 Uhr Licht an 22:00:00 Uhr Licht aus
Ich habe jetzt schon Stunden verbracht das irgendwie zu lösen finde aber nicht wo ich was ändern muss.

Ich habe mir die Lib jetzt nicht angeschaut aber irgendwo wird doch da eine Entscheidung getroffen, ob es Sommer- oder Winterzeit ist.
Dort füllst Du eine globale byte-Variable z.B. zeitverschiebung 0 = Sommer, 1 = winter

typedef struct {
  byte einStd;
  byte ausStd;
} zeit;

zeit zeiten[2] = {{20,23},{18,22}};

// In zeiten[zeitverschiebung].einStd hast Du dann Deine Einschaltzeit und in zeiten[zeitverschiebung].ausStd die Ausschaltzeit

Ungetestet, sollte aber funktionieren.

Gruß Tommy

Hi

Was ändert sich großartig (bis auf diese eine Stunde) zwischen Sommer und Winterzeit?
Du kannst sturr
'wenn Dunkel und Countdown noch nicht gelaufen, starte Countdown'
'wenn Hell stoppe Countdown, setze gelaufen=0'
'wenn Countdown==0, stoppe Countdown, setze gelaufen=1'
... warte eine Sekunde ...
goto 10

Benutzen, die Stele wird beleuchtet, sobald es dunkel genug ist.
Immer für die gleiche Zeit (wobei gerade im Sommer, wo Du nur drei Stunden Leuchtzeit vorsiehst, zumindest mehr per PV zu holen wäre).

MfG

Smithi:
Wie kann ich die Schaltzeiten für Sommerzeit und Winterzeit getrennt behandeln.
z.B.
Sommerzeit: 20:00:00 Uhr Licht an 23:00:00 Uhr Licht aus
Winterzeit: 18:00:00 Uhr Licht an 22:00:00 Uhr Licht aus

Ungetestet als Anregung:

swTime_t switchTimesS[] = { // define ON times summer
  {2000, 2300}
};
swTime_t switchTimesW[] = { // define ON times winter
  {1800, 2200}
};
void loop()
{
#define UPDATEINTERVAL 1000
  static unsigned long lastUpdateTime;
  if (millis() - lastUpdateTime >= UPDATEINTERVAL)
  {
    lastUpdateTime += UPDATEINTERVAL;
    RTCreadLocalTime(localTime); // read localTime so that 'time' is a local time
    if (summertimeEurope(localTime)) {
      relayState = isOnTime(localTime, switchTimesS, NUMSWITCHTIMES);
    } else {
      relayState = isOnTime(localTime, switchTimesW, NUMSWITCHTIMES);
    }
    output();
  }
}

Erst mal vielen Dank an alle!

@agmue
Das sieht ja schon mal sehr gut aus.
Habe das jetzt mal so eingefügt und das #define so wie unten geändert.
Damit kompiliert der Sketch ohne Fehler. Mir ist jetzt aber nicht ganz klar ob ich nicht auch das switchTimesW definieren muss.
Wenn ich es mit aktiviere erhalte ich diese Fehlermeldung:

C:\Users\Petra\AppData\Local\Temp\arduino_modified_sketch_608719\dateTimeLibEasyDemo.ino:21:0: warning: "NUMSWITCHTIMES" redefined

#define NUMSWITCHTIMES sizeof(switchTimesW)/sizeof(switchTimesW[0])
^
C:\Users\Petra\AppData\Local\Temp\arduino_modified_sketch_608719\dateTimeLibEasyDemo.ino:20:0: note: this is the location of the previous definition

#define NUMSWITCHTIMES sizeof(switchTimesS)/sizeof(switchTimesS[0])

Teil vom Sketch:

sTime localTime; // holds current time in local time (with regard to DST/summertime)
swTime_t switchTimesS = { // define ON times summer
{2000, 2300}
};
swTime_t switchTimesW = { // define ON times winter
{1800, 2200}
};

#define NUMSWITCHTIMES sizeof(switchTimesS)/sizeof(switchTimesS[0])
//#define NUMSWITCHTIMES sizeof(switchTimesW)/sizeof(switchTimesW[0])
//#define NUMSWITCHTIMES sizeof(switchTimes)/sizeof(switchTimes[0]) von original Sketch

Gruß Smithi

Die sind ja beide gleich lang, also genügt einer.
Es scheint, als hättest Du das inhaltlich noch nicht verarbeitet.

Gruß Tommy

Danke
Da hast du wohl recht :frowning:
Ich dachte weil da einmal "switchTimesW" u. einmal "switchTimesS" drinn ist muss ich beide definieren.

Hallo agmue
Ich konnte zwar aus Zeitgründen nur kurz testen aber es scheint alles so zu funtionieren wie ich es wollte.
Musste nur noch die LCD-Anzeige (von Post 19) anpassen.
Nächste Woche habe ich dann wieder etwas mehr Zeit um alles richtig zu testen.
Also vielen Dank nochmal

Allen ein schönes WE

Gruß Smithi

Grundsätzlich ist Deine Überlegung schon richtig. Basierend auf Deiner Vorgabe mit genau einer Leuchtzeit Sommers wie Winters bin ich vereinfachend davon ausgegangen, die Anzahl ist für beide Felder gleich. Sollte das mal anders werden, dann wäre der Aufwand etwas höher.

Hallo agmue
Sorry ich hatte eher keine Zeit zum Testen.
Dein Sketch funktioniert Fehlerfrei.
Ich kann mehrere Schaltzeiten Sommer und Winter definieren und es funktionieren auch z.B. 3 Zeiten Sommer und 2 Zeiten Winter.
Sehr gute Arbeit.
Nochmals Danke
Smithi