avatar_Celal Kızılırmak

DS18B20 ISI OKUMA SORUNU

Başlatan Celal Kızılırmak, 27 Ocak 2019, 02:34:42

. Kağan

#15
Hocam anlamadım dediğinizi. Başka iş yapmıyor derken? Yani buton kontrolü bu şekilde uygun değilmi?
Basla' nın altında ki aşağıdaki satırlar menü butonuna basıldığını algılaması içindi. Ama bir gerçek varsa while-wend kullanımını yeni öğreniyorum. Üzgünüm...

IF MOD_SEC=0 THEN 
 
WHILE MOD_SEC=0 : WEND
TOGGLE DRM
ENDIF
IF DRM=1 THEN : GOTO BTN_KNTRL


Ayrıca aşağıdaki gibi yapınca da olmuyor.


IF MOD_SEC=0 THEN 
 
WHILE MOD_SEC=0
TOGGLE DRM
PAUSE 200
IF DRM=1 THEN : GOTO BTN_KNTRL
WEND
ENDIF


Bu üsttekinin anlamını ben şöyle çıkarıyorum. Mod seç butonuna basınca, modseç sıfır olana kadar, drm'yi  tersle. drm bire eşit olunca da buton kontrol menüsüne gir. Ama çalışmıyor. 

IF MOD_SEC=0 THEN  : GOTO BTN_KNTRL yapınca da biraz fazla basılı tutunca kaydete geçip hemen çıkıyor. :(

Sizin sayfanın üst kısmında verdiğiniz koddaki gibimi yapmalıyım. Bazen hiddetleniyorsunuz, sizi kızdırmadan bilgi almak isterim ama hala acemiyiz sizin yanınızda tabiki. Acemiliğimize verin hatalarımızı.


Yani ben sensörlere okuma emrini verdikten sonra sırada buton kontrol satırı var ve çalışır diye düşünmüştüm.

İlaveten hocam,

BUTTON BUTON1, 0,254,255,i,1,ARTI


ile ARTI alt başlığına gidince return ile dönebilirmiyim? Yani,

 ARTI:
  PAUSE 100
  SET1=SET1+1
IF SET1=10 THEN SET1=0:SET=SET+1
IF SET=100 THEN SET=0
  WRITE 0,SET
  WRITE 1,SET1
  pause 100
return


şeklindemi olmalı?

ete

Buton kontrolüne bir diyeceğim yok. Senin tercihin. Neden direk yollamıyorsunda DRM=1 olunca yolluyorsun oraya onu anlamıyorum.
DRM orada zaten ilk çalışmada hemen 1 olacak. While şart:wend şeklindeki komut da ortaya bir şart koyarsın program o şart gerçekleşinceye kadar wile ile wend arasında ki komutları sırası ile çalıştırır. 1 tane komuyt koyarsan o tek komut sürekli çalıştırılır.
WHILE MOD_SEC=0 
TOGGLE DRM
PAUSE 200
IF DRM=1 THEN : GOTO BTN_KNTRL
WEND

Bu komut dizisinde MOD_SEC=0 olduğu müddetçe,
TOGGLE DRM
Pause 200
...
şeklindeki komutlar sürekli çalıştırılır. Ama sen süreki çalışmasın diye ekleme yapmışsın.
IF DRM=1 THEN GOTO BTN_KNTRL işte bu komut nedeni ile orada while wend kullanmak akıllıcamı olur düşünmek gerekir. Zira Mode_SEC=0 iken program döngüye girecek ve TOGGLE DRM ile DRM değeri sıfırdan 1 e değişecek ve hemen altındaki komut nedeni ile program BTN_KNTRL etiketine gidecektir.
Oraya IF Mod_SEC=0 then BTN_KNTRL desende program için fark etmeyecek aynı işlem hemde biraz daha hızlı şekilde yerine getirilecek idi. Burada şunuda belirteyim, IF DRM=1 THEN : GOTO BTN_KNTRL şeklinde komut derleme esnasında hata vermesi gerekir.  Doğrusu IF DRM=1 THEN BTN_KNTRL şeklinde olmalıdır.
Yada, IF DRM=1 THEN : GOTO BTN_KNTRL :endif şeklinde olmalıdır.

Yoksa araya pause 200 yazınca olmuyor demeyin kesin olması gerekir.
"Bu üsttekinin anlamını ben şöyle çıkarıyorum. Mod seç butonuna basınca, modseç sıfır olana kadar, drm'yi  tersle. drm bire eşit olunca da buton kontrol menüsüne gir. Ama çalışmıyor.
Komutu yanlış değerlendiriyorsun. Mod_Sec sıfır olana kadar değil sıfır olduğu müddetçe drm ye konum değiştir anlamına gelir. Tersle demekte yanlış bir tersler bir düzler. Yani Bir DRM=0 bir sonrakinde DRM=1 olur. Bu böyle devam eder döngü devam ettiği müddetçe.
BUTTON komutunu hiç sevmem. Anlaşıması zor uygulamasıda zordur. O komutta verilen ARTI isimli etikete ancak GOTO olarak gidebilirsin. GOSUB ile gidersen RETURN ile dönebilirsin. Ya çift etiket kullanacaksın yani ARTI yerine mesela EKSI ye gönder EKSI de ise GOSUB ARTI yaz alson bitsin böylece istediğin ARTI etiketine Gosub ile gitmiş olursun.

Asıl söylemek istediğim şuydu, Sensör sıcaklık çevrimi zaman alan bir işlem. Bu işlem tamamlanıncaya kadar boşuna beklemek yerine o bekleme işleminde yapılacak başka işleri yapmak akıllıca olur demek istemiştim.
Mesela sizin örnekte GOSUB BEKLE etiketin 250 ms bekleme var. Bu bir program için bile uzun bir beklemedir. Halbuki o yerde boşuna 250 ms bekleyeceğime o sırada buton kontrolünü yaparım yada diğer bir veya bir kaç sensörün varlığını yokluğunu test ederim sonra işim bitince gidip sıcaklıkları okurum diye düşünüyorum.

Normalde kolay sinirlenmem. Ama bazen damarıma basıyorlar. O zaman ister istemez tepki veriyorum. Bazen aşırı kaçıyor farkındayım ama mümkün olduğunca frenliyorum kendimi.

Dikkatimi çeken bir şey var. Bol keseden Pause kullanıyorsunuz. Bu alışkanlıktan vazgeçin . Mümkün olduğunca gecikme kullanmayın. Gerektiğinde kullanmaya bakın. Bir programı bir etikete yolladığınızda oradaki komut dizisi pause ile başlamamalıdır. Bu yanlış olur. Pause yi bir engel gibi görün zamanla bunu bırakırsınız ve sizin için faydalı olur.

Ete

. Kağan

#17
Evet anlamaya çalışıyorum.
Bu durumda aşağıdaki komut neyi anlatıyor? Saçma bir menü olmuyor mu?

CIK:
WHILE MOD_SEC=0
       WEND
        TOGGLE DRM
        IF DRM=0 THEN BASLA


WHILE MOD_SEC=0
       WEND                                 komutu ne iş yapar?

ete

 WHILE MOD_SEC=0
       WEND
        TOGGLE DRM
        IF DRM=0 THEN BASLA
bu saçma elbette. Yanlış değil ama saçma.
Sebebini anlattım önceki mesajda.
WHILE MOD_SEC=0
       WEND   
komutu Mod_sec=0 olduğu müddetçe program o döngü içinde kalır. Döngü ancak Mod_sec=1 olunca biter ve program while wend döngüsünden çıkar.

Tekrar ilk saçma dediğim komut dizisine bakarsakburada while wend amacı komut satırlarının sürekliliğini sağlamak ve Mod_sec=0 olduğu müddetçe while ile wend arasındaki komutları sürekli çalıştırmaktır. Ama sen şartı bozacak komutu da oraya koyunca while wend in bir anlamı kalmıyor.
While- Wend komutunu  , BASLA..... GOTO BASLA şeklinde düşünebilirsin. Tek farkı BASLA .. GOTO BASLA da bir şart söz konusu değil program sürekli BASLA-Goto BASLA arasında gidip gelir. While de ise Şarta bağlıdır.
Mesela
Sayac=1000
While SAYAC>0
Sayac=sayac-1
Pause 100
Wend
şeklinde bir komut dizisinde sayac değeri sıfır oluncaya kadar sayac değerinden 1 eksiltilir 100 ms beklenir tekrar başa danülerek tekrar sayac dan 1 eksiltilir ve sonunda sayac=0 olunca döngü sona erer.
Umarım farkını ve kullanım şeklini anlamışsınızdır.

Ete

. Kağan

Çok teşekkür ederim. While-wend döngüsünü anladım.

Powered by EzPortal