RTC üzerinde ayları sabit değere çekme

#include <EEPROM.h> ile projeye dahil edip şöyle bir şey yapılabilir. Butona basıldığında bunlar olacak kısaca 0. adrese 1 sonraki yılı ve 1. adrese ayı girdik.
Kod:
EEPROM.write(0, Saat.year + 1);
EEPROM.write(1, Saat.month);
Daha sonrasında okumak ve karşılaştırmak için:
Kod:
int alarmYear = EEPROM.read(0);
int alarmMonth = EEPROM.read(1);

if(Saat.year == alarmYear && Saat.month == alarmMonth) {
// ALARM
}
Mantık olarak çalışması lazım. EEPROM'ların yazma ömrünün olduğunu da unutmayalım. Belki daha iyi bir yol vardır 🤷🏿‍♂️
ay atlayınca saat month 6 olmuş çıktıda


[CODE title="serial ekranı çıktısı"]
23:59:57 31/5/2022 PERSEMBE
1 yıl alarm kuruldu EEPROM KISMIIIII
Saat.year = 2022
Saat.month = 5


23:59:59 31/5/2022 PERSEMBE
5
0:0:0 1/6/2022 CUMA
1 yıl alarm kurulduEEPROM KISMIIIII
Saat.year = 2022
Saat.month = 6
[/CODE]
 
Saat.moth'un artması normal alarm tarihini artık EEPROM.read(1) ile alacaksın.

pardon hocam alarm kısmını yazdırmayı unutmuşum serial ekrana 0 olark atanmışlar


Kod:
23:59:57 31/5/2022 PERSEMBE
 5
23:59:58 31/5/2022 PERSEMBE
1 yıl alarm kurulduEEPROM KISMIIIII
Saat.year = 2022
Saat.month = 5alrm KISMIIIII
alarmYear = 0
alarmMonth = 0
2023
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
23:59:59 31/5/2022 PERSEMBE
 5
0:0:0 1/6/2022 CUMA
1 yıl alarm kurulduEEPROM KISMIIIII
Saat.year = 2022
Saat.month = 6alrm KISMIIIII
alarmYear = 0
alarmMonth = 0
2023
 
pardon hocam alarm kısmını yazdırmayı unutmuşum serial ekrana 0 olark atanmışlar


Kod:
23:59:57 31/5/2022 PERSEMBE
 5
23:59:58 31/5/2022 PERSEMBE
1 yıl alarm kurulduEEPROM KISMIIIII
Saat.year = 2022
Saat.month = 5alrm KISMIIIII
alarmYear = 0
alarmMonth = 0
2023
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
23:59:59 31/5/2022 PERSEMBE
 5
0:0:0 1/6/2022 CUMA
1 yıl alarm kurulduEEPROM KISMIIIII
Saat.year = 2022
Saat.month = 6alrm KISMIIIII
alarmYear = 0
alarmMonth = 0
2023
hocam bluetooth kısmını ayarlayıp bakayıp butona basıldığındaki
alarmYear = 0 (butona basılmamış değerler)
alarmMonth = 0 değerlere
 
Write kısmının önce çalışması lazım
tmm hocam şu bluetooth bağlantılarını gerçekleştirip testleri gerçekleştiriyim en yakın zamanda dönücem.
Write kısmının önce çalışması lazım
hocam anlaşılabilir sade olması için yeni proje açıp eeprom ekledim .
alarm kısmı hala 0 durumda ?
bluetooth kısmında sıkıntı yaşadığım için şimdilik buton kısmını proje içinde deger ==1 ise for ile 1 kez çalıştır dedim o şekilde şuan buton yerine kullanıyorum.


[CODE title="rtc"]
#include <EEPROM.h>

#include <virtuabotixRTC.h>
virtuabotixRTC Saat(D6, D7, D8); //CLK -> 6, Data -> 7, RST -> 8
String gunler[] = {"PAZARTESI", "SALI", "CARSAMBA", "PERSEMBE", "CUMA", "CUMARTESI", "PAZAR"};


