[Çözüldü] Seri port arayüz (hata nerede?)

Başlatan 91011, 10 Nisan 2014 - 21:13:53

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

91011

Merhaba arkadaşlar,

Bir arayüz programı yapıyorum Seriporttan gelen veriyi okuyacak şekilde.
Programım combobox'a COM ları listeliyor seçilip bağlan diyor daha sonra listboxlara ayrı ayrı verileri sıralayacak şekilde yaptım ancak bir türlü seri porttan veri okuyamıyorum codlarım şöyle :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Collections;



namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            string[] Ports = SerialPort.GetPortNames();//portların listelenmesi
            foreach (string port in Ports)
            comboBox1.Items.Add(port);
                     
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)// seri port bağlantının kurulması
        {
            if (Bağlan.Text == "Bağlan")
            {
                try
                {
                    serialPort1.PortName = comboBox1.SelectedItem.ToString();
                    serialPort1.Open();
                    Bağlan.Text = "Kopar";
                   

                }
                catch
                { };
               
            }
             else
                {
                serialPort1.Close();
                    Bağlan.Text="Bağlan";
                }
        }

       private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)// okunan veriniin parçalanması
        {
            serialPort1.ReadTimeout = 2000;
           

            while (true)
            {
                string veri = serialPort1.ReadExisting();
                string[] yeni = veri.Split(',');
                int a = yeni.Length;

                   

                if (serialPort1.IsOpen)
                {
                    for (int i = 0;i<a ; i++)// döngüyle birlikte listboxlara dizi elemanları sıra ile yazdırılıyor.
                    {
                        listBox1.Items.Add(yeni[i]);
                        i++;
                        listBox2.Items.Add(yeni[i]);
                        i++;
                        listBox3.Items.Add(yeni[i]);
                        i++;
                        listBox4.Items.Add(yeni[i]);
                       
                    }

                }
                else
                {
                    listBox1.Text = "HATA";

                }

            }
           
       
           
                       

        }
    }

 
   
   
}



Normalde bunu ilk denediğimde $ işaretini görmüştüm devre hiç bir bağlantısı olmadan $CB veya $CD gibi bir çıktı vermesi gerekiyordu ama diğerlerini göremedim şu an bu haliyle bile hiç bir veri alamıyorum. Çok sıkıldım artık bu durumdan lütfen bana bir yol gösterin .
Tanrı konuşmaz, şeytan fısıldar...

91011

Hatam DataRecieved olayını eventhandler etmem gerekiyor. Bunu nasıl yapabilirim ?
Tanrı konuşmaz, şeytan fısıldar...

91011

Programımı bitirdim belki lazım olan olur. Form elemanları 4 adet ListBox, bir adet Combobox, bir adet buton ve üst tarafta manü çubuğu var.Münü çubuğunda kaydetme seçeneği mevcut.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Collections;
using System.IO;



namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public string toplamveri;
        public string[] yeni;
       
        public Form1()
        {
            InitializeComponent();
            string[] Ports = SerialPort.GetPortNames();//portların listelenmesi
            foreach (string port in Ports)
            comboBox1.Items.Add(port);
                     
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)// seri port bağlantının kurulması
        {
            if (Bağlan.Text == "Bağlan")
            {
             
             

                    serialPort1.PortName = comboBox1.SelectedItem.ToString();
                    serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
 
                serialPort1.Open();
                    Bağlan.Text = "Kopar";


            }
               
               
           
             else
                {
                serialPort1.Close();
                    Bağlan.Text="Bağlan";
                }
        }

        public void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)// okunan veriniin parçalanması
        {
           
         
          //serialPort1.ReadTimeout = 2000;
           

         
            serialPort1.WriteTimeout = 5000;
          serialPort1.ReadTimeout = 2000;
            string veri = serialPort1.ReadExisting();
               string[] yeni = veri.Split('$');
               int a = yeni.Length;       
         
       
         if (serialPort1.IsOpen)
          {
                   for (int i = 0 ;i<a ; i++)// döngüyle birlikte listboxlara dizi elemanları sıra ile yazdırılıyor.
                   {
             
                              if(listBox1.InvokeRequired)
                              {
               
                              listBox1.Invoke(new MethodInvoker(delegate {listBox1.Items.Add(yeni[i]); }));


                              }
                               //  i++;
                               //     if(listBox2.InvokeRequired)
                               //  {
               
                               //      listBox2.Invoke(new MethodInvoker(delegate {listBox2.Items.Add(yeni[i]); }));


                              ///   }
                              /*           i++;

                              if(listBox1.InvokeRequired)
                              {
               
                                listBox3.Invoke(new MethodInvoker(delegate {listBox3.Items.Add(yeni[i]); }));


                               }
                              if(listBox1.InvokeRequired)
                              {
               
                                    listBox4.Invoke(new MethodInvoker(delegate {listBox4.Items.Add(yeni[i]); }));
                              }*/
                             
                   }

           }//if in kapatma yeri
          else
               {
                   listBox1.Text = "HATA";

               }
         

      }

        private void kaydetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (FileStream S = File.Open(saveFileDialog1.FileName, FileMode.CreateNew))
                {
                    using (StreamWriter st = new StreamWriter(S))
                    {
                        foreach (var aa in listBox1.Items)
                            st.WriteLine(aa.ToString());
                    }
                }
            }
        }
           
       
           
                       

    }
}

 
   
   
Tanrı konuşmaz, şeytan fısıldar...

if

Geri dönüş için teşekkür ederim.
cozuldukonusu