#include <Time.h>
#include <TimeLib.h>
#include "Wire.h"
int Lampe1 = 11; // Lampen Pin auf 11 setzen Licht
int Lampe2 = 12; // Lampen Pin auf 12 setzen Licht2
int Mond = 13; // Lampen Pin auf 13 setzen Mondlicht
int loga[64] =
{0,1,1,2,2,3,3,4,4,5,6,7,8,9,10,11,12,13,14,
16,17,19,21,23,25,27,29,32,
35,38,41,44,47,50,55,60,65,70,75,80,85,
90,95,100,105,110,115,120,125,130,135,
130,140,150,160,170,180,190,200,210,220,230,240,255};
#define DS1307_I2C_ADDRESS 0x68 // I2C Adresse
char buffer[20] = "";
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
//Zeit und Datum aus DS1307 auslesen und konvertieren
void getDateDs1307(int date[])
{
Wire.beginTransmission(DS1307_I2C_ADDRESS); // I2C-Kommunikation im Schreibmodus starten
Wire.write(0x00); // Registerzeiger auf 0 setzen
Wire.endTransmission(); // I2C-Kommunikation beenden
Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // I2C-Kommunikation im Lesemodus starten
date[ 0 ] = bcdToDec(Wire.read() & 0x7f); // Sekunden
date[ 1 ] = bcdToDec(Wire.read()); // Minuten
date[ 2 ] = bcdToDec(Wire.read() & 0x3f); // Stunden
date[ 3 ] = bcdToDec(Wire.read()); // Wochentag
date[ 4 ] = bcdToDec(Wire.read()); // Tag
date[ 5 ] = bcdToDec(Wire.read()); // Monat
date[ 6 ] = bcdToDec(Wire.read()); // Jahr
}
/****************************************************************************************************
*/
void setup() {
Wire.begin(); // I2C-Bus einrichten
pinMode(Lampe1, OUTPUT);
pinMode(Lampe2, OUTPUT);
pinMode(Mond, OUTPUT);
Serial.begin (9600);
}
/****************************************************************************************************
*/
void loop() {
Serial.begin (9600);
int licht1 ;
int licht2 ;
int licht3 ;
int date[ 7 ];
char str[30];
getDateDs1307( date ); // Datum und Uhrzeit aus DS1307 holen
#define STUNDE date[2]
#define MINUTE date[1]
int maxlicht = 255 ;
long dimmsekunde = MINUTE*60;
int gesamtdimmsekunden = 1800; // Zeitliche Spanne des rauf und runter dimmens 1800sekunden sind 30 Minuten
int dimmrauf = maxlicht * dimmsekunde / gesamtdimmsekunden ;
int dimmrunter = maxlicht - (maxlicht * dimmsekunde / gesamtdimmsekunden);
if( STUNDE <= 5 && MINUTE < 45 ) { // von Mitternacht bis 5:45 Uhr (5:44:59)
licht1 = 0; // ist Lampe1 aus
}
if( STUNDE <= 5 && MINUTE < 55 ) { // von Mitternacht bis 5:45 Uhr (5:54:59)
licht2 = 0; // ist Lampe1 aus
}
if (STUNDE >= 5 && MINUTE >= 45 ) { // ab 5:45 Uhr
licht1 = dimmrauf ; // Lampe1 hochdimmen!
}
if( STUNDE >= 5 && MINUTE >= 55 ) { // ab 5:55 Uhr
licht2 = dimmrauf ; // Lampe2 hochdimmen!
}
if( STUNDE >= 6 && MINUTE >= 15 ) { // ab 6:15 Uhr
licht1 = maxlicht ; // ist Lampe1 an
}
if( STUNDE >= 6 && MINUTE >= 25){ // ab 6:25 Uhr
licht2 = maxlicht ; // ist Lampe2 an
}
if( STUNDE >= 10 && MINUTE >= 30 ) { // ab 10:30 Uhr
licht1 = dimmrunter , -50 ; // wird Lampe1 runter gedimmt
}
if( STUNDE >= 10 && MINUTE >= 40 ) { // ab 10:40 Uhr
licht2 = dimmrunter , -50 ; // wird Lampe2 runter gedimmt
}
if( STUNDE >= 11 ) { // ab 11 Uhr
licht1 = 50; // ist Lampe1 auf Dimmstufe 50
}
if( STUNDE >= 11 && MINUTE >= 10 ) { // ab 11:10 Uhr
licht2 = 50; // ist Lampe2 auf Dimmstufe 50
}
if( STUNDE >= 14 ) { // ab 14 Uhr
licht1 = dimmrauf ; // wird Lampe1 hoch gedimmt
}
if( STUNDE >= 14 && MINUTE >= 10) { // ab 14:10 Uhr
licht2 = dimmrauf ; // wird Lampe2 hoch gedimmt
}
if ( STUNDE >= 14 && MINUTE >= 30 ){ // ab 14:30
licht1 = maxlicht ; // ist Lampe1 an
}
if ( STUNDE >= 14 && MINUTE >= 40 ){ // ab 14:40
licht2 = maxlicht ; // ist Lampe2 an
}
if( STUNDE >= 21 && MINUTE >= 35 ) { // ab 21:35 Uhr
licht1 = dimmrunter; // wird Lampe1 runter gedimmt
}
if( STUNDE >= 21 && MINUTE >= 45 ) { // ab 21:45 Uhr
licht2 = dimmrunter; // wird Lampe2 runter gedimmt
}
// wird das Licht abgedreht
if ( STUNDE >= 22 && MINUTE >= 5 ) { // ab 22:05 Uhr
licht1 = 0; // ist Lampe1 aus
}
if ( STUNDE >= 22 && MINUTE >= 15 ) { // ab 22:15 Uhr
licht2 = 0; // ist Lampe2 aus
}
if ( STUNDE >= 22 || STUNDE <=5 ) { // ab 22 Uhr bis 5:59:59 Uhr
licht3 = dimmrauf ,-150; // ist Mondlicht auf Dimmstufe 150
}
analogWrite (Lampe1 , licht1 ); // jetzt noch schnell die Lampe tatsächlich anhand der
analogWrite (Lampe2 , licht2); // vorher bestimmten Werte einstellen
analogWrite (Mond , licht3);
}