Tek buton ile led animasyonları değiştirmek ?

Başlatan Arif_87, 20 Ağustos 2011, 13:15:42

Arif_87

Arkadaşlar tek buton kullanarak butona her bastığım led animasyon değişmesini istiyorum. Basılmadığında ise hengi animasyonda kaldıysa sürekli devam etsin. Foruma baktım birkaç uygulama buldum fakat beceremedim işin çok başındayım ve kitapları kurcalıyorum ufak tefek uygulamalar yapmaya çalışıyorum led animasyonile ilgili uygulama: butona bastığımda bir defa yanıp kalıyor yardımlarınızı bekliyorum...

TrisB=%00000000
TrisA=%11111111
PortB=0
Tus var PortA.0
SIRA var byte
SIRA=0

Basla:
IF TUS=0 THEN
SIRA=SIRA+1
IF SIRA>3 then SIRA=0
WHILE TUS=0:WEND
ENDIF

SELECT CASE SIRA
CASE 0
Goto Animasyon_Bir
Case 1
Goto Animasyon_Iki
Case 2
Goto Animasyon_Uc
case 3
goto Animasyon_dort
Goto basla

Animasyon_bir:
    PortB=%00001111
    PAUSE 60   
    PortB=%00000000
    PAUSE 60
    PortB=%00001111
    PAUSE 60
    PortB=%00000000
    PAUSE 60
    PortB=%00001111
    PAUSE 60
    PortB=%00000000
    PAUSE 60
    PortB=%11110000
    PAUSE 60
    PortB=%00000000
    PAUSE 60
    PortB=%11110000
    PAUSE 60
    PortB=%00000000
    PAUSE 60
    PortB=%11110000
    PAUSE 60
    PortB=%00000000
    PAUSE 70
    goto basla
Animasyon_iki:

    PortB=%11111111
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%11111111
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%11111111
    PAUSE 50
    PortB=%00000000
    PAUSE 1000
    goto basla

Animasyon_uc:
    PortB=%11111111
    PAUSE 250
    PortB=%00000000
    PAUSE 250
    PortB=%11111111
    PAUSE 250
    PortB=%00000000
    PAUSE 1000
    goto basla

Animasyon_dort:
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00011000
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00011000
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00011000
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    goto basla
End Select

satilla

son kaldığı yeri bir değişkene atayıp onuda eeproma kaydetmelisin

subram

programda kullandığın etiketlerde büyük-küçük harf farkları var. onları düzelt
select case komutunun sonuna koyman gereken end select komutu programın sonunda. bunu düzelt.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

Arif_87

Programın nerde kaldığı benim için önemli değil. Animasyonu değiştermek için butona bir defa bastığımda hemen algılama yapmıyor. 3 sn kadar basılı tutmam gerekiyor. Benim istediğim butona dokunduğumda animasyon hemen değişmeli...

bybik

TrisB=%00000000
TrisA=%11111111
PortB=0
Tus var PortA.0
SIRA var byte
SIRA=0

Basla:
IF TUS=0 THEN 
SIRA=SIRA+1
IF SIRA>3 then SIRA=0
WHILE TUS=0:WEND
ENDIF

SELECT CASE SIRA
CASE 0
Goto Animasyon_Bir
Case 1
Goto Animasyon_Iki
Case 2
Goto Animasyon_Uc
case 3
goto Animasyon_dort
End Select

Goto basla

Animasyon_bir: 
    PortB=%00001111
    PAUSE 60    
    PortB=%00000000
    PAUSE 60
    PortB=%00001111
    PAUSE 60
    PortB=%00000000
    PAUSE 60
    PortB=%00001111
    PAUSE 60
    PortB=%00000000
    PAUSE 60 
    PortB=%11110000
    PAUSE 60
    PortB=%00000000
    PAUSE 60
    PortB=%11110000
    PAUSE 60
    PortB=%00000000
    PAUSE 60
    PortB=%11110000
    PAUSE 60
    PortB=%00000000
    PAUSE 70
    goto basla
Animasyon_iki:
 
    PortB=%11111111
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%11111111
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%11111111
    PAUSE 50
    PortB=%00000000
    PAUSE 1000
    goto basla

Animasyon_uc:
    PortB=%11111111
    PAUSE 250
    PortB=%00000000
    PAUSE 250
    PortB=%11111111
    PAUSE 250
    PortB=%00000000
    PAUSE 1000
    goto basla

Animasyon_dort:
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50 
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50 
    PortB=%00011000
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00011000
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00011000
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%00100100
    PAUSE 50
    PortB=%00000000
    PAUSE 50 
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%01000010
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    PortB=%10000001
    PAUSE 50
    PortB=%00000000
    PAUSE 50
    goto basla


Birde böyle dene çalışması lazım.Picpasicde sanırım büyük küçük harf sorun olmuyordu.

Arif_87

