Pages: [1]   Go Down
Author Topic: Zeitschaltuhr Problem  (Read 591 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich habe aus dem Forum ein Sketch gefunden und etwas angepasst.
Ich will damit eine Relaiskarte benutzen um eine Lampe einzuschalten.
Hier der Sketch:
Code:
#include <Wire.h>
#include <DS1307new.h>

int light = 6;

int lighthour = 8;
int lightminute = 00;
int lightsecond = 0;

long lighttime = 43200;

long timenow = 0;

void setup()
{
  pinMode(light, OUTPUT);
digitalWrite(light, HIGH);
}

void loop()
{
  RTC.getTime();
  // Start Lampen
  if (int(RTC.hour) == lighthour && int(RTC.minute) == lightminute && int(RTC.second) == lightsecond)
  {
    digitalWrite(light, LOW);
    timenow = RTC.time2000;
  }
 
  // Stop Lampen
  if (RTC.time2000 - timenow == lighttime)
  {
    digitalWrite(light, HIGH);
  }

  delay(500);
}

Es funktioniert so weit ganz gut, aber wenn ich wärend der Beleuchtungszeit den Arduino UNO resetten muss, bleibt die Lampe aus.
Könnte mir eventuell jemand behilflich sein um den Fehler zu finden?

Gruß Denis
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 138
Posts: 2895
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es funktioniert so weit ganz gut, aber wenn ich wärend der Beleuchtungszeit den Arduino UNO resetten muss, bleibt die Lampe aus.
Könnte mir eventuell jemand behilflich sein um den Fehler zu finden?

Schaltung einmal am Tag ein und einmal am Tag aus?

Dann einfach je eine long Variable mit der Ein- und Ausschaltzeit bilden, nach dem Schema Hours*3600+Minutes*60

Und dann nach der Logik
  AktuelleZeit=RTC.hour*3600L+RTC.minute*60;
  if (AktuelleZeit > Einschaltzeit && AktuelleZeit < Ausschaltzeit)
    digitalWrite(light, LOW);
  else
    digitalWrite(light, HIGH);

Hängt am "light" Pin bei Dir ein Relais?
Gibt es da beim Anstöpseln des Stroms bzw. beim Reset nicht das Problem, dass das Relais einmal ganz kurz klackt und schaltet?
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 359
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Warum musst du während der Laufzeit resetten?
Bist du sicher, das die Uhr (DS11307) dann noch läuft.
Ich kann dir nur einen Tipp aus eigener Erfahrung geben:NIE WIEDER Relais oder Relaiskarten.
Ich hab hier schon mehrfach geschrieben, das ich (und auch andere) immer wieder Probleme mit
Relais und dem Arduino hatte.
Ich habe bei mir mehrere Arduinos im Haus am Laufen, diese schalten Licht, Heizungspumpen, Wasserpumpen und
Magnetventile.
Hatte immer wieder Abstürze der Uhrmodule oder der LCD-Anzeigen.
Seit ich alles auf SSR umgebaut habe läuft alles einfach toll und problemlos, vorher hatte ich nur Probleme.
Gruß
Logged

Berlin
Offline Offline
Jr. Member
**
Karma: 2
Posts: 69
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

ich hole den Therad mal wieder raus, weil ich gerade an dem gleichen Thema sitze. Ich habe 12 Relais zu schalten.

Meine Einschaltzeiten sind in den Arrys Anminuten und Anstunden im EEPROM gespeichert. Beim Start des Artuino wird der EEPROM ausgelesen und in die o.g. Variablen geschrieben.

Bislang habe ich folgende Funktion dazu gebaut.
Code:
  void Alarmpruefen ()
  {
    time_t AktuelleUhrzeit = now();                        // Uhrzeit auslesen
    AktuelleStunde = hour(AktuelleUhrzeit);                // Stunde davon ermitteln
    AktuelleMinute = minute(AktuelleUhrzeit);              // Minute ermitttteln
   
    if(Anstunde[2] == AktuelleStunde && Anminute[2] == AktuelleMinute)
      {digitalWrite(TagLicht1Pin,LOW);}
    if (Ausstunde[2] == AktuelleStunde && Ausminute[2] == AktuelleMinute)
      {digitalWrite(TagLicht1Pin,HIGH);} 
  }

Der funktioniert soweit ganz gut. Ich bin mir nur nicht sicher ob ich eine Bedingung vergessen habe und ob es wirklich der beste Weg ist.
Die Uhr soll einmal am Tag anschalten und einmal aus. Das Uhrsignal kommt vom RTC 1307.

Gegen die Time.Alarms habe ich mich entschieden, da es zu seltsamen Erscheinungen mit dem Alarm.delay gab. Es hat meinen sonstigen Programm Ablauf (Displaymenü mit Möglichkeiten zu Settings und Save Settings je Kanal) gestört.

Bitte gebt mir einen Tipp wie ich es richtig mache. Wenn ich das beispiel oben anwenden wollen würde, dann müsste ich auch eine Alarmzeiten in eine long-Variable umwandeln oder?
Logged

Pages: [1]   Go Up
Jump to: