16F88 İLE BUTON KONTROLÜ

Başlatan dedim, 03 Haziran 2015, 10:01:18

dedim

yazmıs oldugun kod ledı acıp kapatabiliyor.ama benım yapmak ıstedıgım programın calısmasını buton ıle yapmak ıstıyorum.bunu basaramadım.mantık hatasıda yapıyor olabilirim

dedim

deneme yaptıgım zaman ledı acıp kapatabılıyor tek buton ıle bır program dusunun butona bastıgınızda program calısmaya baslayacak.işlemlerını yapacak.ben tekrar butona basıp programın calısmasını nasıl durdurcam bunu çözemıyorum işte .tek butonla yazılımın calısmasını nasıl acıp kapatabilirim

dedim

aynı vermıs oldugun son kodu isisde denedım.normalde ledı yakıp sönduruyor.ama isis de debug menusunden kodları kontrol ettıgımde butona basılıp cekılse bile While BUTON=0:Wend  satırında uzun bır zaman beklıyor gecıkmede yok bu kadar beklemesı normalmı

ete

#18
Programlarda algoritmanın ne kadar önemli olduğuna iyi bir örnektir bu konu.
Bu alternatif programda hemen hemen aynı işi yapar. Ancak tuş basılmasına karşı tepkisi uzundur.
Tuşları algılamak için delay ları beklemek zorundadır program. Elbette döngüsel gecikme kullanarak mesela 10 ms lik dilimler halinde 1000 ms lik gecikme yaratılabilir ve arada tuşun basılıp basılmadığı kontrol edilebilir. Böylece en fazla 10ms lik gecikme ile tuşun basılıp basılmadığı kontrol edilebilir.

Çalışır program aşağıdaki şekilde olmalıdır, Döngüsel gecikmeli sistem ise onun altında yer almaktadır.

ANAHTAR=0
PAUSE 200

BASLA:
      If buton=0 Then
        Toggle ANAHTAR
        While buton=0 :Wend
        DelayMs 50
      EndIf                           

      IF Anahtar=1 then GoSub PROGRAM

      GoTo BASLA

PROGRAM:
          Low LED
          DelayMS 1000
          High LED
          DelayMS 1000         
          Return
End


Buda döngüsel gecikmeli sistem


DIM W AS WORD
ANAHTAR=0
PAUSE 200

BASLA:
      If buton=0 Then
        Toggle ANAHTAR
        While buton=0 :Wend
        DelayMs 50
      EndIf                           

      IF Anahtar=1 then GoSub PROGRAM

      GoTo BASLA

PROGRAM:
          Low LED
          GOSUB GECIKME:IF ANAHTAR=0 THEN RETURN
          High LED
          GOSUB GECIKME:IF ANAHTAR=0 THEN RETURN         
          Return

GECIKME:
                FOR W=0 to 100
                    DelayMS 10
                    IF TUS=0 THEN
                        TOGGLE ANAHTAR
                        RETURN
                    ENDIF
                NEXT
                RETURN
End


Hatta döngüsel gecikmede Toggle kullanmaya bile gerek yok zaten orada her durumda Anahtar=1 dir ve TUS a basılırsa sıfır olacaktır. Toggle Anahtar yerine Anahtar=0 denilmesi daha doğru olur.

dedim

verdiginiz cevaplar ıcı tesekkur ederım.bu kodlar cok ısıme yaradı

fatihbaysu

Arkadaşlar,

Buradaki buton kontrolü için bir mini devre yaptım Power Supply çıkışını butona basığımda role ile açacak kırmızı ledi yakacak besleme kaynağı ilk açıldığında role çekilmemiş çıkış yok ve yeşil led yanıyor olacak ekteki yazılımı yaptım çalışıyor ama stabil değil butona bastığımda gecikme oluyor yada anlık açıp kapanıyor while wend yerine button komutumu kullanmak iyi olurmu örnek verebilirmisiniz ekte yaptığım prg var. İlginize şimdiden teşekkürler,selamlar.

Fatih Bayşu

ete

Yazdıklarını BASLA satırından itibaren birlikte inceleyelim;
While BUTON=0 :Wend  Bu satır ne iş yapıyor?. Butona basılıncaya kadar programı oraya bloke ediyor. Butona basar basmaz program bir alt satıra geçiyor. Orada ne var?
If BUTON = 1 Then GoTo DEGISTIR
Bu satıra zaten BUTON=1 olduğu için geldin yoksa yukarıdaki satırı geçemeyecektin. Peki zaten Buton=1 ve başka ihtimal yok ise oraya IF BUTON=1 yazmanın bir anlamı varmı sence? Bence yok. Zira Buton ya sıfır olabiliyor yada bir. Orayada ancak bir olunca gelebiliyor isem demekki orada isem buton zaten 1 dir. If yazmaya gerek yok.

Stabil çalışmamasının sebebi mantığı ters uygulamış olman bence. Ben olsam şöyle yapardım.

BASLA:
IF BUTON=1 then
   Toggle ROLE
   Toggle ledy
   Toggle ledk
   WHILE BUTON=1:WEND
   PAUSE 50
ENDIF

GOTO BASLA

Ne fark ediyor diyebilirsin. Bu sistemde Butona basılmamış ise program GOTO BASLA satırna gelip tekrar BASLA isimli etikete döner. Butona bastığın anda Ledlere konum değiştirip hala tuşa basılı tutuyorsan orada tuşu bırakıncaya kadar bekler.
Tuşu bıraktığın anda 50 ms lik bir tuş titreme önleyici gecikme uygular ve sonra yeniden basla satırına giderek yeni bir tuşa basılma işlemi bekler. İşin doğrusu böyle olur.

Ete

fatihbaysu

ETE Hocam,

Teşekkürler gerçekten hata küçük bile olsa sorunlar oluyor sağolun siz ve bu formda olan arkadaşların ilgisi ile isteyenler kendilerini geliştirebilmekte bende sayenizde bir şeyler öğrenmeye başladım, sizin bu formda paylaştığınız dersler ciddi bir kurs yeterliliğinde ama emekli biri olarak önerebileceğiniz uygulama yapıp kendimi daha da geliştirebileceğim Beşiktaşa yakın kurs yada başka eğitim kitap yada meteryalleri varmıdır. Selamlar.

Fatih Bayşu

ete

Kursları zaten takip edemiyorum. Üstelik Ankara da oturuyorum. Bu nedenle önerebileceğimbir kurs yok maalesef.

Ete

dedim

ete usta cok özel bır soru degil ama ankaranın neresınde oturuyorsunuz.bende ankaradayım.keçiörende oturuyorum.musayıt iseniz sahsen tanısmak ısterım sizinle beceriksiz bir ögrencınız olarak bununla gurur dyarım.

ete


Powered by EzPortal