Arkadaşlar Merhaba,
Başladığım bir projede kontrol olarak sadece butonlu bir encoder, çıktı olarak da 4x20 LCD kullanıyorum. Bu nedenle butona birden fazla görev eklemem lazım. Butona bir kere basınca ayar menüsünde encoder ile ileri geri gezmek, ilgili menüdeyken butonla menu içine girip ayarları yapmak ayar ekranında da butona basılı tutulduğunda da menüye geri dönmek istiyorum. İşte tam burada sorun yaşıyorum. butona basılı tutunda MENU_SEC etiketinde de butonun durumunu kontrol ettiği için aynı yere geri dönüyor. WHILE SW=0 : WEND gibi birşey yazınca da butona basıldığında etiket içerisinde beklediği için tekrar butona basıldığında menuye geçmiyor.
Kodlardaki ART=1 olursa encoder bir tık hareket etti demek, YON=0 ise sağa, YON=1 ise sola demek, CLS etiketi ekranı temizliyor.
Şu anda sadece bir tane menü yapmaya çalışıyorum, AYAR1 etiketinde butona kısa basılırsa flagi 1 ya da 0 yaparak, farklı değişkenlerin değerlerini ayarlıyorum. O kısımda sorun yok tek sorun AYAR1 etiketinde butona fazla basılı tutulursa MENU_SEC etiketine dönmede bu konuda yardımlarınızı rica ederim.
MENU_SEC:
IF YON=0 AND ART=1 THEN
MENU=MENU+1 : IF MENU=5 THEN MENU=0
ART=0 : GOSUB CLS
ENDIF
IF YON=1 AND ART=1 THEN
MENU=MENU-1 : IF MENU=255 THEN MENU=4
ART=0 : GOSUB CLS
ENDIF
SELECT CASE MENU
CASE 0
GOSUB MENU0
CASE 1
GOSUB MENU1
IF SW=0 THEN : GOSUB CLS : GOTO AYAR1
CASE 2
GOSUB MENU2
CASE 3
GOSUB MENU3
CASE 4
GOSUB MENU4
END SELECT
GOTO MENU_SEC
'-------------------------------------------------------------------------------
MENU1:
LCDOUT $FE,$80," KARISTIRICI DONME"
LCDOUT $FE,$C0," HIZI AYARLARI"
LCDOUT $FE,$D4," ",1," OK ",2
RETURN
'-------------------------------------------------------------------------------
AYAR1:
LCDOUT $FE,$80," DONME HIZI(%)"
IF SW=0 THEN
WHILE SW=0
CNT=CNT+1 : FOREND=1250 : GOSUB DELAY
IF CNT>1000 THEN CNT=0 : GOSUB CLS : GOTO MENU_SEC
WEND
TOGGLE MENU_F
ENDIF
IF MENU_F=0 THEN
LCDOUT $FE,$C0,0,"ALT KRS=%",DEC3 DUTYA
LCDOUT $FE,$94," UST KRS=%",DEC3 DUTYB
IF YON=0 AND ART=1 THEN
DUTYA=DUTYA+1 : ART=0 : IF DUTYA=101 THEN DUTYA=100
ENDIF
IF YON=1 AND ART=1 THEN
DUTYA=DUTYA-1 : ART=0 : IF DUTYA=255 THEN DUTYA=0
ENDIF
ELSE
LCDOUT $FE,$C0," ALT KRS=%",DEC3 DUTYA
LCDOUT $FE,$94,0,"UST KRS=%",DEC3 DUTYB
IF YON=0 AND ART=1 THEN
DUTYB=DUTYB+1 : ART=0 : IF DUTYB=101 THEN DUTYB=100
ENDIF
IF YON=1 AND ART=1 THEN
DUTYB=DUTYB-1 : ART=0 : IF DUTYB=255 THEN DUTYB=0
ENDIF
ENDIF
GOTO AYAR1
'-------------------------------------------------------------------------------
Çıkışta yarım sn bekleme koy.
.
aşağıdaki şekilde
Menü içinde butona 1 sn basılı tutulur ise menü seç etiketine gider
eğer sadece basıp bırakılırsa menü içinde ne yapılması isteniyorsa o yapılır
IF SW=0 THEN
WHILE SW=0
SURE=SURE+1:PAUSE 10
IF SURE>100 THEN MENU_SEC
WEND
BURADA MENÜ İÇİNDE YAPILACAK İŞLEM
ENDIF