c#'a data geldiği zaman işlem yapan komut varmı?

Başlatan rogue_cn, 16 Eylül 2012, 02:08:02

rogue_cn

Arkadaşlar C# ile pic ve usb çalışması yapıyorum. şimdi sorum şu. Picten C#'a veri gelecek. Ama veri her an gelebilir. kullanıcıya bağlı istediği zaman veriyi gönderebilir. C# dada öyle bir komut olmalı ki bir yandan buton muton işleri yaparken bir yandan picten veriyi beklesin ve veri değişimini gördüğü gibi istediğim işlemleri yapsın. Biraz karışık biliyorum ama çok lazım bu komut(varsa) yada kafasında algoritma olanda söyleyebilir.

Okan AKÇA

daha cok calışmanız lazım  :D  picin donanım ve mimarisine bir göz atın sorularınıza cevap bulacaksınız

rogue_cn

Kardeş pic mimarisini biliyorum zaten. Bahsettiğim olayın pic kısmıyla ilgili bir problem yok zaten. c#'da birşeyler yapmam lazım. bir yol bir ip ucu olabilir.

kudretuzuner

Merhaba
C# bilmiyorum.VB.Net 2008 express edition kullanmaktayım. "SerialPort1_DataReceived "evantına aşağıdaki kod ile,PIC'ten HEX'31' yollandığı zaman formdaki   PictureBox1'ın rengini kırmızıya dönüştürebilirsiniz.Kolay gelsin.


Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

       Dim gelen As String = SerialPort1.ReadByte
       If gelen = 49 Then
            PictureBox1.BackColor = Color.Red
        End If

End Sub
Amatör

fatih6761

Event Handler ile yakalayacaksınız. Basit bir şey. Ama hangi USB kütüphanesini kullandığınızı yazmanız lazım. Yada USB DLLsini atın ben hallederim. Yapacağınız şey şuna benzer olacak:
//... İlklendirme metodunda, Formlarda void Form1() olan yere
usbLibrary1.DataReceived += new EventHandler(Usb_DataReceived);

// Olay işleyicisi ise böyle
private void Usb_DataReceived(object sender, (...)EventArgs e)
{
//...
}


usbLibrary1.DataReceived += bunu yazdıktan sonra ( eğer Visual Studio kullanıyorsanız ) iki kez Tab basınca olay otomatik olarak oluşturulur...

rree

 Umng.dll   Okuma ile kotlar  aşağıda  aynı sorun bendede var   vb.net  nasıl yaparız
Imports System.ComponentModel
Imports System.Text
Imports System.Globalization
Imports USBManagement
Imports System.Threading


Public Class Form1

    Inherits Form
    Private my_hid As New UsbHidDevice()
    Private VendorID As Short = Short.Parse("1111", NumberStyles.HexNumber)
    Private ProductID As Short = Short.Parse("1111", NumberStyles.HexNumber)
    Private my_buffer(63) As Byte
    Private gelen_buffer(63) As Byte
    Dim Baglanti As Boolean
    Dim SiradakiDakika, SiradakiSaat, GonderSayac As Byte
    Dim SiradakiUzunDakika, GSuandakiUzunDakika As Integer

Private Sub Oku()
        txt_okunan.Text = ""
        Do
            my_buffer(3) = AscW("o"c)

            If my_hid.IsOpen Then

                If my_hid.IsWindowsXpOrLater Then
                    my_hid.WritePipe(my_buffer, TransactionType.Interrupt)
                Else
                    my_hid.WritePipe(my_buffer, TransactionType.Control)
                End If

                If my_hid.IsWindowsXpOrLater Then
                    my_hid.ReadPipe(gelen_buffer, 64, TransactionType.Interrupt)
                Else
                    my_hid.ReadPipe(gelen_buffer, 64, TransactionType.Control)
                End If

                txt_okunan.Text = Convert.ToString(gelen_buffer(2))
            End If
        Loop
    End Sub

https://hotfile.com/dl/172411994/c70ab83/umng.dll.html

mesaj birleştirme:: 16 Eylül 2012, 21:07:25

Alıntı yapılan: rree - 16 Eylül 2012, 20:03:58
Umng.dll   Okuma ile kotlar  aşağıda  aynı sorun bendede var   vb.net  nasıl yaparız
Imports System.ComponentModel
Imports System.Text
Imports System.Globalization
Imports USBManagement
Imports System.Threading


Public Class Form1

    Inherits Form
    Private my_hid As New UsbHidDevice()
    Private VendorID As Short = Short.Parse("1111", NumberStyles.HexNumber)
    Private ProductID As Short = Short.Parse("1111", NumberStyles.HexNumber)
    Private my_buffer(63) As Byte
    Private gelen_buffer(63) As Byte
    Dim Baglanti As Boolean
    Dim SiradakiDakika, SiradakiSaat, GonderSayac As Byte
    Dim SiradakiUzunDakika, GSuandakiUzunDakika As Integer

