none
SerialPort Okuma hatası RRS feed

  • Genel Tartışma

  • Merhaba; 

    Serial porttan veri okumak istiyorum (Öğrenme amaçlı yapıyorum )

    Oku bastığımda okuyor. 

    Dur  ile duruyor. fakat bir kaç kez oku - dur yaptığımda resimdeki hatayı alıyorum. 

    Nerede hata yapıyorum. 

    Yardımcı olur musunuz?

    Serial porta veriyi aşağıdaki arduıno kodu ile gönderiyorum .

    int sayi1=0;
    int sayi2=1000;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    sayi1++;
    sayi2--;
    
    Serial.print(sayi1);
    Serial.print('*');
    Serial.println(sayi2);
    delay(100);
    
    
    }

    6 Aralık 2019 Cuma 16:00

Tüm Yanıtlar

  • SerialPorttan veriyi yarım okuyorsun sanırım. ReadLine yerine ReadExisting ile ne varsa okumayı denermisin.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    6 Aralık 2019 Cuma 16:06
    Moderatör
  • Önay Abi merhaba;

    O şekilde de hata verdi. Denemiştim. 

    Şuan dışarıya çıkacağım dönüşte

    Ekran görüntüsü alıp onuda gönderirim.

    Yine de teşekkürler abi.

    6 Aralık 2019 Cuma 16:11
  • using System;
    using System.Windows.Forms;
    using System.IO.Ports;
    
    
    namespace _16122019_seriport_deneme
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            string[] baglanti_hizi = { "9600", "14400", "19200","28800","38400","57600","115200"};
            private void COMPortlariListele()
            {
                string[] portlar;
    
                portlar = SerialPort.GetPortNames();
                cmb_com.Items.AddRange(portlar);
                
            }
                   
            private void Form1_Load(object sender, EventArgs e)
            {
                COMPortlariListele();
    
                foreach (string hiz in baglanti_hizi)
                {
                    cmb_hiz.Items.Add(hiz);
                }
               
            }
    
            delegate void GelenVerileriGuncelleCallback(string veri);
    
            private void GelenVerileriGuncelle(string veri)
            {
                if (this.txt_gelen_veri.InvokeRequired)
                {
                    GelenVerileriGuncelleCallback d = new GelenVerileriGuncelleCallback(GelenVerileriGuncelle);
                    this.Invoke(d, new object[] { veri });
                }
                else
                {
                    this.txt_gelen_veri.AppendText(veri);
                }
            }
    
            private void btn_baglan_Click(object sender, EventArgs e)
            {
                if (cmb_com.SelectedIndex < 0)
                {
                    MessageBox.Show("COM port bulunamadi");
                    return;
                }
    
                if (cmb_hiz.SelectedIndex < 0)
                {
                    MessageBox.Show("Bağlantı hızı seçiniz");
                    return;
                }
    
                try
                {
                    if (serialPort1.IsOpen == false)
                    {
                        serialPort1.PortName = cmb_com.SelectedItem.ToString();
                        serialPort1.BaudRate = Convert.ToInt32(cmb_hiz.Text);
                        serialPort1.Open();
                        btn_baglan.Text = "BAĞLANTI KES";
                        timer1.Enabled = true;
                    }
                    else
                    {
                        timer1.Enabled = false;
                        serialPort1.Close();
                        btn_baglan.Text = "BAĞLANTI AÇ";
    
                        ///////////
                        int i = 0;
                        string[] textBoxLines = txt_gelen_veri.Lines;
                        foreach (string line in textBoxLines)
                        {
                            i++;
                        }
                        string[] verial = new string[i];
                        int a = 0;
                        string[] textBoxLines1 = txt_gelen_veri.Lines;
                        foreach (string gelen_veri in textBoxLines1)
                        {
                            verial[a] = gelen_veri;
                            a++;
                        }
    
                        int son_eleman = verial.Length;
                        son_eleman = son_eleman - 2;
    
                        MessageBox.Show(verial[son_eleman].ToString());
    
                    }
                }
                catch
                {
                    MessageBox.Show("Bağlantı açılamadı!");
                }
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (serialPort1.BytesToRead > 0)
                {
                    GelenVerileriGuncelle(serialPort1.ReadExisting());
    
                }
            }
    }

    Merhaba;

    Öncelikle geç cevap verdiğim için kusura bakmayın lütfen. Epey yoğun bir dönemdeyim.

    İlk verdiğim kodu github da bulduğum bir kod ile yeniden yazdım ve bu hale geldi. Kod aslında şuan çalışıyor, fakat üzerine ekleme yapmak istiyorum. Şuan ki kodları Arduino üzerinden gelen veriler ile deniyorum.

    Arduino kodu aşağıdaki gibi;

    	int sayi=random(885,1115);
    	Serial.println(sayi);
    	delay(200);

    Benim yapmak istediğim tam olarak şöyle. 

    Seriporta bağlı bir cihazım var. Sürekli bir değer gönderiyor.

    Portu okuduğumda Gelen değeri ekranda anlık olarak göreyim ve değeri  istediğimde bir değişkene atayabileyim.

    Şu ana kadar yazdıklarımı yaptım aslında. Bundan sonra aşağıdakileri yapmak istiyorum.

    Gelen değerleri anlık olarak bir grafiğe aktarmak istiyorum

    Ben sütun grafik istiyorum ve belli değerlere gelince sütundaki barın renginin değişmesini istiyorum. 

    örnek olarak aşağıdaki gibi.

    üst sınır = 1100

    üst uyarı = 1050

    orta nokta =1000

    alt uyarı=950

    alt sınır = 900

    950 ile 1050 arasında ki değerde yeşil renk 

    1050-1100 ile 950-900 arası sarı renk 

    900 den aşağısı ve 1100 den yukarısı kırmızı renk olacak şekilde görsel olarak renklendirmek istiyorum. 

    Bunu yapabilmek için  hangi grafik yapısını kullanmam gerek nelere bakmak araştırmak gerek ..(devexpress yüklü)

    Yardımcı olursanız sevinirim.

    c# ı yeni öğreniyorum. Kurs ta temel seviye bilgiler alıyorum fakat gerçek problemleri çözerek daha iyi öğreneceğimi düşündüğüm için bu tarz kodlar yazmaya çalışıyorum. (benzer mantık ile çalışan bir ölçme aleti görmüştüm oradan esinlendim)




     



    • Düzenleyen icemeno 16 Aralık 2019 Pazartesi 20:19
    16 Aralık 2019 Pazartesi 20:13