RTC Big Problem

Hello everybody.

I have aruino Mega 2560 and DS1302 RTC Module. Maybe that will be too easy questins for you But I will lose my mind soon :slight_smile:

Maybe I tried all labriry or exaples but when Arduino connect to my laptop or 30 mınutes after disconnect my laptop then I connect again time start again 30 min before or time zero.

I am sorry for my bad english. But I need help to much Bcs I am using this for my aquarium light.

I need cable connection and program code. Thanks for helps

Post the code that you are using.

G

ErcanTR:
Maybe I tried all labriry or exaples but when Arduino connect to my laptop or 30 mınutes after disconnect my laptop then I connect again time start again 30 min before or time zero.

Two things can be causing this.

1 - the battery in the RTC is flat

2 - the sketch that you have written always resets the RTC when it starts up.

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

Have you tried changing the battery?

G

I didnt but I saw 3,2 Volt with multimeter

goto?
Why?

Please remember to use code tags when posting code.

You should use pinMode() before a corresponding digitalWrite()

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

Your code will fail to power the module correctly.