Zeitschaltuhr mit Poti Formeln gesucht

hallo, habe ne zeutschaltuhr, suche FORMELN, 18h ist val2==0 und 12h ist val2==3

habe hier meinen schrottigen nicht funktionstüchtigen code

  //Beginn der Zeitschaltuhr- Schaltzeiten 18h- - - - --  -  -  -  -  -  -  -  -  -  -  -

  // Startzeit   /18 hrs on mode
  if (val2 == 0 && val5 <6 && t.hour - val5 <= 17 ||)
  {
    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);

  }//Endzeit 18hrs mode ON, 6hrs OFF
  else if (val2 == 0 && val5 < 6 && t.hour - val5 >= 18||)
  {
    digitalWrite(ledPin, HIGH);
    digitalWrite(ledPin2, HIGH);
  }

im anhang die geforderten Funktionen

vielen, viele Dank für eure Bemühungen

18h 12h K2.pdf (11.2 KB)

Kann die Anhänge nicht ansehen mit dem Tablet, aber ich versteh auch die Frage nicht. Wo kommt die Zeit her? RTC? Beschreib mal das Projekt ein wenig genauser. Oder besser ganz genau :-)

Irgendwie kommt mir das Thema bekannt vor: DS3231 (RTC) + LCD2004 + 4 Potentiometer Startzeit setzen

Da hatte ich doch ein Programm vorgeschlagen, was gefällt daran nicht?

Dtensta: im anhang die geforderten Funktionen

vielen, viele Dank für eure Bemühungen

Das ist bei Dir alles sehr ungeordnet und unübersichtlich, und Du zeigst auch nur wenige Zeilen Codeschnipsel vor, ohne setup() und ohne loop() Funktion, aber wenn ich den anderen von Dir gestarteten Thread quer lese, dann komme ich drauf, daß Du - mit einem ersten Poti eine Startzeit zwischen 0 und15 Uhr (nur ganze Stunden) einstellen möchtest - und mit einem zweiten Poti die Schaltdauer auf 18 Stunden oder 12 Stunden) einstellen können möchtest. - eine RTC soll die aktuelle Zeit liefern und ein Schaltausgang im Zeitverlauf EIN/AUS geschaltet werden Habe ich das so richtig verstanden?

Dann sähe bei mir die loop Funktion ganz grob ungefähr so aus:

void loop()
{
  byte Startzeit, Endzeit;

  Startzeit= analogRead(A0)/64;  // Annahme ==> Startzeit-Poti an A0
  boolean is18HourMode= analogRead(A1)/512;  // Annahme?==> is18HourMode-Poti an A1
  if (is18HourMode)  
  Endzeit= (Startzeit+18)%24;
  else Endzeit= (Startzeit+12)%24;
  schaltenNachZeit(Startzeit,Endzeit,aktuelleZeit);
}

Die Variable aktuelleZeit wäre dabei die aktuelle Stunde aus der RTC, die Funktion schaltenNachZeit muß noch geschrieben und ergänzt werden, ebenso fehlt noch der Code zum Auslesen der Zeit aus der RTC.

Wobei die Funktion "schaltenNachZeit" zwei verschiedene Fälle unterscheiden muss: 1) Die Endzeit ist größer als die Startzeit, dann liegt der Fall vor, dass Einschalten und Ausschalten am selben Tag erfolgt 2) Die Endzeit ist kleiner als die Einschaltzeit, dann liegt der Sonderfall "Schalten über Mitternacht" vor

Beim "Schalten über Mitternacht" ist die Schaltlogik für EIN/AUS genau entgegengesetzt wie beim "Schalten am selben Tag";

thx für eure Bemühungen,

ich verwende eine DS3231 RTC, 4 potis & 4 Ausgänge (LED’s)

ich würde gerne mit poti (val5) die startzeit von 0-23:00 auswählen

mit poti2 (val2) zwischen 18h on (6h off) (val2==0) & 12h on (12h off) (val2==3) umschalten

und wie in den PDF, bildern noch zusätzlich den Lüfter während der auszeit an/ aus schalten
(Lüfter kann vorerst weggelassen werden)

