Brauche Hilfe für Rtc gesteuerte Relayschaltung.

Hallo ich wollte mir eine Zeitschaltung mit einer Rtc 3231 einem Relay und einem Arduino due board bauen.
Die Zeit und das Datum werden über ein Lcd Display ausgegeben was auch funktioniert auch der scetch kompiliert ohne Fehler nur das besagte Relay will nicht schalten.

Ich bin nicht sehr erfahren im Programmieren und brauche dringend Hilfe.

#include <Time.h>
#include <TimeLib.h>

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

#define RELAY_ON 0   
#define RELAY_OFF 1

#define Relay_1  22 

LiquidCrystal_I2C lcd(0x3f,20,4);

#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}

void setup() {
  Wire.begin();
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  lcd.home();

pinMode(Relay_1, OUTPUT);  // Relay 1

}

void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{

  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());


}

void loop() {
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);

  lcd.setCursor(0, 3);
  if(hour < 10){ // wenn kleiner 10 schreibe eine 0 davor
  lcd.print("0");} 
  lcd.print(hour);
  lcd.setCursor(2, 3);
  lcd.print(":");
  lcd.setCursor(3, 3);
  if(minute < 10){ // wenn kleiner 10 schreibe eine 0 davor
  lcd.print("0");} 
  lcd.print(minute);
  lcd.setCursor(5, 3);
  lcd.print(":");
  lcd.setCursor(6, 3);
  if(second < 10){ // wenn kleiner 10 schreibe eine 0 davor
  lcd.print("0");} 
  lcd.print(second);
  lcd.setCursor(8, 3);
  lcd.print("Uhr");

  lcd.setCursor(12, 3);
  if(dayOfMonth < 10){ // wenn kleiner 10 schreibe eine 0 davor
  lcd.print("0");} 
  lcd.print(dayOfMonth);
  lcd.setCursor(14, 3);
  lcd.print("/");
  lcd.setCursor(15, 3);
  if(month < 10){ // wenn kleiner 10 schreibe eine 0 davor
  lcd.print("0");} 
  lcd.print(month);
  lcd.setCursor(17, 3);
  lcd.print("/");
  lcd.setCursor(18, 3);
  lcd.print(year);

  Relais1();

}
void Relais1() {    

  if( second() == 30)
  {
    digitalWrite(Relay_1, RELAY_ON);
  }
  if( second() == 0)
 {
  digitalWrite(Relay_1, RELAY_OFF ); 
}
}

Du musst auch den Relais-Pin als Ausgang definieren.

pinMode(Relay_1, OUTPUT);

Ok ja stimmt das hab ich vergessen der code ist eigendlich noch größer ich hatte ihn gekürzt weil er zu lang war und das dabei übersehen aber auch mit pinMode(Relay_1, OUTPUT); funktioniert es nicht.

Die Methode second() gibt es nicht.

Zeige lieber den kompletten Sketch.

Gruß Tommy

flippomatik:
Ok ja stimmt das hab ich vergessen der code ist eigendlich noch größer ich hatte ihn gekürzt weil er zu lang war und das dabei übersehen aber auch mit pinMode(Relay_1, OUTPUT); funktioniert es nicht.

Ja, wie sollen wir dann einen Fehler finden, wenn du uns die Hauptsache verheimlichst.

flippomatik:
Ok, hier ist der ganze code

Da steigt ja keiner durch.

Räum da mal auf, die ganzen auskommentierten Zeilen rausschmeißen, damit das lesbarer wird.

Und warum 2 x wire.h ?
Und Time.h und Timelib.h ?

Und wieso den Arduino DUE?

Wie Tommy schon schrieb: Die Methode "second()" gibt es nicht.
Evtl. funktioniert es einfach nur mit "second" bzw. "Minute" usw.

Der Sketch sollte wenigstens kompilierfähig sein, bevor Du ihn ins Forum stellst. second() gibt es immer noch nicht.
Evtl. solltest Du Deine Zeiten etwas vereinfachen und überlegen mit Structs und Arrays zu arbeiten.

Gruß Tommy

Hab es jetzt schon alleine hin bekommen trotzdem danke für eure hilfe.

flippomatik:
Hab es jetzt schon alleine hin bekommen trotzdem danke für eure hilfe.

Dann wäre es doch super, wenn du die Lösung präsentierst.

Das hilft allen Lesern und ist Sin des Forums.

Also second erst mal ohne () und dann noch

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,&year);

bei void Relais1() eingesetzt

Hier der Sketch (Wird dann auch noch mal überarbeitet und gepostet)

Growbot_Bew_sserung.ino (16.3 KB)

flippomatik:
Also second erst mal ohne ()....

Ok, prima. Dann konnten wir dir doch "ein wenig" helfen.

Danke für die Rückmeldung.