Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: rogue_cn - 16 Eylül 2012, 02:08:02

Başlık: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 16 Eylül 2012, 02:08:02
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.
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: Okan AKÇA - 16 Eylül 2012, 09:22:43
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
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 16 Eylül 2012, 11:08:05
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.
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: kudretuzuner - 16 Eylül 2012, 11:14:29
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
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: fatih6761 - 16 Eylül 2012, 15:19:37
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...
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: 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 (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 (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.
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 17 Eylül 2012, 00:53:46
Fatih kardeş benim kütüphane umng.dll kardeş çok önemli. yazdığın kodlar bu kütüphanede neye denk geliyor?
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: fatih6761 - 17 Eylül 2012, 15:59:33
DLL yi ek olarka gönder. Elindeki kütüphaneyi  bilmiyorum...
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 17 Eylül 2012, 18:15:41
https://rapidshare.com/files/2935468006/umng.dll
kardes upload ettim rapide dll yi
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: fatih6761 - 17 Eylül 2012, 19:57:07
Ö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...
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 17 Eylül 2012, 22:23:23
Fatih çok teşekkürler çok yardımcı oldun. Deneyeceğim olmassa bile bir fikir oluştu kafamda. sağolasın
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rree - 17 Eylül 2012, 22:28:28
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.
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 17 Eylül 2012, 23:44:03
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
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: muhittin_kaplan - 18 Eylül 2012, 09:25:02
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.
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 18 Eylül 2012, 15:48:51
Şuan özellikle işimiz yok zaten algoritma kurmaya çalışıyorum :)
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: muhittin_kaplan - 18 Eylül 2012, 17:09:41
Özellikten Kasıt Hangi olayda hangi kod bloguğunun etkileneceğidir. Ha işiniz yoksa algoritma (buda ne demekse) oluşturmaya bakın.
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: fatih6761 - 18 Eylül 2012, 19:28:16
@muhittin_kaplan merak etme ben sınıfı inceledim public veya private metodların hiçbirinde veri alma sırasında tetiklenen olay yok.
Esas soruya gelince dataReceived sadece bool türü bi değişken. Veri geldiğinde True olacak. Alınan veri ise oku_tampon dizisinde bulunuyor. Zaten veri gelince şöyle bir düzenlemeyle:

// 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...
        }
    }

    VeriAlindi();
}

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

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

Kesme gibi çalışır. Yani veri gelinceye kadar bekler. Veri gelince VeriAlindi metodunu işletir. Eğer veri bekleme devam edecekse Thread nesnesini global tanımlayın ve istediğiniz yerde tekrar Start komutu verin...
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rree - 18 Eylül 2012, 23:23:47
Buldum sitedeki devre tam istediğim gibi  isis dosyasında bir kaç yer değiştirince çalıştı.
https://320volt.com/pic18f4550-ccs-c-usb-termometre/ (https://320volt.com/pic18f4550-ccs-c-usb-termometre/)
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: rogue_cn - 19 Eylül 2012, 00:05:49
Fatih verdiğin kodlar ve rota tam olarak devremi çalıştırdı :) çok çok çok teşekkür ettim Allah razı olsun kardeş. While(!received) {} bitişine while(received) ekledim tıkır tıkır çalışıyor ;)
Başlık: Ynt: c#'a data geldiği zaman işlem yapan komut varmı?
Gönderen: fatih6761 - 19 Eylül 2012, 19:11:15
Rica ederim. Faydlaı olabildiysem ne mutlu. Allah sizden de razı olsun...