C# Chart ile Veri gösterimi (Sola Akan)

Başlatan ehliseyf, 20 Ekim 2016, 10:45:15

ehliseyf

ECG için bir ekran tasarlamaya çalışıyorum. Lakin Verilerin videonun 6:20 dakikasındaki gibi sola akmasını nasıl sağlarım. Benim şuan görebildiğim verileri sürekli yüklüyorum. Veriler ekranı terk etmiyor üst üste binerek devam ediyor ve sürekli ekran ölçeği daralıyor. 2. olarak yüklediğim video benim sistemime aittir.

https://www.youtube.com/watch?v=RmkZxxBJ29U 6:20 ye bakabilirsiniz.

https://www.youtube.com/watch?v=vYLgtevWDPA&feature=youtu.be
Code'm mu oturturum !

FxDev

Aşağıda video'da kullandığım işini görür mü hızını vs. ayarlayabiliyorsun? Senin işini görür gibi. Aratmak istersen "C2DPushGraph" olarak nette aratabilirsin. Diğer türlü başka ek kaynaklara yönelmen lazım.

! No longer available
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

barisertekin

Aslında sola akan birşey yok gibi. Ekrana çizilen t aralığı değişiyor.

Elimizde t,y değerleri varsa.

Draw(t0,t1,data array) fonksiyonu olsun.

t1 = DateTime.Now olması gerekiyor.
t0 = DateTime.Now - 2sn olabilir. Bu durumda ekranda sürekli son 2 saniyelik data görünmüş olur.

Bir timer içerisinde Draw fonksiyonunu çağırarark yapılabilir. Veya data geldikçe çağırılabilir.

Kolay gelsin.

ehliseyf

Alıntı yapılan: barisertekin - 20 Ekim 2016, 11:11:18
Aslında sola akan birşey yok gibi. Ekrana çizilen t aralığı değişiyor.

Elimizde t,y değerleri varsa.

Draw(t0,t1,data array) fonksiyonu olsun.

t1 = DateTime.Now olması gerekiyor.
t0 = DateTime.Now - 2sn olabilir. Bu durumda ekranda sürekli son 2 saniyelik data görünmüş olur.

Bir timer içerisinde Draw fonksiyonunu çağırarark yapılabilir. Veya data geldikçe çağırılabilir.

Kolay gelsin.
Örnek bir proje kodu paylaşma imkanınız var mı ? Benim için biraz hava da kaldı.
Code'm mu oturturum !

muhittin_kaplan

hocam acelesi yoksa akşama bakayım, vb.net le yapmış olduğum kalman filter simulatörde kullanmıştım.


ehliseyf

#5
Alıntı yapılan: muhittin_kaplan - 20 Ekim 2016, 12:16:40
hocam acelesi yoksa akşama bakayım, vb.net le yapmış olduğum kalman filter simulatörde kullanmıştım.


Olur Hocam. Bekliyorum Teşekkürler.

mesaj birleştirme:: 21 Ekim 2016, 03:37:49

Alıntı yapılan: FxDev - 20 Ekim 2016, 10:53:06
Aşağıda video'da kullandığım işini görür mü hızını vs. ayarlayabiliyorsun? Senin işini görür gibi. Aratmak istersen "C2DPushGraph" olarak nette aratabilirsin. Diğer türlü başka ek kaynaklara yönelmen lazım.

! No longer available
İnceliyorum Hocam. Teşekkürler.

mesaj birleştirme:: 20 Ekim 2016, 13:53:58

@FxDev Hocam bu bahsettiğinizi beğendim. Projeme nasıl dahil edebilirim. dll dosyasını choosee tools ile yüklemeye çalıştım. Bi hata ile karşılaşıyorum. Sürümleri mi var ? Eklenti gibi bir şey mi ?
Code'm mu oturturum !

muhittin_kaplan

#6
If Me.ListBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {[text]})
        Else

            deger = 255 - CInt([text])
            If CInt([text]) > 200 Then
                deger = CInt([text]) - 255
            Else
                deger = ([text])
            End If
            Me.ListBox1.Items.Add(deger)
            Me.ListBox1.SelectedIndex = Me.ListBox1.Items.Count - 1
            Me.Chart1.Series(0).Points.Add(deger)
            Me.Chart1.Series(1).Points.Add(Kalman(deger))
            If Chart1.Series(0).Points.Count > 50 Then Me.Chart1.Series(0).Points.RemoveAt(0)
            If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)


            Me.Chart1.Series(0).Points.Add(deger)
            Me.Chart1.Series(1).Points.Add(Kalman(deger))
ile değerleri ekliyorum

            If Chart1.Series(0).Points.Count > 50 Then Me.Chart1.Series(0).Points.RemoveAt(0)
            If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)

ile eğer 50den fazla değer varsa ilk baştakini siliyorum.

