butonu islevsel kilma

Başlatan selvi, 24 Ekim 2008, 20:23:41

selvi

IF PORTB.1=0 THEN            
       LCDOUT $FE,1,"KANAL"
           SAY=SAY+1
           PAUSE 200
       LCDOUT $FE,$C0,"SAY=",#SAY
       ENDIF
yukardaki program her butona basildginda say degiskeni 1 artiyor.ben ayni butona 500ms fazla basildiginda say=say+10 seklinde artirmasini 200ms basilip birakildiginda 1 artmasini saglamak icin programda nasil bir degisiklik yapmam uygun olur.
Yaşam anlamlandırıldıkça kutsaldır....

Tagli

IF PORTB.1=0 THEN
     WHILE PORTB.1=0
          PAUSE(10)
          SURE=SURE+1
     WEND
ENDIF

IF SURE < 20 THEN
     SAY=SAY+1
ELSE
     SAY=SAY+10
ENDIF

LCDOUT $FE,1,"KANAL"
PAUSE 200
LCDOUT $FE,$C0,"SAY=",#SAY


PicBasic kullanmayalı baya oldu, syntax hatası yaptıysam affola... Bekleme 10 ms olmak zorunda değil, azaltırsan daha hassas olabilir ama fazla azaltırsan SAYI değişkeni taşıp hatalı sonuç almana sebep olabilir. Eğer 10 yerine mesela 200 kullanırsan düğmeye tepkiyi geciktirmiş olursun.
Gökçe Tağlıoğlu

selvi

hocam direk olmadi.bazi degisikler yaptim istedigim gibi olmadi.200ms fazla basili tutulgunda  10 ar ar artsin.200ms daha fazla belli sure surekli basili tutuldugunda 10 ar ar ust uste artmali.tabi 200ms az ise 1 er er artsin.
Yaşam anlamlandırıldıkça kutsaldır....

Tagli

DONGU:

WHILE (PORTB.1=0) AND (SURE<200)
     PAUSE 1 
     SURE=SURE+1
WEND

IF SURE = 200 THEN UZUN = 1

IF SURE != 0 THEN
     IF (SURE < 200) AND (UZUN = 0) THEN
          SAY=SAY+1
     ELSE
          SAY=SAY+10
     ENDIF
     LCDOUT $FE,1,"KANAL"
     LCDOUT $FE,$C0,"SAY=",#SAY
ELSE
     UZUN = 0
ENDIF

SURE=0
GOTO DONGU

Bu yazdığım biraz sakat gibi ama denemeye değer...
Gökçe Tağlıoğlu

Maxim

böyle birşey yaptım ama fazla deneyemedim ,
butona her basmada zaman değeri 1 artıyor ,
elinizi bir süre basılı tutarsanız değer 10 ar artıyor


Loop: 

Say = 0 

If PORTA.0 =0 Then
Pause 50

While PORTA.0=0
Say = Say + 1
Pause 50
If Say=20 Then  'elini basılı tutma süre ayarı
Zaman = Zaman +10    
Say = 0
EndIf
Wend  

Zaman = Zaman +1
EndIf

GoTo Loop

Maxim

tamamdır ..

A noktası :
burada butona bastıktan ne kadar süre sonra
zaman değeri 1 artsın ? onu ayarlıyoruz ,
aşağıda 10 değeri var ,bunu 20 yaparsak biraz daha gecikme olacak .

Butona bastık -> gecikme süresi (a noktası) -> elimizi çektik .
gecikme süresini aştıktan sonra elimizi çekersek zaman değeri 1 artacaktır ama gecikme süresinden önce çekersek değer artmaz .

B değeri :
burada ,A noktasından sonra ,
ne kadar süre elimizi butonun üzerinde tutarsak değer
10 ar 10 ar artsın onu ayarlıyoruz ,

C noktası :
burada elimizi bastığımız sürece değer 10 ar 10 ar artacak ,
onun hızını ayarlıyoruz ,saniyede 1 kere mi artsın ? 2 saniyede 1 keremi ?
saniyede 10 keremi ?

' PortA.0 +5 volta pull-up

Loop: '------------------------------------------
If PORTA.0 =1 Then 
Zaman = Zaman + Temp
Say =0
Temp =0
EndIf

If PORTA.0 =0 Then
Pause 50
Say = Say +1 

If Say = 10 Then  '(A NOKTASI) 1 artış için gecikme süresi. 
Temp = 1
EndIf

If Say > 20 Then  '(B NOKTASI) Ne kadar bekledikten sonra zaman değeri 10 artmaya başlasın ?
Temp= 0
Say = 0 
While PORTA.0 = 0 
Pause 1000      '(C NOKTASI) Gecikme, 1 saniyede zaman değeri 10 birim artar,
                  'delayms 2000 her 2 saniyede zaman değeri 10 birim artar . 
Zaman = Zaman +10    
Wend
EndIf

EndIf  

GoTo Loop '----------------------------------------