rs232 seri port okuma

Başlatan hasankomur, 20 Ocak 2013, 16:02:30

hasankomur

Selamün aleyküm arkadaşlar;

LM35 ten okuduğum sıcaklık değerini 16f877a ile bilgisayara aktarıyorum. Port tan veriyi okuyabiliyorum. Fakat şöyle bir sorun var ki,son okuduğu değer ile birlikte bir öncekileri de okuyor. İnternette bulduğum bir kodu denedim.Kodlar şu şekilde;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Sıcaklık_analizi_rs232_16f877a_lm35_
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            serialPort1.Open();
        }

        string bilgi;
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            bilgi = serialPort1.ReadExisting().ToString();
            this.Invoke(new EventHandler(goster_yazi));
        }
        
        private void goster_yazi(object o, EventArgs e)
        {
            textBox1.AppendText(bilgi);// sorun bu kodda 
            
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            serialPort1.Close();
        }
      
    }
}


Bunu nasıl engelleyebilirim?
Herkese hayırlı çalışmalar...

OG

Her okumadan önce textbox ı sil
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Kabil ATICI

 textBox1.AppendText(bilgi); kodunu

textbox1.text=bilgi:
şeklinde kullanabilirsin.

ambar7

hasankomur

#3
Alıntı yapılan: OG - 20 Ocak 2013, 16:08:09
Her okumadan önce textbox ı sil

Denedim fakat hata veriyor. Aynı anda hem yazıp hem temizlediği için

mesaj birleştirme:: 20 Ocak 2013, 17:08:28

Alıntı yapılan: ambar7 - 20 Ocak 2013, 16:19:18
textBox1.AppendText(bilgi); kodunu

textbox1.text=bilgi:
şeklinde kullanabilirsin.

Böyle yaptığım da veri kaybı oluyor. ör değer 22.71 ise ki zaman 2.71 kimi zaman 71 vb değerler alıyorum.

mozkan87

İşlenciden gönderdiğiniz veriye line terminator ekleyin "\r\n". Daha sonra c# ta veri okunan
bilgi = serialPort1.ReadExisting().ToString();
satırını
bilgi = serialPort1.ReadLine().ToString();
olarak değiştir.

hasankomur

#5
Alıntı yapılan: mozkan87 - 20 Ocak 2013, 17:55:04
İşlenciden gönderdiğiniz veriye line terminator ekleyin "\r\n". Daha sonra c# ta veri okunan
bilgi = serialPort1.ReadExisting().ToString();
satırını
bilgi = serialPort1.ReadLine().ToString();
olarak değiştir.

Teşekkürler işe yaradı.
Fakat kodda şöyle bir değişiklik yaptım

textBox1.AppendText(bilgi);  yerine

textBox1.Text=bilgi;

yazdım.
Anladığım kadarıyla textBox1.AppendText(bilgi); aldığı bilgiyi bir önceki bilginin üzerine ekliyor.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Sıcaklık_analizi_rs232_16f877a_lm35_
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            serialPort1.Open();
        }

        string bilgi;
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            bilgi = serialPort1.ReadLine().ToString();
            this.Invoke(new EventHandler(goster_yazi));
        }
        
        private void goster_yazi(object o, EventArgs e)
        { 
            textBox1.Text = bilgi;
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            serialPort1.Close();
        }
      
    }
}

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

atillaa

merhaba arkadaşlar bende böyle bi konu açmak istiyodum gördüm ki benzer bi konu açılmış
benim amacım ise iki sayıyı göndermek ve bunları ayrı ayrı yazmak.bunu nasıl yapabilirim yardımcı olurmusunuz ?
ben şöyle bi şey düşündüm örneğin iki sayıyı gönderiyorum bunları bi değişkene atıyorum bu değişkenin ilk 8 bitini bi texte diğer 8 bitini bi texte yazdırmam çözüm olurmu ?

semih

Alıntı yapılan: atillaa - 23 Ocak 2013, 22:33:09
merhaba arkadaşlar bende böyle bi konu açmak istiyodum gördüm ki benzer bi konu açılmış
benim amacım ise iki sayıyı göndermek ve bunları ayrı ayrı yazmak.bunu nasıl yapabilirim yardımcı olurmusunuz ?
ben şöyle bi şey düşündüm örneğin iki sayıyı gönderiyorum bunları bi değişkene atıyorum bu değişkenin ilk 8 bitini bi texte diğer 8 bitini bi texte yazdırmam çözüm olurmu ?

İki sayıyı c# üzerinden işlemciye göndermek istiyorsan iki textbox ekle ve buraya girdiğin iki sayıyı da bir butonla gönder. Gönderdiğin andada buton click olayına sayıları textbox'a yazması için koz yaz.

hasankomur , sorunun çözüldü demişsin. Ben bunu farklı bir şekilde timer kullanarak yapıyordum. Dediğin kodları denedim fakat tam sonuç alamadım. Yani sıcaklık 32.07 ise 2.07 veya .07 olarak gözüküyor. Sende böyle bir sorun var mıydı acaba?