Karaşimşek

Başlatan piko, 10 Nisan 2018, 16:10:57

piko

Arkadaşlar 16f628a de 4 kanallı rf alıcı verici ile kara şimşek devresi yapmaya çalışıyorum. Şuan için isis üzerinde rf yerine butonlarla yapmayı deniyorum sorun şu ki 1. butona bastığımda ledler üzerinde istediğim animasyon oluşuyor ardından 2.butona bastığımda diğer animasyon oluşması gerekirken hala 1.butondaki animasyon devam ediyor. Similasyonu durdurup başlatdığımda 2.butona bastığımda istediğim animasyon oluşuyor 3.butona bastığımda yine aynı 2.butondaki animasyon devam ediyor.

Bu arada neredeyse konu hakkında hiçbir bilgim yok yani söyleyeceğiniz şeyleri anlamayabilirim  :)

Devre ile ilgili fotoğraflar
Kullanacağım rf alıcı verici https://i.hizliresim.com/D7003Z.jpg

Devre https://i.hizliresim.com/BL55vV.png

Program https://i.hizliresim.com/oORRj7.pnghttps://i.hizliresim.com/gOJJqb.png - https://i.hizliresim.com/Oopp0P.png

Program :
TRISA=%11111111
TRISB=%00000000
PORTB=0
I VAR BYTE
CMCON=7


OKU:
IF PORTA.3=1 THEN GOTO HEPSI
IF PORTA.2=1 THEN GOTO ORTA
IF PORTA.1=1 THEN GOTO DON
IF PORTA.0=1 THEN
GOTO SAG
ELSE
GOTO OKU
ENDIF


SAG:
PORTB.0=1
SAGADONDUR:
PAUSE 250
PORTB=PORTB<<1
IF PORTB.7=1 THEN GOTO SOLAKAYDIR
GOTO SAGADONDUR
SOLAKAYDIR:
PAUSE 250
PORTB=PORTB>>1
IF PORTB.0=1 THEN GOTO SAGADONDUR
GOTO SOLAKAYDIR

DON:
FOR I=250 TO 250
PORTB=%00000001
PAUSE I
PORTB=%00000011
PAUSE I
PORTB=%00000111
PAUSE I
PORTB=%00001110
PAUSE I
PORTB=%00011100
PAUSE I
PORTB=%00111000
PAUSE I
PORTB=%01110000
PAUSE I
PORTB=%11100000
PAUSE I
PORTB=%11000000
PAUSE I
PORTB=%10000000
PAUSE I
PORTB=%11000000
PAUSE I
PORTB=%11100000
PAUSE I
PORTB=%01110000
PAUSE I
PORTB=%00111000
PAUSE I
PORTB=%00011100
PAUSE I
PORTB=%00001110
PAUSE I
PORTB=%00000111
PAUSE I
PORTB=%00000011
PAUSE I
PORTB=%00000001
NEXT I
GOTO DON

ORTA:
FOR I=250 TO 250
PORTB=%10000001
PAUSE I
PORTB=%01000010
PAUSE I
PORTB=%00100100
PAUSE I
PORTB=%00011000
PAUSE I
PORTB=%00100100
PAUSE I
PORTB=%01000010
PAUSE I
PORTB=%10000001
PAUSE I
NEXT I
GOTO ORTA

HEPSI:
PORTB=%11111111
END

ete

Bizde senin söylediklerini anlamadık zaten. Bir şey istememişsin. Sanki bilgi vermek maksadı ile bu mesajı yazmışsın doğrumudur? Bilgiye ihtiyaç yoktu.
Anlamadığım birde şu var,
FOR I=250 TO 250
bu bir döngü komutu ama 250 den 250 ye döngü kurulmamış oluyor.

Ayrıca şayet sorun animasyon değiştirememen ise bunun sebebi Pause komutlarıdır.
Çünki pause devam ederken program tuşları kontrol edemez.
Çare kısa gecikmelerle dolu döngüsel pause ler kullanmak.
Mesela örnek vereyim,
Pause 250 yerine;
FOR Z=0 to 250
  Pause 1
