Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: Magic_Key - 13 Aralık 2015, 13:17:35

Başlık: C# tan PIC e veri gönderme sorunu
Gönderen: Magic_Key - 13 Aralık 2015, 13:17:35
Arkadaşlar C# tan rs232 seri iletişim yoluyla PIC e veri gönderirken sorun yaşamıyorum ama PIC ten C# a veri gönderirken sorunla karşılaşıyorum. Sorunu özetlemek gerekirse C# tarafından butona basıldığında PIC ten "Veri Gonderildi..." iletisini göndermek istiyorum. Butona ilk basıldığında veri düzgün geliyor ama ikinci basışımda "eri Gonderildi..." üçüncü basışımda "Gonderildi..." dördüncüde "..." böyle gidiyor. Ben her basışımda "Veri Gonderildi..." yazısını textbox a yazmak istiyorum. Yardımlarınız için şimdiden teşekkür ederim.

CCS C kodu:
#include <lcd_sicaklik.h>
#include <lcd.c>

int veri;

unsigned long int deger;
float voltaj, sicaklik;

#int_rda
void kesme()
{
disable_interrupts(int_rda);
veri=getch(); 
}

void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_a(0x01);
set_tris_b(0x00);

lcd_init();

setup_adc(adc_clock_div_32);
setup_adc_ports(AN0);

set_adc_channel(0);
delay_us(20);

enable_interrupts(GLOBAL);
int z=0;
   while(TRUE)
   {
    lcd_send_byte(0,0x0d);
    enable_interrupts(int_rda);
   
    deger=read_adc();
    voltaj=(0.0048828125*deger)*1000;
    sicaklik=(voltaj/10)+2;
    lcd_gotoxy(1,1);
    printf(lcd_putc,"Sicaklik=%5.1f",sicaklik);
       
  if(veri==10)
  {
  z++;              //veri her gönderildiğinde 1 değer arttırılıp lcd ye yazılıyor.
  veri=0;                   // bir sonra ki gönderim için sıfırlanıyor.
printf("VERI GONDERILDI...\n");            //PIC e göndermek istediğim ifade
       lcd_gotoxy(1,2);
      // printf("%f5.1",sicaklik);                //ilk sorunu halledersem sicaklik değerini göndereceğim
       printf(lcd_putc,"Veri=%d",z);          //verinin gönderilişini test etmek için yazdım
  } 
}
}

C# kodu:
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;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.Enabled = false;
        }

        private void Baglan_Click(object sender, EventArgs e)
        {
            try
            {
                if (!serialPort1.IsOpen)
                {
                    serialPort1.Open();
                    PortName.Text = "PortName:" + serialPort1.PortName;
                    BaudRate.Text = "BaudRate:" + serialPort1.BaudRate;
                    DataBits.Text = "DataBits:" + serialPort1.DataBits;
                    Parity.Text = "Parity:" + serialPort1.Parity;
                    StopBits.Text = "StopBits:" + serialPort1.StopBits;
                    HandShake.Text = "HandShake:" + serialPort1.Handshake;

                    Sicaklik.Enabled = true;
                    textBox1.Enabled = true;
                }
            }
            catch (Exception hata)
            {
                MessageBox.Show(hata.Message);
            }
        }

        private void Kopar_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                PortName.Text = "PortName:";
                BaudRate.Text = "BaudRate:";
                DataBits.Text = "DataBits:";
                Parity.Text = "Parity:";
                StopBits.Text = "StopBits:";
                HandShake.Text = "HandShake:";

                Sicaklik.Enabled = false;
                textBox1.Enabled = false;
            }
        }

        string gelen_veri;
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            gelen_veri = serialPort1.ReadExisting();

        }
        byte[] veri = { 0 };

        private void Sicaklik_Click(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;       //çakışan threadleri önlemek için
            textBox1.Text = gelen_veri.ToString();           // sicaklik butonuna bastığımda textboxta Veri Gönderildi... verisini yazmak için
        }

        private void Gonder_Click(object sender, EventArgs e)
        {
            veri[0] = 10;                                            //Gonder butonuna basıp veriyi 10 yapıyorum ve PIC e gönderiyorum sonra Sicaklik butonuna basınca
                                                                            //PIC o değeri kontrol edip Veri Gonderildi yazısını gönderiyor.     
            serialPort1.Write(veri, 0, 1);
        }
    }
}
Başlık: Ynt: C# tan PIC e veri gönderme sorunu
Gönderen: Gökhan BEKEN - 14 Aralık 2015, 02:01:07
Mcu ile veri gönderirken verinin sonuna enter karakteri ekleyin.
c# kısmında ise gelen_veri = serialPort1.ReadExisting(); değil gelen_veri = serialPort1.ReadLine(); kullanın.
Başlık: Ynt: C# tan PIC e veri gönderme sorunu
Gönderen: Magic_Key - 14 Aralık 2015, 08:06:48
Teşekkür ederim. Dediğinizi yapınca sorun çözüldü :)
Başlık: Ynt: C# tan PIC e veri gönderme sorunu
Gönderen: sifirzero - 10 Ağustos 2016, 08:47:09
Enter karakteri nedir arkadaşlar
Başlık: Ynt: C# tan PIC e veri gönderme sorunu
Gönderen: muhittin_kaplan - 10 Ağustos 2016, 09:02:41
vb.crlf
(carriage return + line feed)

"key(13)"

dür.
Başlık: Ynt: C# tan PIC e veri gönderme sorunu
Gönderen: sifirzero - 10 Ağustos 2016, 09:05:18
Çok saolasın anladım