void setup() {
Serial.begin(9600);

// RTC üzerindeki tarih ve saati aşağıdaki kod ile ayarlayabilirsiniz.
// saniye, dakika, saat, haftanın günü, ayın günü, ay, yıl

Saat.setDS1302Time(24, 59, 23,4, 31, 05, 2022);

// 19.01.2021 11:40:50 2(Salı günü anlamına geliyor).
// Haftanın günü Pazartesi=>1 .... Pazar=>7 yazıyoruz


}
void loop() {
Saat.updateTime(); //Bu kod ile RTC deki anlık zamanı alıyoruz.
Serial.print(Saat.hours); //Saat
Serial.print(":");
Serial.print(Saat.minutes); //Dakika
Serial.print(":");
Serial.print(Saat.seconds); //Saniye
Serial.print(" ");
Serial.print(Saat.dayofmonth); //Gün
Serial.print("/");
Serial.print(Saat.month); //Ay
Serial.print("/");
Serial.print(Saat.year); //Yıl
Serial.print(" ");
Serial.println(gunler[Saat.dayofweek - 1]); //Hangi güne denk geldiğini bularak yazdırıyoruz.
delay(1000); // 1 saniye bekletiyoruz.



int deger =1;
if(deger==1)
{
for(int i=0;i<1;i++) // for dögüsünü butona 1 kere basıldığı gibi kullandık.
{

EEPROM.write(0, Saat.year + 1);
EEPROM.write(1, Saat.month);

Serial.println("");
Serial.println("EEPROM KISMIIIII ");
Serial.print("Saat.year = "); //Saat
Serial.println(Saat.year);
Serial.print("Saat.month = "); //Dakika
Serial.println(Saat.month);



}

int alarmYear = EEPROM.read(0);
int alarmMonth = EEPROM.read(1);

Serial.println("");
Serial.println("alrm KISMIIIII ");
Serial.print("alarmYear = "); //Saat
Serial.println(alarmYear);
Serial.print("alarmMonth = "); //Dakika
Serial.println(alarmMonth);
Serial.println("");




if(Saat.year == alarmYear && Saat.month == alarmMonth)
{
// ALARM
Serial.println("");
Serial.print("ALARMMMMMMMMMMMMMMMMMMMMMMMMMMMMM "); //Saat

}

}

}
[/CODE]

serial ekran çıktı.PNG

tmm hocam şu bluetooth bağlantılarını gerçekleştirip testleri gerçekleştiriyim en yakın zamanda dönücem.

hocam anlaşılabilir sade olması için yeni proje açıp eeprom ekledim .
alarm kısmı hala 0 durumda ?
bluetooth kısmında sıkıntı yaşadığım için şimdilik buton kısmını proje içinde deger ==1 ise for ile 1 kez çalıştır dedim o şekilde şuan buton yerine kullanıyorum.


[CODE title="rtc"]

#include <EEPROM.h>

#include <virtuabotixRTC.h>
virtuabotixRTC Saat(D6, D7, D8); //CLK -> 6, Data -> 7, RST -> 8
String gunler[] = {"PAZARTESI", "SALI", "CARSAMBA", "PERSEMBE", "CUMA", "CUMARTESI", "PAZAR"};


void setup() {
Serial.begin(9600);

// RTC üzerindeki tarih ve saati aşağıdaki kod ile ayarlayabilirsiniz.
// saniye, dakika, saat, haftanın günü, ayın günü, ay, yıl

Saat.setDS1302Time(24, 59, 23,4, 31, 05, 2022);

// 19.01.2021 11:40:50 2(Salı günü anlamına geliyor).
// Haftanın günü Pazartesi=>1 .... Pazar=>7 yazıyoruz


}
void loop() {
Saat.updateTime(); //Bu kod ile RTC deki anlık zamanı alıyoruz.
Serial.print(Saat.hours); //Saat
Serial.print(":");
Serial.print(Saat.minutes); //Dakika
Serial.print(":");
Serial.print(Saat.seconds); //Saniye
Serial.print(" ");
Serial.print(Saat.dayofmonth); //Gün
Serial.print("/");
Serial.print(Saat.month); //Ay
Serial.print("/");
Serial.print(Saat.year); //Yıl
Serial.print(" ");
Serial.println(gunler[Saat.dayofweek - 1]); //Hangi güne denk geldiğini bularak yazdırıyoruz.
delay(1000); // 1 saniye bekletiyoruz.



int deger =1;
if(deger==1)
{
for(int i=0;i<1;i++) // for dögüsünü butona 1 kere basıldığı gibi kullandık.
{

EEPROM.write(0, Saat.year + 1);
EEPROM.write(1, Saat.month);

Serial.println("");
Serial.println("EEPROM KISMIIIII ");
Serial.print("Saat.year = "); //Saat
Serial.println(Saat.year);
Serial.print("Saat.month = "); //Dakika
Serial.println(Saat.month);



}
}
int alarmYear = EEPROM.read(0);
int alarmMonth = EEPROM.read(1);

Serial.println("");
Serial.println("alrm KISMIIIII ");
Serial.print("alarmYear = "); //Saat
Serial.println(alarmYear);
Serial.print("alarmMonth = "); //Dakika
Serial.println(alarmMonth);
Serial.println("");




if(Saat.year == alarmYear && Saat.month == alarmMonth)
{
// ALARM
Serial.println("");
Serial.print("ALARMMMMMMMMMMMMMMMMMMMMMMMMMMMMM "); //Saat

}



}

[/CODE]

serial ekran çıktı.PNG