next
Bu döngünün içinede beklediğin tuş kontrolünü sokarsan kolaylıkla döngüden çıkarsın.
Birisini ben yapayım diğerlerini sen yap istersen,
SAG:
PORTB.0=1
SAGADONDUR:
FOR Z=1 to 250
  PAUSE 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
NEXT

PORTB=PORTB<<1
IF PORTB.7=1 THEN GOTO SOLAKAYDIR
GOTO SAGADONDUR

Kısaca bir animasyon seçildiği zaman seni oradan başka bir animasyona yönlendirecek tuş kontrolü eklenmemiş programına. Bu eklenmeyincede sen tuşa basmış olsan bile onu anlayacak kod olmadığı için programın yön değiştirmiyor.
Birini ekledim. Diğerlerini kendin yaparsın artık.

Ete

piko

#2
Alıntı yapılan: ete - 10 Nisan 2018, 19:44:46
Bizde senin söylediklerini anlamadık zaten. Bir şey istememişsin. Sanki bilgi vermek maksadı ile bu mesajı yazmışsın doğrumudur? Bilgiye ihtiyaç yoktu.
Anlamadığım birde şu var,
FOR I=250 TO 250
bu bir döngü komutu ama 250 den 250 ye döngü kurulmamış oluyor.

Ayrıca şayet sorun animasyon değiştirememen ise bunun sebebi Pause komutlarıdır.
Çünki pause devam ederken program tuşları kontrol edemez.
Çare kısa gecikmelerle dolu döngüsel pause ler kullanmak.
Mesela örnek vereyim,
Pause 250 yerine;
FOR Z=0 to 250
  Pause 1
next
Bu döngünün içinede beklediğin tuş kontrolünü sokarsan kolaylıkla döngüden çıkarsın.
Birisini ben yapayım diğerlerini sen yap istersen,
SAG:
PORTB.0=1
SAGADONDUR:
FOR Z=1 to 250
  PAUSE 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
NEXT

PORTB=PORTB<<1
IF PORTB.7=1 THEN GOTO SOLAKAYDIR
GOTO SAGADONDUR

Kısaca bir animasyon seçildiği zaman seni oradan başka bir animasyona yönlendirecek tuş kontrolü eklenmemiş programına. Bu eklenmeyincede sen tuşa basmış olsan bile onu anlayacak kod olmadığı için programın yön değiştirmiyor.
Birini ekledim. Diğerlerini kendin yaparsın artık.

Ete

Aynen hocam sorunum animasyon değiştiremem ama diğerlerini yapamadım. Sizin verdiğiniz kodlar ile 1.animasyonda iken diğer animasyonlara gidebiliyorum ama diğerlerinde kod yazılı olmadığı için dönüş yapamıyorum. Similasyonu durdurup başlattığımda (Sizin verdiğiniz kodları örnek alarak yaptığım kodlar ile) 4.animasyondan 1.animasyon hariç diğer animasyonlara gidebiliyorum. 2. ve 3. animasyonlarda ise hiç çalıştıramadım.
(Yapamama sebebim kodları tam olarak nereye yazacağımı bulamadığımdan da olabilir.)

ete

Anlaşılan Program yazma ile yakından uzaktan bir alakan yok ama her ne hikmet ise bu sisteme ihtiyacın var.
Gecikme olmadan animasyon değiştirebilmen için mutlaka gecikme komutlarını küçük dilim (pause 1) şeklinde kullanıp döngü ile çoğaltman ama arayada animasyon değiştirmeyi sağlayan tuş kontrol komutlarını eklemen gerekiyor. Bunuda her animasyon bölümünde gecime komutlarının yerine kullanman gerekiyor.
Aşağıdaki örnekte olduğu gibi. Bu en basit istediğini veren bir programdır.
Daha doğru ve kısa bir program yazmak için sıklıkla tekrarlanan komutları yalnızca bir adede düşürüp alt program haline getirmek ve orada kontrolü yaptıktan sonra dönüşte tuşa basılmışmı anlayarak ona göre ilgli etikete gitmek lazım. Boşuna anlatıyorum ama en azından bir başkasının işine yarar diye düşünüyorum.

