RTC üzerinde ayları sabit değere çekme

Mçınar

Hectopat
Katılım
5 Ağustos 2019
Mesajlar
461
Merhaba arkadaşlar bir süredir uğraşıyorum ama saat. Mont ayı bir türlü sabit bir şekilde çekemiyorum. Ay bitince attığım değerde artıyor sabit değer çekmek istiyorum.
----------
İnt saat2 = saat. Hours;
İnt dakika2 = saat. Minutes;
İnt saniye2 = saat. Seconds;
İnt gün2 = saat. Dayofmonth;
İnt AY2 = saat. Month;
İnt yıl2 = saat. Year;
İnt yeniyıl2 = saat. Year;
---------
Bu şekilde saat. Mont u AY2 içerisine atıyorum ama ay değişince oda değişiyor yardım ederseniz çok makbule geçer.

[CODE title="rtc"]#include <virtuabotixRTC.h>
virtuabotixRTC Saat(6, 7, 8); //CLK -> 6, Data -> 7, RST -> 8
String gunler[] = {"PAZARTESI", "SALI", "CARSAMBA", "PERSEMBE", "CUMA", "CUMARTESI", "PAZAR"};
void setup() {
Serial.begin(9600);
}
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.
}[/CODE]
 
Saat.updateTime() çalıştırmazsan büyük ihtimal en son kayıtlı saati kullanır.

Sadece ayı bir değişkene sabit atabilsem atacağım Bluetooth ile haberleştirip 1'e bastığımda sabit hangi aydaysa onu alacak yok mudur bir çözümü?

Saat.updateTime() çalıştırmazsan büyük ihtimal en son kayıtlı saati kullanır.

Matematikte 1 formül falan yok mudur yine aynı kendi değerini verecek değişmeyecek :(

Saat.updateTime() çalıştırmazsan büyük ihtimal en son kayıtlı saati kullanır.

Hocam çalıştırmazsam olmazki zamanın arka planda işlemesi önemli anlık zamanı durdurma var mı o anki durduğu zamanki değeri çeksek sonra anlık aktif falan etsek bir çaresini bulmam lazım?
 
Tam olarak yapmak istediğinizi anlayamadım. setDS1302Time(uint8_t seconds, uint8_t minutes, uint8_t hours, uint8_t dayofweek, uint8_t dayofmonth, uint8_t month, int year); methodu var eğer ayı kendiniz güncellemek isterseniz.
 
Tam olarak yapmak istediğinizi anlayamadım. setDS1302Time(uint8_t seconds, uint8_t minutes, uint8_t hours, uint8_t dayofweek, uint8_t dayofmonth, uint8_t month, int year); methodu var eğer ayı kendiniz güncellemek isterseniz.
hocam alarm kuracağım için ayı sabit çekmek istiyorum alarmı da bluetooth ile butona basıldığında 1 sene sonraki mesela butona bastığımda nisan ayını if ile karşılaştırıp alarm çalıcak seneye nisan ayında alarm çaldırcam diyim.
______konu güncel______
 
Son düzenleme:
Kod:
if(Saat.year == 2023 && Saat.month == 4) {
// CODE
}
istediğiniz böyle bir şey değil mi?
evt hocam buna benzer
ama ben şimdi telefondan 1 yıl alarm kurma butonuna bastığımda güncel yıl ve ayı alıp seneye alarm kurmak .gösterdiğinizde mesela mayıs ayında alrmı kurdum o yüzden saat.mont ==4 çalışmaz o yüzden
evt hocam buna benzer
ama ben şimdi telefondan 1 yıl alarm kurma butonuna bastığımda güncel yıl ve ayı alıp seneye alarm kurmak .gösterdiğinizde mesela mayıs ayında alrmı kurdum o yüzden saat.mont ==4 çalışmaz o yüzden
dizi ya da char ile hangi ayda olursa saat.month== 4 <<-- (4) değeri değişirse olur yapılabilir mi ki kaç gündür kafa yordum ama olur mu diye ??
evt hocam buna benzer
ama ben şimdi telefondan 1 yıl alarm kurma butonuna bastığımda güncel yıl ve ayı alıp seneye alarm kurmak .gösterdiğinizde mesela mayıs ayında alrmı kurdum o yüzden saat.mont ==4 çalışmaz o yüzden

dizi ya da char ile hangi ayda olursa saat.month== 4 <<-- (4) değeri değişirse olur yapılabilir mi ki kaç gündür kafa yordum ama olur mu diye ??
yılı yaptımda zaten sadece ayı yaparsam olucak
 
Son düzenleme:
Eğer 1 yıl sonrası için alarm oluşturulacaksa butona basıldığında alarm tarihi belirlenip EEPROM'a yazılması ve sürekli olarak okunup şimdi ki zamanla karşılaştırılması lazım.
 
#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 🤷🏿‍♂️
 

Technopat Haberler

Geri
Yukarı