kumanda protokolü yardım

Başlatan blueboard, 08 Şubat 2014, 22:50:12

blueboard

#15
Ete Hocam ,  diyelim ki aradan 1 dk zaman geçti ve biz tekrar butona bastık. Bu durumda ilk komut olduğundan yine 1 defaya mahsus çalışacaktır. Teşekkür ederim.

ete

Bu sorunun cevabını vermek zor. Öyle basit bir konuda değil. Gönder etiketine 8+4,5 ms lik sinyali yerleştirdik.
Butona bastınız , ön sinyal verildi ardından veri paketi yollandı.
Ayrıca bir sayaç çalıştırmak lazım ki aradan 1 dak. lık zaman geçtiğini program anlayabilsin. Bu işi komplike hale getirir öyle kolaycada halledilemez. Bence 1 dk meselesini tekrar düşün. Doğrusu şöyle olmalıdır Tuşa basılınca ilk defa ön palsi yollamalı tuştan elini çekmedi isen bir daha tuşu bırakıncaya akdar ön sinyal yollamamalıdır.
ELini tuştan çekince bunu anlamalı ve bir dahaki basışta aynı işi yapmalıdır.
Bu nasıl yapılır dersen;
ILK VAR BIT şeklinde bir bit değişkeni tanımla
TEST etiketi altındakileri şöyle değiştir

TEST:
IF BUTON0=0 THEN
  ILK=1
  GOSUB geri
  RETURN
ENDIF 
 
IF BUTON1=0 THEN
  ILK=1
  GOSUB ileri 
  RETURN
ENDIF

ILK=0
Return

böylece ilk=0 ile başlayan döngüde butona basılmış ise ilk=1 olacak ve asıl değerlendirme Gönder etiketinde yapılacaktır.
Şimdi Gönder etiketine bakalım,
GONDER:
gonder:
       IF ILK=0 THEN
         PORTA.0=1
         PAUSE 8
         PORTA.0=0
         PAUSEUS 4500
       ENDIF
       
   For X=0 to 5
     TEMP=ByteArray[X]
     For BitCount=0 to 7
        If Temp.0[BitCount] = 1 THEN
            GOSUB bir
        ELSE
            GOSUB sifir
        ENDIF
     NEXT
   Next
   pause 41
RETURN


Umarım işe yarar düşündüklerim.
Ete

blueboard

Ete Hocam,sonsuz teşekkürler. Ben mesajımdaki 1 dakika ifadesini butona basılıp bir süre sonra butondan elimizi çektiğimizde bir sonraki basışta yine başlangıç sinyalini göndermesi anlamında yazmıştım. Burada sizin ifadeniz daha doğru oldu.Siz bu durumu benden daha iyi anlatmışsınız           " Tuşa basılınca ilk defa ön palsi yollamalı tuştan elini çekmedi isen bir daha tuşu bırakıncaya kadar ön sinyal yollamamalıdır.Elini tuştan çekince bunu anlamalı ve bir dahaki basışta aynı işi yapmalıdır."
Ben de aynen bunu demek istemiştim.Tüm yardımlarınız için tekrar teşekkür ederim.

blueboard

#18
Ete Hocam ,özür dileyerek bir şey sormak istiyorum.Lütfen yanlış anlamayın,bilgiçlik taslamak gibi bir düşüncem asla yok.Son yazdığınız ifade şöyle idi:
TEST:
IF BUTON0=0 THEN
  ILK=1
  GOSUB geri
  RETURN
ENDIF 
 
Bu kodun şu şekilde olması gerekmez mi?
TEST:
IF BUTON0=0 THEN
GOSUB geri
ILK=1
  RETURN
ENDIF 
  Bu şekilde yazılmazsa butona ilk basma konumunda da 8 ms high ,4.5 ms low olmaz gibime geldi.Buton0=0 olduğu anda ILK değerini başlangıçta 1 yaptığından geri adlı  etiketin altında gonder etiketine gittiğinde buradaki şart ILK=0 ise yazıyor. Ama biz ILK değerini test etiketinde hiçbir şey yapmadan 1 olarak değiştirdiğimizden hiç bir zaman 8 high+4.5 low gönderemeyiz gibime geldi. Tabi siz daha iyi bilirsiniz,benim mantığıma böyle geldi.
gonder:

IF ILK=0 THEN
         PORTA.0=1
         PAUSE 8
         PORTA.0=0
         PAUSEUS 4500
         
     ENDIF
Teşekkür ederim.

ete

Evet haklısın bir mantık hatası yapmışım. Aslında en doğrusu ılk=1 ifadesini ön puls çıkran yere koymak. Şöyle
If ILK=0 then
  Ilk=1
   Porta.0=1
    Pause 8
    Porta.0=0
    Pauseus 4500
   Endif
Ete

Powered by EzPortal