Arduino Kaldığı yerden devam etme

semih00055

Üye
Katılım
19 Kas 2020
Mesajlar
5
Puanları
1
Yaş
28
Arduinoda zaman rölesi kodunu Elektrik kesilip geldiği zaman kaldığı yerden saymaya devam etmesini nasıl sağlayabilirim?
 
Son düzenleme:
setup içine timer.setCounter(saat,dakika,saniye) olarak eepromdan daha önce kaydettiğin değerleri gireceksin
 
@silvestir, anladığım kadarıyla kod içindeki saat, dakika ve saniye süreyi tutmak için kullanılmış. O sebeple RTC (gerçek zaman saati) modülüne ihtiyaç yok. Bu bilgiler eeprom'da saklanmakta ve her çalışmaya başladığında (void setup) okunmaktadır. Aynı şekilde void loop içindeki saklamak istediğiniz diğer değişenleri de bir sonraki eeprom hücresine (1,2,3'ten sonraki 4,5,6,7,8,9,10 nolu hücreleri) saklamanız ve ilk açışta geri okutarak onun üzerinden devam etmeniz mümkün. Kodu siz yazdıysanız bu kısmı ekleyebileceğinizi düşünüyorum.
 
Bu soruna @semih00055 kardeşle şöyle bir çözüm bulduk @rsimsek hocanın dediği gibi saniye saniye eeproma kaydedip güç geri geldiğinde bunu okuyup kaldığı yerden devam edebilirdik ama eepromun ömrü yüz bin kere yazılmaya müsait, her saniye yazarsak 6 saat gibi bi sürede çöp olurdu. Onun yerine @silvestir 'ın dediği ds1302 modülünü kullanmaya karar verdik ama saat özelliğini değil. DS1302 içerisinde 64 baytlık erişilebilir bir ram var, batarya bitmediği sürece bu verileri saklayabiliyor ve yazma ömrü tüm ramlerde olduğu gibi sınırsız. DS1302 için yazılmış kitaplıklardan faydalanarak. Cihazın mevcut durumunu rame kaydedip her yeni başlangıçta oradan çağırarak Elektrik kesintisinden önceki durumuna geri döndürdük.
 
Hocam kolay gelsin bir projede aynı bahsettiğiniz gibi bir durum yaşıyordum çözümünüzü okuduktan sonra ds1302 siparişi verdim daha elime ulaşmadı ancak kodda bu işlemi nasıl yaptığınızı soracaktım mümkünatı varsa paylaşırsanız çok sevinirim yani sadece mevcut durumu RAM e aktarma kısmını saygılar
 
bilgiyi eepromun tek baytına değil sırayla mesela 100 baytına yazın. diğerlerini silin. silme işlemi 100. bayt dolduktan sonra 1 defa yapılacak.
cihaz açıldığında 100 baytı tarasın bilgiyi okusun.
masraf olmasın.
 
Son düzenleme:
Kodun tamamını paylaşamıyorum maalesef ama ram kısmına okuma ve yazma işlemi için küçük bir kod paylaşabilirim. DS1302 kitaplığını kurmayı unutma ve ram hücresine sadece 8 bitlik yani 0-255 arası sayılar kaydedilebileceğini aklında tut. Daha büyük veriler için bit işlemi yaparak ayırman gerekiyor. Aşağıdaki örnekte ssayının her saniye ramin sıfırıncı hücresine kaydedilip her açılışta oradan okunarak başladığını göreceksin. 0-63 arası hücreleri kullanabilirsin. İlk başlamada ramin o hücresi daha önce ayarlanmadığı için saçma bir sayıdan başlayabilir. Kolay gelsin.

C++:
#include <DS1302.h>
DS1302_RAM ramBuffer;
DS1302 rtc(10,11,12);    //RST->10,DA->11,CLK->12
uint8_t saniye = 0;

void setup(){
    Serial.begin(115200);
    if (!rtc.begin())
        Serial.println("Saat modülüne erişilemiyor");
    
    ramBuffer=rtc.readBuffer();
    saniye = ramBuffer.cell[0];
}

void loop(){
    Serial.println(saniye);
    ramBuffer.cell[0]= ++saniye;
    rtc.writeBuffer(ramBuffer);
    delay(1000);
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…