VB'de sonsuz döngüden nasıl çıkılır?

Başlatan SüleymanKara, 10 Ağustos 2004, 23:20:03

SüleymanKara

Yazdığım programda pic'in seriporttan gönderdiği veriyi "Başlat " butonua basınca almak istiyorum ama bunu devamlı olarak alıp ekrana basmam lazım. Bunu yapıyorum Command1 butonuna sonsuz döngü koyunca oluyor fakat bu sefer program kilitleniyor.
Benim yapmak istediğim command1'e basınca seriporttaki değeri alıp yazdırsın , command2'ye basınca dursun. veya command1'e ikinci defa basınca dursun.
Bunu nasıl yapabilirim.
Kod aşağıdaki gibidir.

Private Sub Command1_Click()
MSComm1.InputLen = 0
If MSComm1.InBufferCount > 0 Then
a = Val(MSComm1.Input)
Text1.Text = a
End If
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "115200,n,8,1"
MSComm1.PortOpen = True
End Sub

fsan

merhaba SüleymanKara,
bir zamanlar VB ile bir Eprom programmer yapmistim
"Private Sub cmdRead_Click()"  buttona basinca program bir döngü icerisinde epromu okumaya basliyor ve döngü bitinceye kadar istesemde Cancel yapilmiyordu.. sonra döngü icerisine bir "DoEvents" koymak gerektigini ögrenmistim.. belki seninde böyle bir seye ihtiyacin var ?

DoEvents koyunca VB döngü icerisinde baska islemleride kontrol ediyor (mesela bir buttona basilip basilmadigini)

Dim i As Long

    For i = 1 To 1000000
        DoEvents
        ...
    Next i


kolay gelsin

kasif

Bir değişken yap,
Eğer değişken "1" ise bilgiyi okumaya başlasın "0" ise okuma yapmasın.
Butona basılınca da değişkeni "0" ise "1" , "1" ise "0" yapsın.

Programın çalıştığı ama işlem yapmadığı "0" durumunda 0.1 saniyelik bir bekletme koyarsın. Bu da tıkanmayı önleyebilir.

akivanc75

Dim i As Long

   For i = 1 To 1000000
       DoEvents
       ...
   Next i










yerine sadece döngü içerindeki herhangibir yere DoEvents yazman yeterli
KA

birumher

Ben normalde Delphi kullanıyorum ama bu MsComm component inin data gelince oluşturduğu bir event i olması lazım. Bu durumda kodunu o event in içine yazacaksın hiç sorun kalmayacak. Eğer böyle bir şansın yoksa timer da kullanabilirsin. Normalde timerlar en az 18 ms de bir çalışırlar bu nedenle buffer ı biraz büyük tutarak timer kullanıp kaçırmadan data alabilirsin...
Birkan.Herguner

yıldırım ak

Visual Basic kod çalıştırırken form üzerindeki hareketleride takip edebilir ve kullanıcı arayüzü olarak çalışmaya devam eder. Formda bir talep oluştuğunda bu talebe ait koduda çalıştırabilir. doevent genelde bunun için kullanılır.

Birde 115200 baudrate yi hangi pic ile kullanmayı düşünüyorsun ?


Önce bir booelan değişken tanımla.


command1 e basınca ;


dur = false 'kontrol değişkeni başlangıç değeri

do 'sonsuz döngü girişi

if dur = true then exit do ' kullanıcı talebi ile döngüden çıkma

Burada seri portu oku

doevent

loop
.
.
.

command2 ye basınca ;

dur = true ' döngüden çıkma isteği
"... Bana kulluk et; Beni anmak için namaz kıl" (Taha 14)

NecroCapo

Bence de timer çözüm gibi duruyor.

MuKaN

Alıntı yapılan: "NecroCapo"Bence de timer çözüm gibi duruyor.

bencede timer nesnesi tek çözüm...
sonsuz döngü işlemciyi yorar ve ram i şişirir ve dolayısıyla makinanız kilitlenir.

ayrıca vb de döngüden çıkma komutları

for döngüsü için: Exit For
While-DO ve Do-Loop için: Exit Do
komutlarıdır...
Dünyayı Daha İyi Yapmayan İnsan,İnsan Değildir! (Kingdom of Heaven)

turkplc

mscomm ocx in on_comm eventını kullanırsan daha profesyonel bir yaklaşım olacaktır

Event kullanmayacaksan doevents fonksiyonunu kullan

mhk

Private Sub MSComm1_OnComm()
Dim sData As String

If MSComm1.CommEvent = comEvReceive Then
        sData = 0
  
    sData = MSComm1.Input
   Text1.Text = Asc(sData)

   
End If


Burda herhangi bir veri alındığında,MSComm1_OnComm() fonksiyonu devreye girer ve alınan veri sData değişkenine aktarılır.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana