Tek Tuş ile Fonksiyon Seçimi

Başlatan veli, 01 Mayıs 2017, 15:36:37

veli

arkadaşlar 1 adet rölem var tuşa her bastığımda programda belirlediğim süreler boyunca açıp kapatacak mesela
prog_1:
high role
pause 1000
low role

prog_2:
high role
pause 2000
low role

prog_3:
high role
pause 3000
low role

prog_1 i icra edince bekleyecek tuşa tekrar basınca kaldığı yerden yani prog_2 den devam edecek
case ve select komutlarıyla yapılabiliyor anladığım kadarıyla fakat örneklere baktım anlayamadım yardımcı olabilirmisiniz

ete

Önce basılan tuşu algılayıp seçim değerini bir artıracak bir bölüm olmalı ancak bu bölüm aynı zamanda beklemeyi sona erdireceği için bir alt  program şeklinde olmalı ve oraya GOSUB ile gidilmeli.
Nasıl olacağı aşağıda. Tam detayı vermiyorum sen ayarlayacaksın.

TUSBAK:
IF TUS=1 (veya=0) Then
  SIRA=SIRA+1
IF SIRA > 3
  WHILE TUS=1:WEND
  PAUSE 100
ENDIF


SIRA yada hangi programın seçileceği belli olduktan sonra sıra seçilen programa göre kod icra etmekte onuda aşağıdaki şekilde yapıyorsun.

SELECT CASE SIRA
  CASE 0
high role
pause 1000
low role 
goto bekle

case 1
high role
pause 2000
low role
goto bekle
...
...
end select
bekle:
gosub tusbak
goto basla


veli

Hocam şu şekilde yaptım uğraştım biraz sildim yazdım ama olmadı led direkt yanıyor :-[
GPIO=0
SYMBOL LED=GPIO.0
SYMBOL TUS=GPIO.1
SIRA VAR BYTE
LED=0

BASLA:
IF TUS=1 THEN GOSUB TUSBAK
TUSBAK:
IF TUS=1 Then
  SIRA=SIRA+1
IF SIRA > 3 THEN SIRA=0
  WHILE TUS=1:WEND
  PAUSE 100
ENDIF
'ENDIF

SELECT CASE SIRA
  CASE 0
high LED
pause 2000
low LED
goto bekle

case 1
high LED
pause 5000
low LED
goto bekle

end select
bekle:
gosub tusbak
goto basla

ete

Bir pic pini hem giriş (tuş buton anahtar vs bağlamak için) hemde çıkış (led röle vs bağlamak için.)
Hangi pinin giriş hangisinin çıkış olacağına TRIS registeri karar verir.
Bunu yaptınmı?
Öyle bir ayarlama göremiyorum. Nereden bilecek senin oraya tuş bağladığını bir düşün bakalım.
Orada (Sitede) Basic dersleri var oturup çalışırsan her şeyi öğrenir kendin paşa paşa yaparsın bu işi.
Ete

veli

#4
Evet yaptım
kod uzamasın diye kopyalamadım
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF


TRISIO=%000010

CMCON=7 
ANSEL=0 


GPIO=0
SYMBOL LED=GPIO.0
SYMBOL TUS=GPIO.1
SIRA VAR BYTE
LED=0

BASLA:
IF TUS=1 THEN GOSUB TUSBAK
TUSBAK:
IF TUS=1 Then
  SIRA=SIRA+1
IF SIRA > 3 THEN SIRA=0
  WHILE TUS=1:WEND
  PAUSE 100
ENDIF
'ENDIF

SELECT CASE SIRA
  CASE 0
high LED
pause 2000
low LED
goto bekle

case 1
high LED
pause 5000
low LED
goto bekle

end select
bekle:
gosub tusbak
goto basla

ayrıca sizin derslerinizle bir çok şey yaptım ve yapabiliyorum bu konuda takıldım yardım istedim sadece

ete

Sonuçta biraz dikkat işi çözüyor. Dersleri iyi takip edersen bir şey kaçırmazsın. Bunları hep anlatmıştım.
Kolay Gelsin
Ete

Powered by EzPortal