int Poti1 = A2;                     //  Poti1 Pin       Start time
int Poti2 = A3;                     //  Poti2 Pin       18/12h on
int Poti3 = A6;                     //  Poti3 Pin       air condition
int Poti4 = A7;                     //  Poti4 Pin       water
int val1;                           //  save Poti 1 value
int val2;                           //  save Poti 2 value
int val3;                           //  save Poti 3 value
int val4;                           //  save Poti 4 value
int val5;                           //18hrs on START save
int val6;                           //12hrs on START save
int ledPin = 8;                     //  LED1 Pin  8           "BULB"
int ledPin2 = 9;                    //  LED2 Pin  9           "FAN"
int ledPin3 = 10;                   //  LED3 Pin 10           "Water"
int ledPin4 = 11;                   //  LED4 Pin 11           "Reserved"
void setup()
{pinMode(ledPin, OUTPUT);          //  LED1 Output
  pinMode(ledPin2, OUTPUT);         //  LED2 Output
  pinMode(ledPin3, OUTPUT);         //  LED3 Output
  pinMode(ledPin4, OUTPUT);         //  LED4 Output
}

void loop()
{
  t = rtc.getTime();
  //Potentiometer values ---------------------------------------------------
  val1 = analogRead(Poti1); //
  val2 = analogRead(Poti2) / 256;    // 0-1023 zu 0-3 12hrs/18hrs mode
  val3 = analogRead(Poti3) / 256;     // 0-1023 zu 0-3 fan
  val4 = analogRead(Poti4) / 256;     // 0-1023 zu 0-3 water pump
  val5 = map(val1, 0, 1023, 0, 24);  //0-23 Poti START ZEIT
//Beginn der Zeitschaltuhr- Schaltzeiten - - - - --  -  -  -  -  -  -  -  -  -  -  -

  // Belüftung größer als 0 = Dauer AN // 0 = AUS bzw. immer mit dem Licht an
  //(Werte von 0-3)
  if (val3 > 0 ) {
    digitalWrite(ledPin3, LOW);
  }
  else if (val3 == 0 ) {
    digitalWrite(ledPin3, HIGH);
  }

  // Bewässerung größer als 0 = Dauer AN // 0 = AUS
  //(Werte von 0-3)
  if (val4 > 0) {
    digitalWrite(ledPin4, LOW);
  }
  else if (val4 == 0 ) {
    digitalWrite(ledPin4, HIGH);
  }
  //Beginn der Zeitschaltuhr- Schaltzeiten 18h- - - - --  -  -  -  -  -  -  -  -  -  -  -

  // Startzeit   /18 hrs on mode
  if (val2 == 0 && val5 <6 && t.hour - val5 <= 17 ||)
  {
    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);

  }//Endzeit 18hrs mode ON, 6hrs OFF
  else if (val2 == 0 && val5 < 6 && t.hour - val5 >= 18||)
  {
    digitalWrite(ledPin, HIGH);
    digitalWrite(ledPin2, HIGH);
  }

leider verstehe ich die vorgehensweise bei dem code von jurs nicht wirklich, daher gelingt mir die Umsetzung nicht, aktuelle RTC stunde == t.hour; startzeit == val5

void loop()
{
  byte Startzeit, Endzeit;

  Startzeit= analogRead(A0)/64;  // Annahme ==> Startzeit-Poti an A0
  boolean is18HourMode= analogRead(A1)/512;  // Annahme?==> is18HourMode-Poti an A1
  if (is18HourMode)  
  Endzeit= (Startzeit+18)%24;
  else Endzeit= (Startzeit+12)%24;
  schaltenNachZeit(Startzeit,Endzeit,aktuelleZeit);
}

mfg Dennis

bool oneshot = true;

void setup() {
  Serial.begin(9600);
  Serial.println("Programmstart");
}

void loop()
{
  if (oneshot)
  {
    oneshot = false;
    byte Startzeit, Endzeit;
    for (Startzeit = 0; Startzeit < 24; Startzeit++)
    {
      Serial.print("Startzeit: ");
      Serial.print(Startzeit);
      Endzeit = (Startzeit + 12);
      Serial.print("\t");
      Serial.print(Endzeit);
      Endzeit = (Startzeit + 12) % 24;
      Serial.print("\tEndzeit12: ");
      Serial.print(Endzeit);
      Endzeit = (Startzeit + 18);
      Serial.print("\t");
      Serial.print(Endzeit);
      Endzeit = (Startzeit + 18) % 24;
      Serial.print("\tEndzeit18: ");
      Serial.print(Endzeit);
      Serial.println();
    }
  }
}

Die Berechnungen von jurs liefern diese Ausgabe:

