Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: berkay_91 - 02 Eylül 2017, 11:31:53

Başlık: UART haberleşmede timer sorunu
Gönderen: berkay_91 - 02 Eylül 2017, 11:31:53

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;

namespace Arduino_UART
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DataSource = SerialPort.GetPortNames();
            serialPort1.BaudRate = 9600;
        }

        private void button3_Click(object sender, EventArgs e)  // bağlan ve timer başlat
        {
            if (serialPort1.IsOpen == false)
            {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.Open();
                timer1.Start();
            }

        }

        private void button4_Click(object sender, EventArgs e) // bağlantıyı kes ve timer kapat
        {
            if (serialPort1.IsOpen == true)
            {
                serialPort1.Close();
                timer1.Stop();
            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                string sonuc = serialPort1.ReadLine();
                textBox1.Text = sonuc + "";
                serialPort1.DiscardInBuffer();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message); // basarısız olursa hata verecek.
                timer1.Stop();
            }
        }
    }
}


(https://s26.postimg.cc/9leakjxv9/Ads_z.png) (https://postimg.cc/image/9leakjxv9/)

Merhaba, Arduinoya bağlandıktan sonra verileri düzgün alabiliyorum ancak bağlantıyı kes butonuna tıkladığımda çıkmıyor, bağlantı kesilmiyor. timer nesnesinin interval değerini 200 yaptım yardımcı olur musunuz?
Başlık: Ynt: UART haberleşmede timer sorunu
Gönderen: Hadi - 02 Eylül 2017, 14:00:00
verileri neden timer ile alıyorsunuz ki?
Başlık: Ynt: UART haberleşmede timer sorunu
Gönderen: omereliusuk - 02 Eylül 2017, 21:21:43
Readexisting (); komutunu kullanıyordum. Gayet de güzel çalışıyordu. Denemek lazım.
Başlık: Ynt: UART haberleşmede timer sorunu
Gönderen: berkay_91 - 02 Eylül 2017, 21:38:36
timer kullanmadan nasıl yapabilirim?
Başlık: Ynt: UART haberleşmede timer sorunu
Gönderen: baran123 - 02 Eylül 2017, 21:58:02
formload eventine şunu yaz

CheckForIllegalCrossThreadCalls = false;



MySerial.PortName = Convert.ToString(cmbPortName.Text);
                    MySerial.BaudRate = Convert.ToInt32(cmbBaudRate.Text);
                    MySerial.DataBits = Convert.ToInt16(cmbDataBits.Text);
                    MySerial.Parity = (Parity)Enum.Parse(typeof(Parity), cmbParityBit.Text);
                    MySerial.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBit.Text);
                    MySerial.Handshake = (Handshake)Enum.Parse(typeof(Handshake), cmbHandShake.Text);
                    MySerial.DataReceived += new SerialDataReceivedEventHandler(SerialPort_ReceivedEvent);
                    MySerial.Open();

Sonra "seri init" kısmında şunu yap.

Kesme metodunu oluştur.

internal delegate void SerialDataReceivedEventHandlerDelegate(object sender, SerialDataReceivedEventArgs e);

string rxData = String.Empty;

        private void SerialPort_ReceivedEvent(object sender, SerialDataReceivedEventArgs e)
        {
            rxData = MySerial.ReadLine();
        }


Artık her veri geldiğinde SerialPort_ReceivedEvent bu metoda düşeceksin.
Burada veriyi okuyup işlem yapabilirsin.

Kesme şudur : "Biri geldi mi diye sürekli kapıya bakmaktansa zil çaldığında kapıya bakarız"
Başlık: Ynt: UART haberleşmede timer sorunu
Gönderen: muhittin_kaplan - 02 Eylül 2017, 22:18:29
İllagal thread i kapatmak iyi bir yontem degildir.
Onun yerini ne seriportu dinleyecek baska bir thread olusturulmasi gerekir.
Başlık: Ynt: UART haberleşmede timer sorunu
Gönderen: baran123 - 02 Eylül 2017, 22:27:44
Hakılısınız @muhittin_kaplan hocam ben basit olsun diye bu örneği verdim.
Arkadaş dediğiniz gibi yapmak isterse biraz daha araştırma yapması gerekecek.
Şuralara bir bakınabilirsin.
https://www.codeproject.com/Questions/228124/serial-port-using-threading
Başlık: Ynt: UART haberleşmede timer sorunu
Gönderen: berkay_91 - 02 Eylül 2017, 23:42:21
teşekkürler...