Halen daha butona uzun süreli basmam gerekiyor. Bu aradaki  pause' lardan kaynaklanıyor sanırım. Bu sorunun yokmudur çözümü :) Kesme uygulayarak yapılabilirmi?

bybik

Evet eğer işlemcinin çabuk tepki vermesini istiyorsanız kesme kullanmanız gerekir.Ete hocanın portb değişiklik kesmesi ile ilgili bir dersi vardı isterseniz bir göz atın.  http://etepic.com/?p=122

Arif_87

Peki bu programı nasıl kesme kullanara yapabiliriz?

subram

ledleri portbye bağlaman şart değilse, butonu RB0/INT bacağına bağla. butona bastığın an program kesmeye gider.

edit:RB0/INT kesmesini aktif etmen lazım
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

ehliseyf

En basit şekli ile kesme kullanmak zorundasınız yoksa uzun bir kod gerekebilir.Kesmeler aktif oldugunda ise değişkeni artırıp diger case içine alabilrsiniz.aynı anda eeprom a kayıt eder kaldıgınız yeri bilirsiniz.oradan devam edersiniz.
Code'm mu oturturum !

ete

#10
İllaki Kesme kullanmak gerekmez. Aşağıdaki çözüm işinize yarayabilir. Süreleri kısaltarak araya tuş kontrolünü eklersiniz olur biter.
Bu şekilde animasyon devam ederken tuşa basılırsa animasyon konum değiştirmez ancak yaptığı iş bitince değişir.
Bundan fazlası da yapılabilir.  Animasyon devam ederken tusa basılırsa Animasyon değeri değişir ve o anda sürdürlülen animasyondan çıkılarak yenisine gidilebilir. Bunun için bir işaret  (bit bazında) değişkeni daha kullanmak gerekir.

Ete

TrisB=%00000000
TrisA=%11111111
PortB=0
Tus var PortA.0
SIRA var byte
I    var word
SIRA=0

Basla:
GOSUB TUSBAK

SELECT CASE SIRA
CASE 0
Goto Animasyon_Bir
Case 1
Goto Animasyon_Iki
Case 2
Goto Animasyon_Uc
case 3
goto Animasyon_dort
End Select

Goto basla

Animasyon_bir: 
    PortB=%00001111
    GOSUB ALTMIS    
    PortB=%00000000
    GOSUB ALTMIS
    PortB=%00001111
    GOSUB ALTMIS
    PortB=%00000000
    GOSUB ALTMIS
    PortB=%00001111
    GOSUB ALTMIS
    PortB=%00000000
    GOSUB ALTMIS 
    PortB=%11110000
    GOSUB ALTMIS
    PortB=%00000000
    GOSUB ALTMIS
    PortB=%11110000
    GOSUB ALTMIS
    PortB=%00000000
    GOSUB ALTMIS
    PortB=%11110000
    GOSUB ALTMIS
    PortB=%00000000
    GOSUB ALTMIS
    goto basla
Animasyon_iki:
 
    PortB=%11111111
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%11111111
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%11111111
    GOSUB ELLI
    PortB=%00000000
    GOSUB DELAY_BIN
    goto basla

Animasyon_uc:
    PortB=%11111111
    GOSUB IKIYUZELLI
    PortB=%00000000
    GOSUB IKIYUZELLI
    PortB=%11111111
    GOSUB IKIYUZELLI
    PortB=%00000000
    GOSUB DELAY_BIN
    goto basla

Animasyon_dort:
    PortB=%10000001
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%10000001
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%10000001
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI 
    PortB=%01000010
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%01000010
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%01000010
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00100100
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00100100
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00100100
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI 
    PortB=%00011000
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00011000
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00011000
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00100100
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00100100
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%00100100
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI 
    PortB=%01000010
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%01000010
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%01000010
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%10000001
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%10000001
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    PortB=%10000001
    GOSUB ELLI
    PortB=%00000000
    GOSUB ELLI
    goto basla

TUSBAK:
     IF TUS=0 THEN 
       SIRA=SIRA+1
       IF SIRA>3 then SIRA=0
       WHILE TUS=0:WEND
     ENDIF
     RETURN

ELLI:
       for I=1 to 50
         PAUSE 1
         GOSUB TUSBAK
       NEXT  
       RETURN     

ALTMIS:
       for I=1 to 60
         PAUSE 1
         GOSUB TUSBAK
       NEXT  
       RETURN  
       
IKIYUZELLI:
       FOR I=1 to 250
         PAUSE 1
         GOSUB TUSBAK
       NEXT
       RETURN
       
DELAY_BIN:
       FOR I=1 to 900
         PAUSE 1
         GOSUB TUSBAK
       NEXT
       RETURN
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Arif_87

Yardımlarınız için teşekkür ederim. Ete bey ayrıca açıklamalı cevabınız için ayrıcalıklı teşekkürümü sunarım ...