Ledin 3dk Boyunca Yanmasını Nasıl Sağlarım?

Başlatan Sıfır, 10 Temmuz 2014, 13:37:16

efehurkan

Hocam burada butona her  basıldığında +3dk daha  ledin geç sönmesini eklemek  isteseydik nasıl olmalıydı acaba?

ete

#16
Üzerinde düşünmek gerekir . İlk aklıma gelen sayacı eksilen sayac şeklinde çalıştırmak ve her basışta sayac değerini 3 dak artırmak şeklinde olabilir diye düşündüm. Başka yollarda bulunabilir.
Şöyle bir mantık işini görebilir sanırım.
BAS:

IF TUS=0 THEN
SURE=SURE+180
LED=1
SAY=1'bu işaret biti
'SAYIM=0      ' EĞER TEKRAR BUTONA BASTIĞINIZDA SÜREYİ SIFIRLAMAK İSTERSENİZ BUNU EKLEYEBİLİRSİNİZ.
ENDIF

IF SAY=1 THEN
   SURE=SURE-1
   PAUSE 1000
   IF SURE=0 THEN     
      LED=0
      SAY=0
      sure=0
   ENDIF
ENDIF

GOTO BAS

END


Ete

efehurkan

Hocam  tuşa her basıldığında +4 saniye daha ekleyemiyorum, yapmak istediğim tuşa her basıldığında ledin yanmasına + süreyi eklemek.


@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF & _BODEN_OFF & _PWRTE_ON

DEFINE OSC 4

CMCON=7
TRISA=%11111111
TRISB=%00000000
PORTA=0
PORTB=0
LED VAR PORTB.0
TUS VAR PORTA.0
SURE VAR BYTE
SAY VAR BYTE
BAS:

IF TUS=0 THEN
SURE=SURE+3
LED=1
SAY=1'bu işaret biti
'SAYIM=0      ' EĞER TEKRAR BUTONA BASTIĞINIZDA SÜREYİ SIFIRLAMAK İSTERSENİZ BUNU EKLEYEBİLİRSİNİZ.
ENDIF

IF SAY=1 THEN
   SURE=SURE-1
   PAUSE 1000
   IF SURE=0 THEN     
      LED=0
      SAY=0
      sure=0
   ENDIF
ENDIF

GOTO BAS

END

ete

#18
Sure=sure+3 yarine +4 yazacaksın hepsi bu.
Eklenen saniyedir. Dakika eklemek istersen he dakika için 60 , 4 dakika için 240 eklemen gerekir. Dakika eklenecek ise Sure değişkeni word tipinde olmalıdır. Aksi halde limit olan 255 değeri aşılacaktır. Aşılırsa ne olur? şu olur diyelimki süre=180 idi sen 4 dakika daha ilave ettin 180+240=420 edecktir . Sure değişkeni Byte cinsinden ise SURE=420-256=164 değerini alacaktır. Böylece önceden 180 olan ama artsın diye 4 dakika daha eklediğin değer 160 a düşecektir. Bu nedenle değişken tiplerine dikkat etmek ve limitlere göre tip belirlemek gerekir. Unutmayın Byte değişkeni en fazla  255 değerini alabilir. Word değişkeni 65535 alabilir.

Ete

efehurkan

Hocam fakat simulasyonda butona her butona basıldığında + süre eklendiğini göremiyorum, butona 3 kez basılsada led 4sn sonra sönmektedir.

ete

#20
Sebebi gayet  açık. Her saymadan sonra pause 1000 komutu işleniyor. O esnada sende tusa basarsan basılmayı göremiyor. Elini tusun üzerinde 1000 ms den fazla tutarsan tek basışta istediğin olur 
Daha da iyi bir akıl istersen oradaki beklemeyi 1000 değil 100 yap. Program oraya her gelişinde SN isimli bir başka sayacı saydır ve Sn=10 olunca sure=sure-1 yap. Böylece tuşları kontrol etme sıklığın 100 ms ye ye düşerki bu mantıklı bir süredir ve basar basmaz tuşun basıldığı görülür.

Ete

Powered by EzPortal