Programmstart
Startzeit: 0    12   Endzeit12: 12    18   Endzeit18: 18
Startzeit: 1    13   Endzeit12: 13    19   Endzeit18: 19
Startzeit: 2    14   Endzeit12: 14    20   Endzeit18: 20
Startzeit: 3    15   Endzeit12: 15    21   Endzeit18: 21
Startzeit: 4    16   Endzeit12: 16    22   Endzeit18: 22
Startzeit: 5    17   Endzeit12: 17    23   Endzeit18: 23
Startzeit: 6    18   Endzeit12: 18    24   Endzeit18: 0
Startzeit: 7    19   Endzeit12: 19    25   Endzeit18: 1
Startzeit: 8    20   Endzeit12: 20    26   Endzeit18: 2
Startzeit: 9    21   Endzeit12: 21    27   Endzeit18: 3
Startzeit: 10   22   Endzeit12: 22    28   Endzeit18: 4
Startzeit: 11   23   Endzeit12: 23    29   Endzeit18: 5
Startzeit: 12   24   Endzeit12: 0     30   Endzeit18: 6
Startzeit: 13   25   Endzeit12: 1     31   Endzeit18: 7
Startzeit: 14   26   Endzeit12: 2     32   Endzeit18: 8
Startzeit: 15   27   Endzeit12: 3     33   Endzeit18: 9
Startzeit: 16   28   Endzeit12: 4     34   Endzeit18: 10
Startzeit: 17   29   Endzeit12: 5     35   Endzeit18: 11
Startzeit: 18   30   Endzeit12: 6     36   Endzeit18: 12
Startzeit: 19   31   Endzeit12: 7     37   Endzeit18: 13
Startzeit: 20   32   Endzeit12: 8     38   Endzeit18: 14
Startzeit: 21   33   Endzeit12: 9     39   Endzeit18: 15
Startzeit: 22   34   Endzeit12: 10    40   Endzeit18: 16
Startzeit: 23   35   Endzeit12: 11    41   Endzeit18: 17

Das ist doch das, was in Deiner Tabelle steht, oder?

Dtensta: ich würde gerne mit poti (val5) die startzeit von 0-23:00 auswählen

Haben sich die Anforderungen seit früheren Postings von Dir geändert? Ich meine, ich hätte irgendwo was von Einschaltzeit zwischen 0:00 und 15:00 Uhr gelesen, und nun ist es 0:00 bis 23:00 Uhr. Anyway, das ändert ja nichts an der generellen Schalt- bzw. Programmlogik.

Dann mal ein Schaltbeispiel mit eingestellter Startzeit 14:00 Uhr und 12-Stunden-Mode: - ASamstag 14:00 EIN - Sonntag 01:59:59 AUS - Sonntag 14:00 EIN - Montag 01:59:59 AUS - Montag 14:00 EIN -Dienstag 01:59:59 AUS - Dienstag 14:00 EIN

So richrig für 14 Uhr Einschaltzeit und 12-Stunden-Mode?

ahhh genuso hab ich mir des vorgestell,

agmue thx, exakt so habe ich es ja oben im Anhang geposted

genau jurs, habe mittels der map funktion die 0-23 realisieren können, deswegen würde ich auch gerne von 0-23 als Startzeit definieren.

, und wie kann ich val5 einbauen, dass ich das poti verwenden kann??

bool oneshot = true;

void setup() {
  Serial.begin(9600);
  Serial.println("Programmstart");
}

void loop()
{
  if (oneshot)
  {
    oneshot = false;
    byte Startzeit, Endzeit;
    for (Startzeit = 0; Startzeit < 24; Startzeit++)
    {
      Serial.print("Startzeit: ");
      Serial.print(Startzeit);
      Endzeit = (Startzeit + 12);
      Serial.print("\t");
      Serial.print(Endzeit);
      Endzeit = (Startzeit + 12) % 24;
      Serial.print("\tEndzeit12: ");
      Serial.print(Endzeit);
      Endzeit = (Startzeit + 18);
      Serial.print("\t");
      Serial.print(Endzeit);
      Endzeit = (Startzeit + 18) % 24;
      Serial.print("\tEndzeit18: ");
      Serial.print(Endzeit);
      Serial.println();
    }
  }
}

wp muss ich val5 für 0-23 & val2 für 18/12 mit rein schreiben?

könnte man auch noch die Lüfter Zeiten als kurze Code Abschnitte erstellen?, da der Lüfter auch ab und zu an sein soll, wie im obersten Anhang.

mfg
Dennis

& vielen vielen Dank, war mit meinem Latein am ende