avatar_anlhlc

Gün Saydırma Hk.

Başlatan anlhlc, 16 Şubat 2018, 09:09:42

anlhlc

Değerli arkadaşlar ve ETE hocam merhaba,
2 yıldır kullandığım,kendim yaptığım ve gayet stabil çalışan bir kuluçka makinesi kontrol kartım var. Son olarak bir özellik daha eklemek istiyorum. Sistemin çalışması şu şekilde olacak.
Sistem gün sayımı yapacak ve ilk 18 gün boyunca sıcaklığı 37.5 C de ,nemi ise %55 te sabit tutacak. 18 günden sonra sıcaklık 37.2 ye düşecek , nem de %75 e çıkacak.
Nem ve sıcaklık değerlerini alıyorum ve çıkışa aktarabiliyorum tek sorun pice nasıl gün saydırırım.Eminim birçok yöntem vardır fakat kafam durdu. Bu arada kesme ile olmuyor çünkü DHT22 sorun çıkartıyor, bunun tartışmasını daha önce ETE hocamla yapmıştık.
Herkese şimdiden teşekkür eder iyi çalışmalar dilerim.

ete

#1
Gün değişimi takip edilerek yapılır bu iş. Pek çok programda SN değişim algortiması kullanıyoruz. Bunun için bir EskiSN değişkeni kullanıyoruz. İlk işe başlarkan saati okuyup oradan okunan SN değerini ESN ye atıyoruz. Sonra program içinde okunan SN değeri ESN değerini karşılaştırıp değişiklik var ise yapılacakları yapıp ESN=SN diyoruz.
Benzer mantık Gün için kullanılabilir. İlk çalıştırmada zaman okunduğunda EGUN=GUN yapılır. Her zaman okumda ayrıca birde gün karşılaştırması yapılır. Farklı ise Gün değeri bir artırılıp EGUN=GUN yapılır. Böylece gün sayımı yapmış olursun. Geriye gün sayısına göre yapılacakları programa eklemek kalıyor.
Tabiiki bir başka yolu daha var. Gün ne zaman değişiyor? gece yarısı saat 11:59 den sonra 00:00 ile yeni güne geçmiş oluyorsun. Burada yinede EGUN ve GUN değişkenleri tutulmalı ve saat üzerinden gün değişimi yaşandığında yani;
IF SAAT=0 and Dak=0 and EGUN<>GUN THEN
    EGUN=GUN
    GUN_SAYAC=GUN_SAYAC+1
    IF GUN_SAYAC=18.....
   .....
ENDIF
şeklinde de bu işi yapmak mümkün.

Ete

anlhlc

Hızlı ve açıklayıcı cevabınız için teşekkürler. Elimde ds1302 rtc ile bu işin nasıl yapılacağı hakkında bir örnekle yardımcı olabilir misiniz?

ete

Verdiğim açıklama yeterli değilmi?. Kod biçiminde de verdimki zorluk çekmeyesin.
Zaman Oku diye bir bölüm olması gerek programında. Yada program içinde GOSUB zaman_Oku diye bir etiket olması gerek.
Onun hemen altına eklenti yapmalısın.
Zaman_Oku etiketinde okunan zaman; SN-Dak-Saat-HaftanınGünü-Gün-Ay-Yıl.. formatında okunuyor.
Gün için ne gibi bir değişken adı kullanılmış ise sen onu kullanacaksın.
Öncelikle değişken tanımlama kısmına EGUN  VAR BYTE şeklinde bir eski gün değişkeni tanımla.
BASLA etiketinden evvel bir GOSUB ZAMAN_OKU komutu var ise onun altına EGUN=GUN yazman gerekir.
Daha Sonra Gosub ZAMAN_OKU etiketi altına,

IF SAAT=0 and Dak=0 and EGUN<>GUN THEN
  GUN_SAY=GUN_SAY+1  'GUN_SAY değişkenide tanımlanacak)
  IF GUN_SAY=xx then ne yapılacak ise
ENDIF
şeklinde yapılacak. Bir kaç detay daha girebilir artık okadarını sürdüremiyorum. Programa göre konsantre olmak gerekir.

Gördüğün gibi DS1302 okuma ile alakası yok yok derken mantığın bir alakası yok. Oradan sadece gün bilgisi alıp eski gün ile karşılaştıracaksın hepsi bu.

Ete

anlhlc

Teşekkürler hocam hallettim iyi çalışmalar

Powered by EzPortal