Butonun yükselen ve düşün kenarında servo sürme ?

Başlatan aragon06, 20 Nisan 2013, 15:08:47

aragon06

Merhabalar, basic'i yeni yeni öğrenmeye çalışıyorum. Acaba basic'te aynı  butonun yükselen ve düşen kenarında bir servoyu +90 -90 arasında nasıl hareket ettirebiliriz. Ben 2 buton kullanarak şöyle birşey yazdım. Acaba bunu tek butonla gerçekleştirebilirmiyiz? Yardımcı olacak arkadaşlara şimdiden çok teşekkür ederim.

TRISA=%00001
TRISB=%00000000
SYMBOL TUS=PORTA.0
SYMBOL TUS2=PORTA.1
n var byte
porta=0
portb=0

if tus=1 then
for n=50 to 250 step 1
pulsout portb.0,n
pause 10
next
while tus=1
wend
     endif
     
     if tus2=1 then
for n=250 to 50 step -1
pulsout portb.0,n
pause 10
next
while tus2=1
wend
     endif
   

aragon06

Birde şöyle birşey yazdım. Proteusta çalışıyor gözüküyor. Acaba kodda bir mantık hatası falan var mı?

TRISA=%00001
TRISB=%00000000
SYMBOL TUS=PORTA.0
n var byte
porta=0
portb=0
pulsout portb.0,50;
   while tus=0
   wend
if tus=1 then
for n=150 to 250 step 1
pulsout portb.0,n
pause 10
next
while tus=1
wend
     endif

vale9

servo nasıl sürülüyor bilmem ama while-wend ile işlemciyi sürekli meşgul edersin başka bişey yapamaz.

2 şekilde yapabilirsin bu işi:

1) Portb.0 interrupt'ı kullanarak. Örneğin 16F628de RB0 interruptı var ve bu interruptın hangi kenarda çalışacağını seçebiliyorsun, ben daha önce seninkine benzer birşey yapmıştım. Mesela start sırasında butonun durumunu okut, 0 ise interrupt edge'i RISING yap. İnterrupt oluştuktan sonra bunu FALLING yap. Bu şekilde değiştirerek sürekli interrupt oluşturabilirsin ve her seferinde çalışır

2) Daha basit yöntemi yine başlangıçta buton durumunu okut sonra o duruma göre motor yönünü belirle. Bir de bit tipinde bir değişken kullan, bu değişkene yön durumunu kaydet. Örneğin:

SYMBOL TUS=PORTA.0
n var byte
porta=0
portb=0
X VAR BIT   ' KENAR DEĞİŞKENİ
X=0   ' YÜKSELEN KENAR İÇİN 1, DÜŞEN İÇİN 0

BASLA:

IF X=0 AND TUS=0 THEN 
   pulsout portb.0,50;
   X=1   ' KENARI DEĞİŞTİR
ENDIF

IF X=1 AND TUS=1 THEN
  for n=150 to 250 step 1
  pulsout portb.0,n
  pause 10
  X=0    ' KENARI DEĞİŞTİR
ENDIF

GOTO BASLA
Hayat 1'ler ve 0'lardan ibarettir.