Ynt: PC YE Bağlı 18F2550 ye Blueooth dan veri göderme (Son uğraşım) C# da var :)

Başlatan baran123, 17 Ağustos 2014, 15:03:06

baran123

Merhaba dostlar, 18f2550 yi pc ye bağladım bir arayüzden veri gönderip almaya çalışıyorum.Bluetooth modülüde var devrede HC06 telefondan bir karaktere basınca pc arayüzünde çıksın istiyorum yaptım oldu hatta telefonu klavye gibi yaptım bastıgım her karakter ekranda cıkıyor bir kaç sıkıntı olsada.Amacım pc den devre ile tam iletişim sağlayıp hc06 ya AT komutlar göndermek.Ufak tefek bir kaç şey kaldı yapacağım ondan sonra gidiyorum artık elektroniğe bir sene veda malum lise son sınıfım derslere asılcam artık, tabi ne kadar uğraşsak boş diploma olmadıktan sonra inşallah iyi bir mühendis olurum da :) neyse bır kaç şey kaldı devrede yardımcı olursanız çok memnun olurum.

ilk sıkıntı veri göndermede ve almada farklı c#komutları kullanmam gerekıyor yanı Vendor ID Product ID kısmında

paylaştıgım ılk kodu kullandığım zaman pic deki bir ledi yakabiliyorum ama  2 ciyi kullandıgım zaman pıcden veri alabiliyorum sadece.Bunları global olarak 2 işlem içinde nasıl kullanılabilir hale getirebilirim ? Aslında 2 tane library kullanıyorum 2 farklı projeden almıstım bunları tek library ile de yapılabilir ama c# bilgim çok değil

