// Kütüphaleri ekliyoruz
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <DS1302RTC.h>
#include <TimeAlarms.h>
int redled = 6; // Kırmızı led grubu adresleme
int blueled = 9; // Mavi led grubu adresleme
int whiteled = 10; // Beyaz led grubu adresleme
int uvled = 11; // UV led grubu adresleme
float brightness = 0; // Genel Aydınlık şiddeti
float brightnesswhite = 0; // Beyaz Aydınlık şiddeti
float fadeAmount = 0.05; // Genel Aydınlık şiddeti kat sayısı 0,15
float fadeAmountwhite = 0.15; // Beyaz Aydınlık şiddeti kat sayısı 0,25
//RTC Modül için bağlatı pinleri belirliyoruz.
DS1302RTC RTC(45, 47, 49); // Modül Pin: RST, DAT,CLK
//RTC Modül güç bağlantı pinlerini tanımlıyoruz.
#define DS1302_GND_PIN 51
#define DS1302_VCC_PIN 53
//LCD Modül bağlantı pinlerini tanımlıyoruz.
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
void setup(){
Alarm.alarmRepeat(6,32,0, MorningAlarm); // Sabah led uyanma başlangıcı
Alarm.alarmRepeat(15,11,0,EveningAlarm1); // Akşam led uyuma başlangıcı 1
Alarm.alarmRepeat(22,11,0,EveningAlarm2); // Akşam led uyuma başlangıcı 2
pinMode(redled,OUTPUT); // Çıkış pin tanımlama
pinMode(blueled,OUTPUT); // Çıkış pin tanımlama
pinMode(whiteled,OUTPUT); // Çıkış pin tanımlama
pinMode(uvled,OUTPUT); // Çıkış pin tanımlama
pinMode(7,OUTPUT); // Çıkış pin tanımlama T5 AYDINLATMA
pinMode(12,OUTPUT); // Çıkış pin tanımlama LED FAN
//LCD Modül başlatıyoruz.
lcd.begin(16, 2);
//RTC modül güç pinlerine enerji verip aktif yapıyoruz.
digitalWrite(DS1302_GND_PIN, LOW);
pinMode(DS1302_GND_PIN, OUTPUT);
digitalWrite(DS1302_VCC_PIN, HIGH);
pinMode(DS1302_VCC_PIN, OUTPUT);
lcd.print("Saat Aktif"); //LCD ekrana Saat Aktif yazıdırıyoruz.
delay(500); //500 milisaniye bekle
lcd.clear(); //LCD ekranı temizle
RTC.haltRTC(false); //RTC modül çalıştır
RTC.writeEN(true); //RTC modül yazma aktif et
//Burada ki iki komut sadece ilk kurulum da çalıştırıkıp daha sonra comment yapılıp program tekrar yüklenecek
//setTime(21, 55, 00, 31, 10, 2016);
//RTC.set(now()); //Sistem zamanını RTC modüle yüklüyoruz
//RTC çalışıp çalışmadığını kontrol et
if (RTC.haltRTC())
lcd.print("Saat Durdu!"); //RTC çalışmıyor ise Saat Durdu yazdır
else
lcd.print("Saat Calisiyor."); //RTC çalışıyor ise Saat Çalışıyor yazdır
//RTC yazma aktif kontrol et
lcd.setCursor(0,1);
if (RTC.writeEN())
lcd.print("Yazma Aktif."); //RTC yazma aktif ise Yazma Aktif yazdır
else
lcd.print("Yazma Kapalı."); //RTC yazma kapalı ise Yazma Kapalı yazdır
delay ( 2000 ); //2 saniye bekle
lcd.clear(); //LCD ekraN temizle
}
void loop(){
Alarm.delay(1000); //Alarm başlatmak için kullanıyoruz.
time_t myTime;
myTime = RTC.get();
setTime(myTime);
static int sday = 0;
// LCD ekrana da zamanı göster
lcd.setCursor(3, 0);
print2digits(hour());
lcd.print(":");
print2digits(minute());
lcd.print(":");
print2digits(second());
if(sday != day()) {
// LCD ekranda gün göster
lcd.setCursor(0, 1);
lcd.print(dayShortStr(weekday()));
// LCD ekran da gün/ay/yıl göster<
lcd.setCursor(5, 1);
lcd.print(" ");
print2digits(day());
lcd.print("/");
print2digits(month());
lcd.print("/");
lcd.print(year());
}
sday = day();
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.write('_');
}
lcd.print(number);
}
void MorningAlarm(){
uyan:
if (brightness > 250)
{
analogWrite(redled,255);
analogWrite(blueled,255);
analogWrite(whiteled,255);
analogWrite(uvled,255);
digitalWrite ( 7 , HIGH );
digitalWrite ( 12 , HIGH );
}
else
{
analogWrite(redled,brightness);
analogWrite(blueled,brightness);
analogWrite(whiteled,brightness);
analogWrite(uvled,brightness);
brightness = brightness + fadeAmount; // Her 500 milisaniyelik döngüde katsayı ile ışık şiddetini arttır
brightnesswhite = brightnesswhite + fadeAmount; // Her 500 milisaniyelik döngüde katsayı ile ışık şiddetini arttır
delay(500);
goto uyan;
}
}
void EveningAlarm1(){
digitalWrite ( 7 , LOW);
uyu1:
if (brightnesswhite < 1)
{
analogWrite(whiteled,0);
analogWrite(redled,0);
}
else
{
analogWrite(whiteled,brightnesswhite);
analogWrite(redled,brightnesswhite);
brightnesswhite = brightnesswhite - fadeAmountwhite; // Her 500 milisaniyelik döngüde katsayı ile beyaz ışık şiddetini azaltır
delay(500);
goto uyu1;
}
}
void EveningAlarm2(){
digitalWrite ( 12 , LOW );
uyu2:
if (brightness < 1)
{
analogWrite(uvled,0);
analogWrite(blueled,0);
}
else
{
analogWrite(uvled,brightness);
analogWrite(blueled,brightness);
brightness = brightness - fadeAmount; // Her 500 milisaniyelik döngüde katsayı ile tüm ışık şiddetini azaltır
delay(500);
goto uyu2;
}
}