Zeitschaltuhr mit Relaissteuerung (HILFE!)

Guten Servus,

Ich möchte über meinen Arduino UNO R3 eine selbstgebaute (funktionierende) Relaisplatine zu verschiedenen Uhrzeiten (mit DS3231 Real Time Clock) ansteuern.

Da ich noch ein blutiger Anfänger bin habe ich viel mit copy und paste “gearbeitet” und mich vor allem an diesen 2 Videos orientiert um mein Projekt zu verwirklichen:

Video 1= RTC/Real time clock erstellen : Arduino DS3231 Real Time Clock and LCD Display - YouTube
Video 2= Relais über RTC ansteuern: Arduino Turn on / off anything at a specific time (Trigger a Relay with DS3231 RTC) - YouTube

Nun war ich erfolgreich mit meiner selbstgebauten Platine und diesem Sketch von Video 2

#include <DS3231.h> // Den Link zu dieser Library gibt es im Video 1!!!

int Relay = 4;

DS3231 rtc(SDA, SCL);
Time t;

const int OnHour = 16;
const int OnMin = 50;
const int OffHour = 17;
const int OffMin = 0;

void setup() {
Serial.begin(115200);
rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
}

void loop() {
t = rtc.getTime();
Serial.print(t.hour);
Serial.print(" hour(s), “);
Serial.print(t.min);
Serial.print(” minute(s)");
Serial.println(" ");

if(t.hour == OnHour && t.min == OnMin){
digitalWrite(Relay,HIGH);
Serial.println(“LIGHT ON”);
}

else if(t.hour == OffHour && t.min == OffMin){
digitalWrite(Relay,LOW);
Serial.println(“LIGHT OFF”);
}
}

Nun möchte ich aber zu verschieden Uhrzeiten mein Relais angesteuert haben

Bsp.:
Licht an 12 Uhr
Licht aus 13 Uhr
Licht an 15 Uhr
Licht aus 16 Uhr

Ich habe es also so in den Sketch von Video 2 eingegeben:

#include <DS3231.h>

int Relay = 4;

DS3231 rtc(SDA, SCL);
Time t;

const int OnHour = 12;
const int OnMin = 0;
const int OffHour = 13;
const int OffMin = 0;

const int OnHour = 15;
const int OnMin = 0;
const int OffHour = 16;
const int OffMin = 0;

void setup() {
Serial.begin(115200);
rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
}

void loop() {
t = rtc.getTime();
Serial.print(t.hour);
Serial.print(" hour(s), “);
Serial.print(t.min);
Serial.print(” minute(s)");
Serial.println(" ");

if(t.hour == OnHour && t.min == OnMin){
digitalWrite(Relay,HIGH);
Serial.println(“LIGHT ON”);
}

else if(t.hour == OffHour && t.min == OffMin){
digitalWrite(Relay,LOW);
Serial.println(“LIGHT OFF”);
}
}

Nun bekomme ich disesn Fehler

“exit status 1
redefinition of ‘const int OnHour’”

Der Sketch funktioniert aufgrund des neu hinzugefügten "Blocks"
nicht mehr…

const int OnHour = 12;
const int OnMin = 0;
const int OffHour = 13;
const int OffMin = 0;

const int OnHour = 15;
const int OnMin = 0;
const int OffHour = 16;
const int OffMin = 0;

Wo liegt nun der Fehler, nochmals der Hinweis ich bin Anfänger und kann somit nicht alles Wissen!

Ich bedanke mich für eure Aufmerksamkeit :slight_smile:

Der Fehler ist schon in der Beschreibung recht eindeutig, Du definierst einige Variablen neu. z.B. "OnHour" -->wurde schon einmal definiert, noch einmal geht nicht. Du kannst höchstens mit OnHour=15 einen neuen Wert zuweisen, allerdings geht dann der alte Wert verloren, weil er überschrieben wird...und das liegt auch nicht in Deinem Sinn. Du musst den Variablen einfach neue Namen geben, die sich unterscheiden... OnHourA und OnHourB zum Beispiel. In der loop() musst Du dann auch entsprechend abfragen. Nebenbei: Du hast ja eine serielle Ausgabe mit einprogrammiert, hast Du Dir die Ausgaben schon mal auf der seriellen Konsole angeschaut?

DerLehmi: Der Fehler ist schon in der Beschreibung recht eindeutig, Du definierst einige Variablen neu. z.B. "OnHour" -->wurde schon einmal definiert, noch einmal geht nicht. Du kannst höchstens mit OnHour=15 einen neuen Wert zuweisen, allerdings geht dann der alte Wert verloren, weil er überschrieben wird...und das liegt auch nicht in Deinem Sinn. Du musst den Variablen einfach neue Namen geben, die sich unterscheiden... OnHourA und OnHourB zum Beispiel. In der loop() musst Du dann auch entsprechend abfragen. Nebenbei: Du hast ja eine serielle Ausgabe mit einprogrammiert, hast Du Dir die Ausgaben schon mal auf der seriellen Konsole angeschaut?

Danke für diesen Hinweis ich probiere es gleich mal, ja ich habe sie mir auf der seriellen Konsole angeschaut... sie sind nicht so wie im Video 2 es Laufen seltsame Satzeichen von links nach rechts durch, die Fuktion ist allerding gegeben

Die jursRTCtimeEasy sollte so ungefähr machen, was Du willst:

swTime_t switchTimes[] = { // define ON times
  {500, 530},
  {830, 900},
  {1200, 1230},
  {1530, 1600},
  {1945, 1950},
  {2230, 2300},
};

bosskouby: ... ich bin Anfänger und kann somit nicht alles Wissen!

Je mehr Du weißt, desto mehr weißt Du, was Du nicht weißt!

es Laufen seltsame Satzeichen von links nach rechts durch

-->Dann stell mal in der Konsole die Baudrate ein, welche Du auch im Programm vorgibst ;)

DerLehmi:
–>Dann stell mal in der Konsole die Baudrate ein, welche Du auch im Programm vorgibst :wink:

Danke Danke DANKE! es funktioniert nun so wie ich es wollte :slight_smile:
Nun zum Monitor…
Die Baudrate wäre doch jetzt in meinem Bsp.: Serial.begin(115200); oder ist delay damit gemeint ich kann dir noch nicht ganz folgen

Ja das ist die Baudrate die du in der Konsole einstellen musst.

Scherheinz: Ja das ist die Baudrate die du in der Konsole einstellen musst.

Welchen Wert gibt man da nun ein?

Welchen Wert gibt man da nun ein?

-->Hast es doch schon geschrieben, 115200

DerLehmi: -->Hast es doch schon geschrieben, 115200

Schon nur zeigt der Monitor immer noch seltsame Zeichen an...

bosskouby: Schon nur zeigt der Monitor immer noch seltsame Zeichen an...

Dann zeig uns doch mal ein Foto, wie der Bildschirm aussieht. So müssen wir immer nur raten.

Im Programm gibst du vor, mit welcher Baudrate du deine Serielle Verbindung betreiben möchtest.

Im Seriellen Monitor ist unten rechts ein Dropdown-Menü in dem du verschiedene Baudraten auswählen kannst. Nur wenn beides übereinstimmt, klappt auch die Kommunikation.

Ich glaube als Auswahlkriterium gilt, je länger das Verbindungskabel, desto geringer sollte die Baudrate sein (?)

schUk0: Ich glaube als Auswahlkriterium gilt, je länger das Verbindungskabel, desto geringer sollte die Baudrate sein (?)

Das kann ich bestätigen :)