public partial class Main : Form
    {
        UsbHidDevice my_hid = new UsbHidDevice();
        byte[] RecievedData = new byte[65];
        byte[] giden_buffer = new byte[64];
        byte[] gelen_buffer = new byte[64];
        byte data = 0;

        short VendorID = short.Parse("1111", NumberStyles.HexNumber);
        short ProductID = short.Parse("1111", NumberStyles.HexNumber);

2.
private void Form1_Load(object sender, EventArgs e)
        {
            this.usbHidPort1.ProductId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            this.usbHidPort1.VendorId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            usbHidPort1.CheckDevicePresent();
            CheckForIllegalCrossThreadCalls = false;
        }


c# tamamı burada

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.Globalization;
using UsbLibrary;
using USBManagement;

namespace USB_Termometre
{
    public partial class Main : Form
    {
        UsbHidDevice my_hid = new UsbHidDevice();
        byte[] RecievedData = new byte[65];
        byte[] giden_buffer = new byte[64];
        byte[] gelen_buffer = new byte[64];
        byte data = 0;

        short VendorID = short.Parse("1111", NumberStyles.HexNumber);
        short ProductID = short.Parse("1111", NumberStyles.HexNumber);

        public Main()
        {
            InitializeComponent();
            my_hid.DeviceStateChanged += new DeviceStateChangeEventHandler(OnChangeDeviceState);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            this.usbHidPort1.ProductId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            this.usbHidPort1.VendorId = Int32.Parse("1111", System.Globalization.NumberStyles.HexNumber);
            usbHidPort1.CheckDevicePresent();
            CheckForIllegalCrossThreadCalls = false;
        }
        
        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            usbHidPort1.RegisterHandle(Handle);
        }
        protected override void WndProc(ref Message m)
        {
            usbHidPort1.ParseMessages(ref m);
            base.WndProc(ref m);
        }
        private void usbHidPort1_OnDataRecieved(object sender, DataRecievedEventArgs args)
        {
            if (InvokeRequired)
            {
                try
                {
                    Invoke(new DataRecievedEventHandler(usbHidPort1_OnDataRecieved), new object[] { sender, args });
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }

            else
            {
                RecievedData = args.data;
                data = RecievedData[2];
                string gelenVeri = ((char)data).ToString();
                textBox1.Text = textBox1.Text + gelenVeri;
                textBox2.Text = data.ToString();

                if (data == 97)
                {
                    lblLed.Text = "Led : 1";
                }

                else if (data == 115)
                {
                    lblLed.Text = "Led : 0";
                }
                try 
	            {	        
		            if (data == 127)
                    {
                        textBox1.Text = textBox1.Text.Substring(0, textBox1 .Text.Length - 2);
                    }
	            }
	            catch (Exception)
	            {

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

        }
        private void usbHidPort1_OnDeviceArrived(object sender, EventArgs e)
        {
            toolStripStatusLabel1.ForeColor = Color.Green;
            toolStripStatusLabel1.Text = "USB Bağlantısı Kuruldu";
        }
        private void usbHidPort1_OnDeviceRemoved(object sender, EventArgs e)
        {
            toolStripStatusLabel1.ForeColor = Color.Red;
            toolStripStatusLabel1.Text = "USB Bağlantısı kesildi";
            lblLed.Text = "Led : -";
        }
        private void usbHidPort1_OnSpecifiedDeviceArrived(object sender, EventArgs e)
        {
            toolStripStatusLabel1.ForeColor = Color.Green;
            toolStripStatusLabel1.Text = "USB Bağlantısı Kuruldu";
        }
        private void usbHidPort1_OnSpecifiedDeviceRemoved(object sender, EventArgs e)
        {
            toolStripStatusLabel1.ForeColor = Color.Red;
            toolStripStatusLabel1.Text = "USB Bağlantısı kesildi";
            lblLed.Text = "Led : -";
        }
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                if (!my_hid.IsOpen)
                {
                    if (my_hid.OpenPipe(VendorID, ProductID))
                    {
                        my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                        my_hid.DeviceArrived += new HidDeviceArrivedEventHandler(OnDeviceAttached);
                        my_hid.DeviceRemoved += new HidDeviceRemovedEventHandler(OnDeviceDetached);
                    }

                    else
                    {
                        toolStripStatusLabel1.ForeColor = Color.Red;
                        toolStripStatusLabel1.Text = "Cihaz Bulunamadı !";
                    }
                }
            }

            catch
            {
                return;
            }
        }
        public delegate void OkuHandler();
        private void OnChangeDeviceState(object sender, DeviceStateChangeEventArgs e)
        {
            if (e.CurrentState == DeviceState.Opened)
            {
                toolStripStatusLabel1.Text = "USB Bağlantısı Kuruldu";
            }
            else if (e.CurrentState == DeviceState.Closed)
            {
                toolStripStatusLabel1.Text = "USB Bağlantısı Kesildi";
            }
            else if (e.CurrentState == DeviceState.Waiting)
            {
                toolStripStatusLabel1.Text = "USB Bağlantısı Bekleniyor";
            }
            else if (e.CurrentState == DeviceState.Ready)
            {
                toolStripStatusLabel1.Text = "USB Bağlantısı Bekleniyor";
            }
            else
            {
                toolStripStatusLabel1.Text = "Device State Changed!! Curren State : None";
            }
        }

        private void OnDeviceAttached(object sender, EventArgs e)
        {
            bool Success;

            toolStripStatusLabel1.Text = "Atached Device";
            Success = my_hid.OpenPipe(1111, 1111);
            if (Success)
            {
                toolStripStatusLabel1.Text = "Connected";
            }
        }
        private void OnDeviceDetached(object sender, EventArgs e)
        {
            toolStripStatusLabel1.Text = "Detached Device";
            if (my_hid.IsOpen) my_hid.ClosePipe();

            toolStripStatusLabel1.Text = "Device Disconnected";
            this.Text = "Device Waiting...";
        }
        
        private void btnClr_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
        }

        private void brnBilgi_Click(object sender, EventArgs e)
        {
            
        }
        private void btnCikis_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Çıkış yapmak istediğinizden emin misiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (result == DialogResult.Yes)
            {
                Environment.Exit(1);
            }
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

            if (my_hid.IsOpen)
            {
                my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                my_hid.ClosePipe();
            }
        }

        private void btnLedOn_Click(object sender, EventArgs e)
        {
            if (my_hid.IsOpen)
            {

                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'c';

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                else
                    my_hid.WritePipe(giden_buffer, TransactionType.Control);

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Interrupt);
                else
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);

                label1.Text = "Led 2 : " + gelen_buffer[4].ToString();
            }

            else
            {
                toolStripStatusLabel1.Text = "Disconnect !";
            }
        }

        private void btnLedOff_Click(object sender, EventArgs e)
        {
            if (my_hid.IsOpen)
            {
                giden_buffer[1] = (byte)'Q';
                giden_buffer[2] = (byte)'d';

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.WritePipe(giden_buffer, TransactionType.Interrupt);
                else
                    my_hid.WritePipe(giden_buffer, TransactionType.Control);

                if (my_hid.IsWindowsXpOrLater)
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);
                else
                    my_hid.ReadPipe(ref gelen_buffer, 64, TransactionType.Control);

                label1.Text = "Led 2 : " + gelen_buffer[4].ToString();
            }

            else
            {
                toolStripStatusLabel1.Text = "Disconnect !";
            }
        }
    }
}