mesaj birleştirme:: 20 Ekim 2016, 17:34:50

https://www.youtube.com/watch?v=KwT9DoN8bYU

ehliseyf

@muhittin_kaplan Hocam sola kaydırma işini halletmek üzereyim. Bir iki sorum daha olacak. Biraz konudan Bahsedeyim. Benim 24 bitten oluşan 12 tane datam var. Hepsini ayrı chartlar ile göstermek istiyorum. Tabiki sola akar şekilde. Verilerimi USB ile alıyorum. Chip ile haberleşip SPI ile Alıyor. Sonra USB den PC ye aktarıyorum. Veriler geliyor. Şimdi Chart 1 2 3... Yapmak istedim. Sonuncu akıyor ama diğerleri akmıyor. Bunun için nasıl bir yol izlemeliyim. Birde Bu ekranları herhangi bir anda kaydetmek istiyorum ve kayıtların numaralandırılmasını istiyorum. Örneğin SS 1 SS 2 gibi sıradan gitmesini istiyorum. Aramam gereken yol, yöntem nedir  ? kullandığım bazı kod parçaları şunlar.
private void button4_Click_1(object sender, EventArgs e)
        {
            
            Directory.CreateDirectory("C:\\Ekran_Resimleri");
            this.chart1.SaveImage("C:\\Ekran_Resimleri\\ekrangörüntüsü.jpg", ChartImageFormat.Jpeg);
            
           
          //  Screenshot().Save(@"C:\Ekran_Resimleri\ekrangörüntüsü.jpg");
        } [\code]

[code]
 this.chart1.Series["Data1"].Points.AddXY(0, Data_test[8]);
                  this.chart1.Series["Data2"].Points.AddXY(0, Data_test[7]);
                  this.chart1.Series["Data3"].Points.AddXY(0, Data_test[6]);
                 /* this.chart1.Series["Data4"].Points.AddXY(0, Data_test[5]);
                  this.chart1.Series["Data5"].Points.AddXY(0, Data_test[4]);
                  this.chart1.Series["Data6"].Points.AddXY(0, Data_test[3]);
                  this.chart1.Series["Data7"].Points.AddXY(0, Data_test[2]);
                  this.chart1.Series["Data8"].Points.AddXY(0, Data_test[1]);*/
                
                if (chart1.Series["Data1"].Points.Count > 200)
                {
                    chart1.Series["Data1"].Points.RemoveAt(0);
                    chart1.Series["Data2"].Points.RemoveAt(0);
                    chart1.Series["Data3"].Points.RemoveAt(0);
                }
[\code]
Code'm mu oturturum !

muhittin_kaplan

yukardaki verdiğim kodda , iki seri var. yani aynı chart üzerinde 2 grafik

Me.Chart1.Series(0).Points.Add(deger1)
Me.Chart1.Series(1).Points.Add(deger2)


olarak ekle (c# için this.Chart1.Series(0).Points.Add(deger)  dir)

belli bir sayıyı geçince çıkart

If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)


ehliseyf

Alıntı yapılan: muhittin_kaplan - 25 Ekim 2016, 14:41:55
yukardaki verdiğim kodda , iki seri var. yani aynı chart üzerinde 2 grafik

Me.Chart1.Series(0).Points.Add(deger1)
Me.Chart1.Series(1).Points.Add(deger2)


olarak ekle (c# için this.Chart1.Series(0).Points.Add(deger)  dir)

belli bir sayıyı geçince çıkart

If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)


Hocam ben aynı Chart üstünde göstermek istemiyorum. Farklı Chartlar üzerinde göstermek istiyorum. Aynı Chart üstünde gözüküyor.
Code'm mu oturturum !

muhittin_kaplan

o daha kolay.
birtane daha chart ekleyeceksin (Chart2)

this.Chart2.Series(0).Points.Add(deger2), veriyi eklemek için

If Chart2.Series(0).Points.Count > 50 Then Me.Chart2.Series(0).Points.RemoveAt(0), veriyi silmek için


skara1214

peki sola yığılarak gitmesi nasıl yapılır?
Herkes ölür ama herkes gerçekten yaşamaz

muhittin_kaplan

Nasil pek anlamadim sola yigilarak gitmesini ?

skara1214

data geldikçe scala genişlesin eski datalar yokolmasin diyorum
Herkes ölür ama herkes gerçekten yaşamaz

barisertekin

Sürekli son 2 saniye içinde gelen datayı ekrana çizdiğiniz zaman zaten otomatikman sola akıyormuş gibi gözükmeyecek mi?
Eski dataları yine tut ama ekranda değil :) Eski datalara bakmak istediğin zaman yine array'den okuyup zaman aralığına göre çizdirirsin.
Eski dataların ekranda durması gibi bir durum söz konusu olamaz.