Private Sub Oku()
        txt_okunan.Text = ""
        Do
            my_buffer(3) = AscW("o"c)

            If my_hid.IsOpen Then

                If my_hid.IsWindowsXpOrLater Then
                    my_hid.WritePipe(my_buffer, TransactionType.Interrupt)
                Else
                    my_hid.WritePipe(my_buffer, TransactionType.Control)
                End If

                If my_hid.IsWindowsXpOrLater Then
                    my_hid.ReadPipe(gelen_buffer, 64, TransactionType.Interrupt)
                Else
                    my_hid.ReadPipe(gelen_buffer, 64, TransactionType.Control)
                End If

                txt_okunan.Text = Convert.ToString(gelen_buffer(2))
            End If
        Loop
    End Sub

https://hotfile.com/dl/172411994/c70ab83/umng.dll.html

Ben bu Umng.dll olaylar listesine bilgi geldiğinde bir kesme göremedim. Umng.dll ile olmuyorsa sizin kullandığınız dll ve kotları bizimle paylaşırmısınız.

rogue_cn

Fatih kardeş benim kütüphane umng.dll kardeş çok önemli. yazdığın kodlar bu kütüphanede neye denk geliyor?

fatih6761

DLL yi ek olarka gönder. Elindeki kütüphaneyi  bilmiyorum...


fatih6761

#9
Önceden elimde kütüphane vardı. Şimdi nedense bulamadım. C# ta Threading biliyorsanız yapmanız gereken şey ayrı bir iş parçacığında sürekli veri okumak. Okuma başarılı oluncaya kadar devam etmek.
C# da böyle:
// Bu en başa
using USBManagement;

//Bu global alana
UsbHidDevice dev = new UsbHidDevice();
const short VendorID = 0x1111;
const short ProductID = 0x1234;
byte[] yaz_tampon = new byte[64];
byte[] oku_tampon = new byte[64];

void BaglanmayiDene()
{
    if (dev.OpenPipe(VendorID, ProductID))
    {
		MessageBox.Show("Aygıt bağlı. Veri bekleniyor...");
		System.Threading.Thread tryRead = new System.Threading.Thread(new System.Threading.ThreadStart(VeriBekle));
        tryRead.Start();
    }
    else
    {
        MessageBox.Show("Aygıt bağlı değil...");
    }
}

void VeriBekle()
{
    bool dataReceived = false;
    while (!dataReceived)
    {
        if (dev.IsOpen)
        {
            dataReceived = dev.ReadPipe(ref oku_tampon, 64, TransactionType.Interrupt); 
            // XP öncesi kullanmadığınızı tahmin ediyorum...
        }
    }
}

void VeriAlindi()
{
    MessageBox.Show("Veri alindi...");
}

protected override void WndProc(ref Message m)
{
	dev.ProcessDeviceMessage(m);
    base.WndProc(ref m);
}

Bir butonun click olayına da BaglanmayiDene() dersiniz. Bu şekilde yazabildim...

rogue_cn

Fatih çok teşekkürler çok yardımcı oldun. Deneyeceğim olmassa bile bir fikir oluştu kafamda. sağolasın

rree

Ben timer bağladım oradan belirli zamanlarda okumada yaptırdım . Kesme olsaydı daha iyi olurdu .
Sonuç Umng nin recever (olay oluşturma) kesmesi  görüğüm kadar yok.

rogue_cn

#12
Fatih bu senin yazdığın kodlarda gelen veri oku_tampon[ x ] diye mi kullanacağız yoksa dataReceived[ x ] diye mi kullanacağız? Hala tam anlamadım mesela bu yazdığın programda gelen datayı(veri bir sayıdır) messagebox kutusuna yazdıralım. değiştikçe sürekli yenisi yazsın. Bunu nasıl yapabiliriz? bunu yapabilirsem tam çözüm olacak benim için

muhittin_kaplan

Arkadaşlar visual studio ile bir program yazarken bir nesnenin (dll vs) özellikleri görmek için object browser kullanılır.

1.kullanacağınız dosyayı add reference den ekleyiniz
2.solution exploler penceresinden "show all files" butonuna tıklayın. (tüm ekli dosyaları görürsünüz)
3.özelliklerini görmek istediğinişz dosyayı ters tıklayarak "view in object browser" diyin

orada zaten özellikler nasıl kullanmanız gerektiğini vs göreceksiniz.

rogue_cn

Şuan özellikle işimiz yok zaten algoritma kurmaya çalışıyorum :)