kod kısmını bida güncelledim alarmı butonun dışına aldım.
tmm hocam şu bluetooth bağlantılarını gerçekleştirip testleri gerçekleştiriyim en yakın zamanda dönücem.

hocam anlaşılabilir sade olması için yeni proje açıp eeprom ekledim .
alarm kısmı hala 0 durumda ?
bluetooth kısmında sıkıntı yaşadığım için şimdilik buton kısmını proje içinde deger ==1 ise for ile 1 kez çalıştır dedim o şekilde şuan buton yerine kullanıyorum.



[CODE title="rtc yeniden düzenleme"]
#include <EEPROM.h>

#include <virtuabotixRTC.h>
virtuabotixRTC Saat(D6, D7, D8); //CLK -> 6, Data -> 7, RST -> 8
String gunler[] = {"PAZARTESI", "SALI", "CARSAMBA", "PERSEMBE", "CUMA", "CUMARTESI", "PAZAR"};


void setup() {
Serial.begin(9600);

// RTC üzerindeki tarih ve saati aşağıdaki kod ile ayarlayabilirsiniz.
// saniye, dakika, saat, haftanın günü, ayın günü, ay, yıl

Saat.setDS1302Time(24, 59, 23,4, 31, 05, 2022);

// 19.01.2021 11:40:50 2(Salı günü anlamına geliyor).
// Haftanın günü Pazartesi=>1 .... Pazar=>7 yazıyoruz


}
void loop() {
Saat.updateTime(); //Bu kod ile RTC deki anlık zamanı alıyoruz.
Serial.print(Saat.hours); //Saat
Serial.print(":");
Serial.print(Saat.minutes); //Dakika
Serial.print(":");
Serial.print(Saat.seconds); //Saniye
Serial.print(" ");
Serial.print(Saat.dayofmonth); //Gün
Serial.print("/");
Serial.print(Saat.month); //Ay
Serial.print("/");
Serial.print(Saat.year); //Yıl
Serial.print(" ");
Serial.println(gunler[Saat.dayofweek - 1]); //Hangi güne denk geldiğini bularak yazdırıyoruz.
delay(1000); // 1 saniye bekletiyoruz.



int deger =1;
if(deger==1)
{
for(int i=0;i<1;i++) // for dögüsünü butona 1 kere basıldığı gibi kullandık.
{

EEPROM.write(0, Saat.year + 1);
EEPROM.write(1, Saat.month);

Serial.println("");
Serial.println("EEPROM KISMIIIII ");
Serial.print("Saat.year = "); //Saat
Serial.println(Saat.year);
Serial.print("Saat.month = "); //Dakika
Serial.println(Saat.month);



}
}
int alarmYear = EEPROM.read(0);
int alarmMonth = EEPROM.read(1);

Serial.println("");
Serial.println("alrm KISMIIIII ");
Serial.print("alarmYear = "); //Saat
Serial.println(alarmYear);
Serial.print("alarmMonth = "); //Dakika
Serial.println(alarmMonth);
Serial.println("");




if(Saat.year == alarmYear && Saat.month == alarmMonth)
{
// ALARM
Serial.println("");
Serial.print("ALARMMMMMMMMMMMMMMMMMMMMMMMMMMMMM "); //Saat

}



}
[/CODE]
 
Son düzenleme:
Kod:
#include <EEPROM.h>

#include <virtuabotixRTC.h>
virtuabotixRTC Saat(D6, D7, D8); //CLK -> 6, Data -> 7, RST -> 8
String gunler[] = {"PAZARTESI", "SALI", "CARSAMBA", "PERSEMBE", "CUMA", "CUMARTESI", "PAZAR"};


