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 );
}
}