TRISA=%11111111
TRISB=%00000000
PORTB=0
I VAR BYTE
Z var Byte
CMCON=7


OKU:
IF PORTA.3=1 THEN GOTO HEPSI
IF PORTA.2=1 THEN GOTO ORTA
IF PORTA.1=1 THEN GOTO DON
IF PORTA.0=1 THEN GOTO SAG

GOTO OKU



SAG:
PORTB.0=1
SAGADONDUR:
FOR z=1 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
Next   
PORTB=PORTB<<1
IF PORTB.7=1 THEN GOTO SOLAKAYDIR
GOTO SAGADONDUR
SOLAKAYDIR:
FOR z=1 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
Next
PORTB=PORTB>>1
IF PORTB.0=1 THEN GOTO SAGADONDUR
GOTO SOLAKAYDIR

DON:
I=250
PORTB=%00000001
FOR z=1 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000011
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000111
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00001110
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00011100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00111000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01110000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11100000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11000000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%10000000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11000000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11100000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01110000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00111000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00011100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00001110
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000111
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000011
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA 
  IF PORTA.0=1 THEN GOTO SAG
Next

GOTO DON

ORTA:
I=250
PORTB=%10000001
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01000010
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00100100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00011000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00100100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01000010
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%10000001
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
GOTO ORTA

HEPSI:
PORTB=%11111111
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
goto HEPSI
END


Ete

piko

Alıntı yapılan: ete - 11 Nisan 2018, 09:17:40
Anlaşılan Program yazma ile yakından uzaktan bir alakan yok ama her ne hikmet ise bu sisteme ihtiyacın var.
Gecikme olmadan animasyon değiştirebilmen için mutlaka gecikme komutlarını küçük dilim (pause 1) şeklinde kullanıp döngü ile çoğaltman ama arayada animasyon değiştirmeyi sağlayan tuş kontrol komutlarını eklemen gerekiyor. Bunuda her animasyon bölümünde gecime komutlarının yerine kullanman gerekiyor.
Aşağıdaki örnekte olduğu gibi. Bu en basit istediğini veren bir programdır.
Daha doğru ve kısa bir program yazmak için sıklıkla tekrarlanan komutları yalnızca bir adede düşürüp alt program haline getirmek ve orada kontrolü yaptıktan sonra dönüşte tuşa basılmışmı anlayarak ona göre ilgli etikete gitmek lazım. Boşuna anlatıyorum ama en azından bir başkasının işine yarar diye düşünüyorum.

TRISA=%11111111
TRISB=%00000000
PORTB=0
I VAR BYTE
Z var Byte
CMCON=7


OKU:
IF PORTA.3=1 THEN GOTO HEPSI
IF PORTA.2=1 THEN GOTO ORTA
IF PORTA.1=1 THEN GOTO DON
IF PORTA.0=1 THEN GOTO SAG

GOTO OKU



SAG:
PORTB.0=1
SAGADONDUR:
FOR z=1 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
Next   
PORTB=PORTB<<1
IF PORTB.7=1 THEN GOTO SOLAKAYDIR
GOTO SAGADONDUR
SOLAKAYDIR:
FOR z=1 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
Next
PORTB=PORTB>>1
IF PORTB.0=1 THEN GOTO SAGADONDUR
GOTO SOLAKAYDIR

DON:
I=250
PORTB=%00000001
FOR z=1 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000011
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000111
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00001110
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00011100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00111000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01110000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11100000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11000000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%10000000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11000000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%11100000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01110000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00111000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00011100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00001110
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000111
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00000011
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.2=1 THEN GOTO ORTA 
  IF PORTA.0=1 THEN GOTO SAG