void setup() {
  Serial.begin(9600);
 
  // RTC üzerindeki tarih ve saati aşağıdaki kod ile ayarlayabilirsiniz.
  // saniye, dakika, saat, haftanın günü, ayın günü, ay, yıl
 
     Saat.setDS1302Time(24, 59, 23,4, 31, 05, 2022);

  //  19.01.2021 11:40:50 2(Salı günü anlamına geliyor).
  // Haftanın günü Pazartesi=>1 .... Pazar=>7 yazıyoruz

 
}
void loop() {
  Saat.updateTime(); //Bu kod ile RTC deki anlık zamanı alıyoruz.
  Serial.print(Saat.hours);  //Saat
  Serial.print(":");
  Serial.print(Saat.minutes);  //Dakika
  Serial.print(":");
  Serial.print(Saat.seconds);  //Saniye
  Serial.print(" ");
  Serial.print(Saat.dayofmonth); //Gün
  Serial.print("/");
  Serial.print(Saat.month);  //Ay
  Serial.print("/");
  Serial.print(Saat.year); //Yıl
  Serial.print(" ");
  Serial.println(gunler[Saat.dayofweek - 1]); //Hangi güne denk geldiğini bularak yazdırıyoruz.
  delay(1000); // 1 saniye bekletiyoruz.



int deger =1;
if(deger==1)
{
  for(int i=0;i<1;i++) // for dögüsünü butona 1 kere basıldığı gibi kullandık.
  {
    int address = 0;
    EEPROM.put(address, Saat.year + 1);
    address += sizeof(int);
    EEPROM.put(address, Saat.month);
    
  Serial.println("");
  Serial.println("EEPROM KISMIIIII ");
  Serial.print("Saat.year = ");  //Saat
  Serial.println(Saat.year);
  Serial.print("Saat.month = ");  //Dakika
  Serial.println(Saat.month);
    
    
    
    }
  int address = 0;
  int alarmYear = EEPROM.get(address);
  address += sizeof(int);
  uint8_t alarmMonth = EEPROM.get(address);

  Serial.println("");
  Serial.println("alrm KISMIIIII ");
  Serial.print("alarmYear = ");  //Saat
  Serial.println(alarmYear);
  Serial.print("alarmMonth = ");  //Dakika
  Serial.println(alarmMonth);
  Serial.println("");


 

    if(Saat.year == alarmYear && Saat.month == alarmMonth)
     {
    // ALARM
     Serial.println("");
     Serial.print("ALARMMMMMMMMMMMMMMMMMMMMMMMMMMMMM ");  //Saat

    }
 
  }
 
}
Bunu deneyebilir misin?
 
Write kısmının önce çalışması lazım
deniyim
Kod:
#include <EEPROM.h>

#include <virtuabotixRTC.h>
virtuabotixRTC Saat(D6, D7, D8); //CLK -> 6, Data -> 7, RST -> 8
String gunler[] = {"PAZARTESI", "SALI", "CARSAMBA", "PERSEMBE", "CUMA", "CUMARTESI", "PAZAR"};


void setup() {
  Serial.begin(9600);
 
  // RTC üzerindeki tarih ve saati aşağıdaki kod ile ayarlayabilirsiniz.
  // saniye, dakika, saat, haftanın günü, ayın günü, ay, yıl
 
     Saat.setDS1302Time(24, 59, 23,4, 31, 05, 2022);

  //  19.01.2021 11:40:50 2(Salı günü anlamına geliyor).
  // Haftanın günü Pazartesi=>1 .... Pazar=>7 yazıyoruz

 
}
void loop() {
  Saat.updateTime(); //Bu kod ile RTC deki anlık zamanı alıyoruz.
  Serial.print(Saat.hours);  //Saat
  Serial.print(":");
  Serial.print(Saat.minutes);  //Dakika
  Serial.print(":");
  Serial.print(Saat.seconds);  //Saniye
  Serial.print(" ");
  Serial.print(Saat.dayofmonth); //Gün
  Serial.print("/");
  Serial.print(Saat.month);  //Ay
  Serial.print("/");
  Serial.print(Saat.year); //Yıl
  Serial.print(" ");
  Serial.println(gunler[Saat.dayofweek - 1]); //Hangi güne denk geldiğini bularak yazdırıyoruz.
  delay(1000); // 1 saniye bekletiyoruz.



int deger =1;
if(deger==1)
{
  for(int i=0;i<1;i++) // for dögüsünü butona 1 kere basıldığı gibi kullandık.
  {
    int address = 0;
    EEPROM.put(address, Saat.year + 1);
    address += sizeof(int);
    EEPROM.put(address, Saat.month);
   
  Serial.println("");
  Serial.println("EEPROM KISMIIIII ");
  Serial.print("Saat.year = ");  //Saat
  Serial.println(Saat.year);
  Serial.print("Saat.month = ");  //Dakika
  Serial.println(Saat.month);
   
   
   
    }
  int address = 0;
  int alarmYear = EEPROM.get(address);
  address += sizeof(int);
  uint8_t alarmMonth = EEPROM.get(address);

  Serial.println("");
  Serial.println("alrm KISMIIIII ");
  Serial.print("alarmYear = ");  //Saat
  Serial.println(alarmYear);
  Serial.print("alarmMonth = ");  //Dakika
  Serial.println(alarmMonth);
  Serial.println("");


 

    if(Saat.year == alarmYear && Saat.month == alarmMonth)
     {
    // ALARM
     Serial.println("");
     Serial.print("ALARMMMMMMMMMMMMMMMMMMMMMMMMMMMMM ");  //Saat

    }
 
  }
 
}
Bunu deneyebilir misin?


bu hatayı verdi
11111111.PNG
 
Son düzenleme:
Kod:
  int address = 0;
  int alarmYear = 0;
  uint8_t alarmMonth = 0;
  EEPROM.get(address, alarmYear);
  address += sizeof(int);
  EEPROM.get(address, alarmMonth);
Bu şekilde düzenleyin o kısmı.
 

Technopat Haberler

Geri
Yukarı