seri porttan gerçek zamanlı veri okuma yardım.

Başlatan cebeci52, 06 Eylül 2014, 17:48:32

Gökhan BEKEN

Çalışma zamanında aldığınız bir hata değil mi?
Tam hatırlamıyorum verinin sonuna sadece \r  değilde  \r\n  ekleyerek deneyin.
Özel mesaj okumuyorum, lütfen göndermeyin.

omereliusuk

 serial port read existing bölümüne
   int a = 0x00001000;
            while (Convert.ToBoolean(a--)) ;//tüm verini gelmesini bekliyoruz.
           veri = serialPort1.ReadExisting();
if (veri[veri.Length - 1] == (char)0x0d)

               textBox1.Text = veri;
               listBox1.Items.Add(veri);


verici bölümüne
void usb_yaz()
  {
    char i=0;
txt[0]=0x20;
txt[1]=0x20;
    for(i=2;i<10;i++)    txt=volt[(i-2)];

txt[10]=0x0d;

    UART3_Write_Text(txt);

}
tamam olması gerekiyor. tabi yatmadıysan.

barisertekin

Veriyi tam olarak almak istiyorsak ReadExisting(); değil ReadLine() kullanmalısınız. Verinin sonunada \n  koymalısınız.

ReadLine() : SerialPort sınıfının ReadLine isimli fonksiyonu seri portdan NewLine (\n) karakteri gelene kadar tanımladığınız ReadTimeout süresince bekler. Gelen veriyi size string türünden geri döndürür.

cebeci52

#33
omereliusuk dediğini yapınca donuyor program







mesaj birleştirme:: 08 Eylül 2014, 03:18:25

bu verinin sonuna \n nasıl koyacazzz



mesaj birleştirme:: 08 Eylül 2014, 03:22:24





sorunu çözemedimm


mesaj birleştirme:: 07 Eylül 2014, 13:41:07

Arkadaşlar kendi verimi geçtim 4 harf gönderiyorum onu dahi sıralı almıyor gönderdiğim veriler

mikrodenetleyici tarafı

void usb_yaz()
  {
   
    txt[0]='a';
    txt[1]='b';
    txt[2]='c';
    txt[3]='d';

    UART3_Write_Text(txt);
  }
C# a gelince gözüken ise



bu şekilde bozuk alıyor.

C# veri alma kodu

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


            string line = serialPort1.ReadExisting();
       
              textBox1.Text = line;
              listBox1.Items.Add(line);
        }

ctn1905

pic' den data yollarken datanın sonuna 13 ekle yani putc(13);  yaz alınan verilerin sonuna otomatik enter koymuş olursun böylece. c# tarafında da serialPort1.readTo("\n");  komutu kullan data alırken.

omereliusuk

   int a = 0x00001000; while (Convert.ToBoolean(a--)) ;                     //tüm verini gelmesini bekliyoruz.
           veri = serialPort1.ReadExisting();
veya
readLine
ne yazarsan yaz
beklemeyi yap çalışması gerekiyor.
yıllar önce yaptığım yazılımda mecbur kalmasam bekleme koymazdım herhalde ki koymuşum.

cebeci52

#36
ctn1905 pic değil arm kullanıyorummm

dediklerini yaptım readTo("\n") okuma yapmıyorr.

fthsev

C# tarafına


void oku()
        {

            line = serialPort1.ReadLine();
            textBox1.Text = line;
            listBox1.Items.Add(line);
            line = string.Empty;
            try
            {
                serialPort1.DiscardInBuffer();
                serialPort1.DiscardOutBuffer();
            }
            catch { }
            

        
        }

        
            

        public void serialPort1_DataRecived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
        
            Thread paralel1 = new Thread(new ThreadStart(oku));
            paralel1.Start();
            paralel1.Join();
               
        }


kodunu yaz ve form1_Load bölümüne de

        CheckForIllegalCrossThreadCalls = false; 

satırını ekle

pic kısmında veriyi gönderirken, gönderdiğin dizinin son elemanına 0x0d (\n) karakterinin yaz. 0x0d =\n karakteri değilse data okuyamazsın (\n karakteri olması lazım)

Mesela gönderdiğin data üç elaman içeriyor a,b,c

txt[0]='a';
txt[1]='b';
txt[2]='c';

txt[3]='\n'; olması lazım.

txt[3]='\n';  satırı hata verirse txt[3]= 0x0d; ile değiştir.




cebeci52

fthsev bunu da deneyecem şimdii denemediğim kod kalmadıı zatenn

fthsev

Alıntı yapılan: cebeci52 - 07 Eylül 2014, 15:57:59
fthsev bunu da deneyecem şimdii denemediğim kod kalmadıı zatenn

Herhangi bir hata alırsanız

line=string.empty;  satırını kaldırınız

cebeci52


fthsev

using System.Threading;

satırını kodun başına ekle

cebeci52

ekledim hata verdi yine çalışıyor donuyor sonra






fthsev

#43
Alıntı yapılan: cebeci52 - 07 Eylül 2014, 16:11:37
ekledim hata verdi yine çalışıyor donuyor sonra







Bğalantı noktası kapalı serialPort1.Open();  satırını çalıştırdığından emin misin?

Bağalntıyı yaptın mı?

mesaj birleştirme:: 07 Eylül 2014, 16:17:10

Kodun tamamını kod yükleme seçeneği ile yüklermisin?

Mesaj yazarken yukarıdaki ifadelerin üzerinde # karakteri ona basınca kod ekleyebilirsin.

cebeci52

#44
C# kodları

  private void buttonStart_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = comboBox1.SelectedItem.ToString();
            serialPort1.BaudRate = 9600;

            serialPort1.Open();
         
            serialPort1.DataReceived += serialPort1_DataReceived;
         
           
            if (serialPort1.IsOpen)
            {
                buttonStart.Enabled = false;
                buttonStop.Enabled = true;
             

               
            }
    }
private void Form1_Load(object sender, EventArgs e)
        {

           
            comboBox1.DataSource = SerialPort.GetPortNames();
                   
            CheckForIllegalCrossThreadCalls = false;
             
        }

  void oku()
        {
            string line;
            line = serialPort1.ReadLine();
            textBox1.Text = line;
            listBox1.Items.Add(line);
         // line = string.Empty;
            try
            {
                serialPort1.DiscardInBuffer();
                serialPort1.DiscardOutBuffer();
            }
            catch { }

        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
       
            Thread paralel1 = new Thread(new ThreadStart(oku));
            paralel1.Start();
            paralel1.Join();
         
        }







mesaj birleştirme:: 07 Eylül 2014, 16:24:07

C# kodları
private void buttonStart_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = comboBox1.SelectedItem.ToString();
            serialPort1.BaudRate = 9600;

            serialPort1.Open();
          
            serialPort1.DataReceived += serialPort1_DataReceived;
          
            
            if (serialPort1.IsOpen)
            {
                buttonStart.Enabled = false;
                buttonStop.Enabled = true;
             

                
            }
    }
 private void Form1_Load(object sender, EventArgs e)
        {

           
            comboBox1.DataSource = SerialPort.GetPortNames();
                    
            CheckForIllegalCrossThreadCalls = false;
              
        }

  void oku()
        {
            string line;
            line = serialPort1.ReadLine();
            textBox1.Text = line;
            listBox1.Items.Add(line);
         // line = string.Empty;
            try
            {
                serialPort1.DiscardInBuffer();
                serialPort1.DiscardOutBuffer();
            }
            catch { }

        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
        
            Thread paralel1 = new Thread(new ThreadStart(oku));
            paralel1.Start();
            paralel1.Join();
         
        }