Menü geçişlerini yapamıyorum

Başlatan erdemefe, 22 Şubat 2015, 12:30:20

erdemefe

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
'-------------------------------------------------------------------------------

selimkoc

Çıkışta yarım sn bekleme koy.

certy

#2
.
TA1USS

proteus59

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