inkey komutunun kullanımı

Başlatan inventor, 02 Kasım 2013, 14:38:53

inventor

Merhaba arkadaşlar,

Inkey komutunu kullanmak istiyorum. Anlamadığım bir kaç nokta var. Aydınlatırsanız sevinirim.

ilk olarak help demiş ki:

Variable = Inkey

inkey komutu sizin için taramayı yapar ve okuduğu değeri değişkenin içerisine atar. Ancak Inkey komutu 0 ile 16 arasında bir değerle dönmelidir. Bunun dışındaki değerleri görmez. Tuşa basmazsanız sürekli olarka 16 değerini geriye döndürür.
Buraya kadar ki kısımı anlayabiliyorum. Anlamadığım yer şurası;

Inkey komutunun geri çevirdiği değeri şöyle kullanabilirsiniz;

Var1 = Inkey
KEY = LookUp Var1, [255,1,4,7,"*",2,5,8,0,3,6,9,"#",0,0,0]

Bu örneği help dosyası veriyor. Aşağıdakiler ise nette bulduklarım.

X= INKEY
TUS= LOOKUP X, [1,4,7,"*",2,5,8,0,3,6,9,"#"]

Başka bir yerde ;

X= INKEY
TUS= LOOKUP X, [1,4,7,10,2,5,8,0,3,6,9,11]

Bu üç örnekte de aynı keypad aynı port pinlerine bağlanmış. Lookup değerleri farklı.

Eskiden sütun ya da satırları sırası ile set eder, sütun ya da satırlardan geri dönen bilgilere bakardık. Biraz uzun bir tablo olurdu ama klasik yolla tarama yapıp basılan tuşun ne olduğunu anlardık. if...then yada lookup ile tuşun ismini koyar ve kullanırdık.

Konuya hakim bir arkadaş inkey kmutunun lookup ile birlikte nasıl kullanıldığını ve tarama mantığını anlatabilir mi?

Selam

OG

#1
Inkey komutunun Lookup ile bir ilgisi yok.

INKEY komutu ile 4+4 lük porttan (portun  4 yatay 4 dikey hat olarak kullanımı) ortaya çıkan tarama ile keylerden birine basıldığında elde edilen değer 0-15 arası (16 adet) sayısal değerdir. Yani 4 bitin alabileceği olasılıklar.

Basılmadıysa INKEY ile donen deger 16 dır.

Her şey burada bitiyor.

Bundan sonra basılan tuşları sizin yorumlamanız kalıyor. Yani donen degere gore ne yapayım meselesi.

Tuş takımı bağladınız, donen değere gore şu basılırsa bu eldem olsun meselesi sizin yorumlamanız. Bunu lookup ile veya başka bir yontemle yapıyorsunuz.

Mesela
Dim Var1 as Byte
Dim TUS as Byte

'''
oku:
Var1 = Inkey
return

Main:
Gosub oku
''' Bu alttaki IF şartları Lookup ile aynı şeydir fazla kod üretir o kadar.
if Var1 = 0 then TUS = 15
if Var1 = 1 then TUS = 3
if Var1 = 4 then TUS = 8
if Var1 = 9 then TUS = 155

veya bir işe yönlendirirsiniz.
if Var1 = 0 then goto ..
if Var1 = 4 then goto ...

veya
if Var1 = 0 then Ledi Yak
if Var1 = 4 then Roleyi Çek

Gibi.

Yani olay yanlızca yorumlama.
Genelde INKEY,  Kaypad ler için kullanıldığından, kaypad deki kullanıcıya yonelik amaca uygun degerler ile yorumlanıyor, telefon tuşu gibi.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

z

PC de basic zamaninda klavyeden bir tusa basilip basilmadigini anlamak icin kullanirdik.

Eger bir dongu isinde herhangi bir tusa basilip basilmadigini basilmadiysa dongu icinde bir seyler yapmayi basildiginda donguden cikmayi dusunuyorsan

while(inkey=0)  gibi bir kod kullanabilirsin.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ipek

galiba bu ismi sir Clevie Sincler'e borçluyuz spectrum'da bol bol yazardık.

muhittin_kaplan

@Z hocam basic te yazdınız mı ? inanmam.   8)

inventor

Cevaplar için teşekkür ederim.

Yalnız aynı noktada yine takılıyorum. Inkey komutunun lookup tan bağımsız olduğunu ve if then ile yapılabileceğini bilyorum. Anlamadığım yer şurası.
Mesela portB yi keypad için yönlendirmiş olalım. Ve bu portu taramaya başlayalım. 0-1-2-3 nolu bitleri sütun , 4-5-6-7  nolu bitleri de satır yapalım.

0 biti set edelim ve bu anda bastığımız tuş 4 nolu biti set etmiş olsun. Porta bakacak olursak değer nedir... 17 olması gerekmez mi? Yani 0 nolu bit ile 4 nolu bit 1 ise bunun binary değeri 17 olmalı. Muhtemelen mantığımda hata var ve bende onu anlamaya çalışıyorum. Mesela sütun taramada port 3 set oldu diyelim ve bu anda port 7 yi set edecek tuşa basalım. Porttaki bilgi 136 olmalı. Inkey ise max. 16 ile geri dönüyor. Inkey nasıl bir tarama yapıyor?

Diğer konu da bunun cevabını bulduğumda kendiliğinden ortaya çıkacak sanırım.  Yani ben tuş takımından 5 e basarsam 5 mi çıkarır gibi.

Bir kez daha açıklarsanız sevinirim
Selam

OG

#6
Satırlar INPUT ve PULLUP açık olduğundan H da bekliyor.

Sütun portları sürekli taramada, sırayla LOW a düşürüyor,
Satırlar basılanı algılamak için sütundan geleni gözlüyor.

Satırlardan birisi LOW olduğunda tuşa basılmış ve Sütunlardan birisinin gönderdiği LOW u almış demektir.
O an hangi sütun LOW ise ve hangi satırdan giriş alındı ise ona göre KEY değeri üretilir.

Bu işlemi INKEY den once kendimiz portu taratarak yaptırırdık, farklı birşey değil. INKEY bu işi kendisi üstlenmiş.

-------

Sütunların taraması sürekli değildir, INKEY komutu görüldüğü yerde başlar bittiği yerde durur.
Butona basılınca çıkış datası gönderme esnasında tekrar INKEY goresiye kadar tarama yapmaz.


Ekteki dosya incelenirse belki anlaşılır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

inventor

Durumu şimdi anladım. Inkey hangi sutunu set ettiğini kendisi biliyor ve sadece 0-1-2-3 nolu girişlere bakıyor. Bu nedenle max. 4 bitlik bilgi gelebiliyor. Bu da 16 sınırını açıklamış oluyor. Ben hep tüm portu kontrol ediyor diye düşünmüştüm.

Dosya ve açıklamalar için teşekkürler.
Selam