EEPROM GÜN SAYACI DÜŞTÜKÇE KAYIT ETME

Aşağıdaki kod a kendimce yaptım ama tam dediğim gibi yapmıyor. İstediğim sadece 22 den 21 , 21 den 20, 20 den 19 a gibi sadece düşünce EEPROM a Kayıt etme olabilirmi. Ben Şu Şekilde “” if (beklenengun<=22){ EEPROM.write(0,beklenengun); }“” Ama buda benim istediğimi yapmıyor. Yardımlarınızı Bekliyorum. KOD: #include <eeprom.h>
#include <liquidcrystal.h>

define yukari 9
define asagi 10
define _menu 8

LiquidCrystal lcd(12,11,5,4,3,2);

define menu_adet 4
define menu_sicaklik 1
define menu_nem 2
define menu_Maxsicaklik 3
define menu_Maxnem 4
define menu_kalangun 0
int beklenengun=22;
int oncekikalangunzaman=0;
int Saatdegiskenkalangun=24;

long sureYukari;
long sureAsagi;
long sureMenu;

bool yukariTetik;
bool asagitetik;
bool menuTetik;

int menu = menu_kalangun;

void setup() {
pinMode(yukari, INPUT);
pinMode(asagi, INPUT);
pinMode(_menu, INPUT);
lcd.begin(16,2);
lcd.clear();
EEPROM.read(0);
}

void loop() {

kalangun();

if(menu==0){
        lcd_kalangun_ayar();
}

}
void kalangun(){
unsigned long kalangunzaman=millis();
long saat=saatdegiskenkalangun*10;

// ************* DEGISTIREBILIRLER/////////////
//“1 günde 1 düşecek”
if (kalangunzaman - oncekikalangunzaman >= saat) {
// ********************************************

  oncekikalangunzaman = kalangunzaman;

//Saniye veya ile calisacak kodlar buraya
beklenengun=beklenengun-1;
//Saniye ile calisacak kodlar buraya

}
if (beklenengun==0){
  beklenengun=22;
}

if (beklenengun&lt;=22){

EEPROM.write(0,beklenengun);
}

}

void lcd_kalangun_ayar(){
lcd.setCursor(0,0);
lcd.print(“Kalan Gun:”);
lcd.setCursor(11,0);
lcd.print(beklenengun);
}

</liquidcrystal.h></eeprom.h>

doğrumu yaptım bilmiyorum ama eğer bölümünü if(beklenengun=beklenengun-1) EEPROM.write(0,beklenengun) olarak yaptım doğru bir mantık mı olur ?

güncel :smiley:

güncel

gün hesaplamasını milisden yapmışın o kadar gun milis sayamayabilirsin. direk gun <> oncekıgun gibi bir kontrol olsa daha iyi olacak sanki

PEKİ EEPROM a yazmayı nasıl yapacam . doğrumu yapmışım. if(beklenengun=beklenengun-1) EEPROM.Write(0,beklenengun) yani benim düşücem beklenengun sadece 1 eksilince EEPROM a kaydetmesi ama ? direk derken nasıl . Değişken atamasan mı demek istediniz?

include <eeprom.h>

int x=0;
int last_x=0;

void setup()
{
x=EEPROM.read(0);
last_x=x;
}

void loop()
{

/* x değeri herhangi şekilde değiştirilirse ve değişen x değeri last_x den büyükse
if döngüsü çalışır ve eeproma yazar x, last_x e döngü içinde eşitleneceğinden 1 kere çalışacak ve tekrar x in değişmesi beklenecektir. */
if ((last_x!=x) && (x>last_x))
{
EEPROM.write(0,x);
last_x=x;
}

}

saygılarımla…</eeprom.h>

teşekkür ederim. tam aradığım şey

selam bu şekilde denedim kayıt ediyor fakat video da ki gibi bi sorun ile karşılaşıyorum. Normalde çeyrek saniye de bir düşüyor EEPROM ile yaptığımda iyice yavaşlıyor sanki EEPROM kayıt bölgesi 0-255 arası kaydediyo onu yazıyor gibi. Ne yapabilirim ? https://youtu.be/q5hJPuVHf1c

Sorunu çözdüm. ekranı yazdıracak yeri eeprom 0 ekledim yani eeproma bi değişkene atayıp print yaptım kayıttakini gösterince gayet güzel çalışıyor

düzeldi sanmışım. Yine aynı şekilde oluyor. Kapanıp açınca tekrar aynı video daki gibi oluyor.

255 den geriye sayıyor kayıt ettiği gunden başlamıyor

if (beklenengun>22) beklenengun=22 yapınca oldu. acaba EEPROM ilk Başta niye kayıt ettiği yerden Başlamıyorda 255 den başlıyor.

ilk program atıldığında eprom boşken içindeki değer 255 dir. once kontrol edin 255 ise içinde sıfır veya başlangıç değerini yazın.

o zaman yaptığım işlem doğru. İlk değer 255 çıkıyor if (beklenengun>22) beklenengun=22 doğru bi mantık o zaman