ccs c kod

#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN,NOMCLR
#use delay(clock=48000000)
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

#define USB_HID_DEVICE     TRUE             
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT    //Uçnokta1'de Kesme transferi aktif
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT    
#define USB_EP1_TX_SIZE    64                      //Uçnokta1 için maksimum alınacak ve gonderilecek
#define USB_EP1_RX_SIZE    64 
#define UcNokta1  1 

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

#include <pic18_usb.h>                             //USB Konfigurasyon Dosyaları
#include <USB_Driver.h>                            //USB konfigurasyon bilgileri bu dosyadadır.
#include <usb.c>                                   //USB Konfigurasyon Dosyaları 

#define kactane        gelen_paket[0]
#define isaret         gelen_paket[1]
#define kontrol        gelen_paket[2]
#define giden          giden_paket[3]

int bayrak = 0;
int8 gelen_paket[64];
int8 giden_paket[64];

#int_rda
void modul_kesmesi()
{ 
   disable_interrupts(int_rda);
   char gelen;
   
   bayrak++; 
   
   if(bayrak == 1)
   {
      gelen = getch();   
   
      if(gelen == 'a')
      {
         output_high(pin_B6);
      }
      
      if(gelen == 's')
      {
         output_low(pin_B6);
      }
      
      giden_paket[1] = (int8)gelen;  
      
      usb_put_packet(UcNokta1, giden_paket, 64, USB_DTS_TOGGLE);
      
      bayrak = 0;
      gelen = 0;
   }
}

void main(void)
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   set_tris_b(0x00);
   output_b(0x00);
   set_tris_c(0x80);
   
   usb_init();                      
   usb_task();                    
   usb_wait_for_enumeration();
   
   output_high(pin_b7);
   enable_interrupts(GLOBAL);
   
   while(TRUE)
   {      
      while(usb_enumerated())
      {
         enable_interrupts(int_rda);
         
         if (usb_kbhit(1))
         {           
            usb_get_packet(UcNokta1, gelen_paket, 64);
            
            if(isaret == 'Q')
            {
               switch(kontrol) 
               {               
                  case 'c':
                  output_high(pin_b7);
                  giden = 1;
                  usb_put_packet(1, giden_paket, 64, USB_DTS_TOGGLE);
                  break; 
                  
                  case 'd':
                  output_low(pin_b7);
                  giden = 0;
                  usb_put_packet(1, giden_paket, 64, USB_DTS_TOGGLE);
                  break;             
               }
            } 
         }
      }
   }
}


diğer bir gözüme çarpan nokta ise hatalı bilgi alma, bazen yanlıs karakterle alıyor hatta cogunlukla diyebilirim bunun için baud mu değiştirmek gerek li ?

mesaj birleştirme:: 17 Ağustos 2014, 15:04:08

Ekleme : library dosyaları : http://www.dosya.tc/server34/OJPLpk/libraryler.rar.html

baran123