Go Down

Topic: Zeitschaltuhr mit Relaissteuerung (HILFE!) (Read 263 times) previous topic - next topic

bosskouby

Oct 12, 2017, 05:47 pm Last Edit: Oct 12, 2017, 06:00 pm by bosskouby
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 :  https://www.youtube.com/watch?v=BM3A7w3bhqM&t=355s
Video 2= Relais über RTC ansteuern: https://www.youtube.com/watch?v=BOlJ70sx54U

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 :)

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?

bosskouby

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
 

agmue

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

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


... 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!

DerLehmi

Quote
es Laufen seltsame Satzeichen von links nach rechts durch
-->Dann stell mal in der Konsole die Baudrate ein, welche Du auch im Programm vorgibst ;)

bosskouby

-->Dann stell mal in der Konsole die Baudrate ein, welche Du auch im Programm vorgibst ;)
Danke Danke DANKE! es funktioniert nun so wie ich es wollte :)
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

Scherheinz

Ja das ist die Baudrate die du in der Konsole einstellen musst.
Hier könnte ihre Werbung stehen

bosskouby

Ja das ist die Baudrate die du in der Konsole einstellen musst.
Welchen Wert gibt man da nun ein?

DerLehmi

Quote
Welchen Wert gibt man da nun ein?
-->Hast es doch schon geschrieben, 115200

bosskouby

-->Hast es doch schon geschrieben, 115200
Schon nur zeigt der Monitor immer noch seltsame Zeichen an...

HotSystems

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.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

schUk0

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 (?)

agmue

Ich glaube als Auswahlkriterium gilt, je länger das Verbindungskabel, desto geringer sollte die Baudrate sein (?)
Das kann ich bestätigen :)

Go Up