Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual Basic => Konuyu başlatan: SüleymanKara - 10 Ağustos 2004, 23:20:03

Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: SüleymanKara - 10 Ağustos 2004, 23:20:03
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
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: fsan - 11 Ağustos 2004, 01:20:34
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
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: kasif - 11 Ağustos 2004, 13:48:45
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.
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: akivanc75 - 07 Eylül 2004, 22:35:01
Dim i As Long

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










yerine sadece döngü içerindeki herhangibir yere DoEvents yazman yeterli
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: birumher - 09 Eylül 2004, 11:07:33
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...
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: yıldırım ak - 12 Eylül 2004, 17:22:03
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
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: NecroCapo - 23 Nisan 2005, 17:47:17
Bence de timer çözüm gibi duruyor.
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: MuKaN - 30 Nisan 2006, 21:49:42
Alıntı yapılan: NecroCapoBence 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...
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: turkplc - 14 Kasım 2006, 16:19:39
mscomm ocx in on_comm eventını kullanırsan daha profesyonel bir yaklaşım olacaktır

Event kullanmayacaksan doevents fonksiyonunu kullan
Başlık: VB'de sonsuz döngüden nasıl çıkılır?
Gönderen: mhk - 15 Kasım 2006, 02:15:42

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.