Next

GOTO DON

ORTA:
I=250
PORTB=%10000001
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01000010
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00100100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00011000
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%00100100
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%01000010
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
PORTB=%10000001
FOR z=0 to 250
  pause 1
  IF PORTA.3=1 THEN GOTO HEPSI
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
Next
GOTO ORTA

HEPSI:
PORTB=%11111111
  IF PORTA.2=1 THEN GOTO ORTA
  IF PORTA.1=1 THEN GOTO DON
  IF PORTA.0=1 THEN GOTO SAG
goto HEPSI
END


Ete
Sanırım kafamda birşeyler oluşmaya başladı ama bu programda butonlara sırayla bastığımda 2. ve 3. butondaki animasyonlar takılıyor 4.butona bastığımda ise bütün ledler yanıp sönmeye başlıyor sanırım eski bastığım butonlar sıfırlanmıyor. Butonları nasıl sıfırlayabilirim ? Döngü başlarına PORTA=0 yazdığım halde olmadı.

ete

Senin için 2. ve 3. buton hangisidir?. Animasyon ismi üzerinden konuşsan daha doğru olmazmı.
Bundan sonrası için kafanı ve aklını biraz zorlaman gerekecek. Her şeyi benden bekleme. Zaten beklediğinden fazlasını verdim. hazır iş vermeyi hiç sevmem. Bu nedenle biraz kafa yormanı bekliyorum.
Zaten ne söylediğinde anlaşılmıyor. Eski bastığın buton bırakınca sıfırlanıyor zaten. Butonun görevi seni bir yere yönlendirmek basınca da işini yapıyor. Ancak doğru programda butonun bırakılmasıda kontrol edilir. Bastın basıldığını algıladın. Şimdide bırakılmasını beklemen gerek. Ondan sonra nereye gidecek isen oraya gideceksin.
Bırakılmasını beklemez isen gittiğin yerde aynı butona basılı olarak yakalanman yanlış bir sonuca sebep olabilir.
Bana kalırsa her animasyonunbaşına PORTB=0 komutunu ekle. Böylece her animasyon sıfırdan başlar belki istediğin yerine gelir.

Ete

ete

#6
Aslında şema na bakınca asıl sorunun buton sistemin olduğunu görüyorum. Butonların bağlantı şekli yanlış.
Bir işlemciye bağlanmış buton pinlerinin bir tarafa (HIGH yada LOW) çekilmiş olması gerekir ve butona basınca aynı pine tersi verilerek işlemcinin o butona basıldığını anlaması sağlanır.
Bir Buton pininin LOW a çekilmesi ne anlama geliyor. ? Buton pininin Bir direnç ile GND ye bağlanması anlamına gelir. Böylece boşta beklerken o buton LOW da beklemiş olur. Butona basınca aynı pine HIGH (+5V) uygulanır ise işlemci farkı hemen anlar ve o butona basıldığını tespit etmesi sağlanır. Bir tarafa çekilmemiş buton float dediğimiz ortalıkta gezinme yapar.Kafası eserse HIGH da durur kafası eserse LOW da durur. Senin bağlantı şeklinde bu şekilde yapılmış. Buton pinlerine seri bağlı 10K dirençleri kaldır. Onun yerine her bir pini 10K ile GND ye bağla. Pinlere buton da bağla ve butonun diğer ucu +5V da olsun. Programın bu şekilde çünki.

Diğer bir sorun da ilk animasyona (SAG) PORTB.0=1 şeklinde başlamış olman. Bu şekilde başlayabilmen için PORTB nin önce sıfırlanması gerekir. Aksi halde portb de yanlış ledler yanıp sönmeye başlayabilir. Bu nedenle bu komut PORTB=%00000001 şeklinde değiştirilmesi gerekir.

Ete

Powered by EzPortal