port açma sorunu

Başlatan chezque, 28 Nisan 2012, 01:41:10

chezque

arkadaşlar ben bir proje yapıyorum da c#ta yazdığım programı çalıştırdığımda port açılamadı hatası alıyorm sürekli. bunun sebebi nedir acaba? rs232 kablosuyla bilgisayar-max232 devrem arasında bağlantıyı sağladım. yani kurdum. derdimi ne ölçüde anlattım bilemedim ama ilgilenen olursa sevinirim.

        public void Connect()
      {
            Sp.BaudRate = 9600;
            Sp.Parity   = 0;
            Sp.DataBits = 8;
          
      }

bağlantıyı kurmak için bu kodları kullandım.

kralsam

Satır değerlerinin sonrasında data alıp verirken Sp.Open(); yazmalı ve bittiğinde Sp.Close(); yazmalısın.

chezque

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;
using System.Threading;
using System.IO.Ports;
using System.IO;


namespace SesTanima
{
    public partial class Form1 : Form
    {
        // Global Değişkenler
        private SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
        private SerialPort Sp = new SerialPort();


        // Yapıcı metot
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadGrammars();
            StartRecognition();
            Connect();   
        }
        // SeriPort Ayrları
        public void Connect()
        {
            Sp.BaudRate = 9600;
            Sp.Parity = 0;
            Sp.DataBits = 8;

        }

        // Metotlar
        // Tanıma motoru tarafından tanınması gereken kelimeleri belirtiyoruz.
        private void LoadGrammars() 
        {
            Choices choices = new Choices(new string[] {"Start", "Stop","Left","Right","Back"});
            GrammarBuilder grammarBuilder = new GrammarBuilder(choices);      
            grammarBuilder.Culture = System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag("en-US");
            Grammar grammar2 = new Grammar(grammarBuilder);
            recognizer.LoadGrammar(grammar2);
            

        }

        // Ses tanıma işlemi sırasında ve sonrasında meydana gelecek olayları belirtiyoruz.
        // Tanıma işlemini başlatıyoruz.
        private void StartRecognition() 
        {

            // Belirli sesleri tanıma işlemindeki ana olaylar
            recognizer.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(recognizer_SpeechDetected);
            recognizer.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(recognizer_SpeechRecognitionRejected);
            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
            recognizer.RecognizeCompleted += new EventHandler<RecognizeCompletedEventArgs>(recognizer_RecognizeCompleted);

            
            // Ses tanıma işlemini başlatıyoruz.
            Thread t1 = new Thread(delegate()
            {            
                recognizer.SetInputToDefaultAudioDevice();
                recognizer.RecognizeAsync(RecognizeMode.Single);
            });

            t1.Start();

        }


        // Olaylar
        // Kullanıcı konuşmaya başladığı anda tetiklenen olay
        private void recognizer_SpeechDetected(object sender, SpeechDetectedEventArgs e) 
        {
            textBox1.Text = "Ses Tanınıyor";
            
        }

        // Kullanıcının konuştuğu kelimeler gramerde bulunuyorsa tetiklenen olay
        private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            if (Sp.IsOpen) Sp.Close();

            
            try
            {
                Sp.Open();
                //Gelen değer Go ise
                if (e.Result.Text == "Start")
                {
                    pictureBox2.Image = Properties.Resources.ust_on;
                    pictureBox1.Image = Properties.Resources.alt_off;

                    Send_Bilgi("2");


                }
                //Gelen değer Back ise
                else if (e.Result.Text == "Back")
                {
                    pictureBox1.Image = Properties.Resources.alt_on;
                    pictureBox2.Image = Properties.Resources.ust_off;

                    Send_Bilgi("3");


                }
                //Gelen değer Right ise
                else if (e.Result.Text == "Right")
                {
                    pictureBox3.Image = Properties.Resources.sol_on;
                    Send_Bilgi("4");
                    for (int i = 0; i < 2000; i++)
                    {
                        int k = i;
                    }
                    pictureBox3.Image = Properties.Resources.sol_off;
                }
                //Gelen değer Left ise
                else if (e.Result.Text == "Left")
                {
                    pictureBox4.Image = Properties.Resources.sag_on;
                    Send_Bilgi("5");
                    Thread.Sleep(2000);
                    pictureBox4.Image = Properties.Resources.sag_off;
                }
                //Gelen değer Stop ise
                else if (e.Result.Text == "Stop")
                {
                    ClearPic();
                    Send_Bilgi("1");
                }


                textBox1.Text = e.Result.Text;

            }
            catch //Port açılmazsa hata mesajı ver
            {
                MessageBox.Show("COM1 açılamıyor! Portun başka bir program tarafından kullanılmadığına emin olun.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        public void ClearPic()
        {
            pictureBox1.Image = Properties.Resources.alt_off;
            pictureBox2.Image = Properties.Resources.ust_off;
            pictureBox3.Image = Properties.Resources.sol_off;
            pictureBox4.Image = Properties.Resources.sag_off;
        }

        // Konuşulan kelimeler gramerde bulumuyorsa tetiklenen olay
        private void recognizer_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e) 
        {
            textBox1.Text = "Ses Tanıma İşlemi Başarısız.";
        }

        // Tanıma işlemi başarılı olsun veya olmasını sonuçlandığında tetiklenen olay
        private void recognizer_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e) 
        {
            recognizer.RecognizeAsync();
        }

       
        //Duruma göre bilgiyi gönderiyoruz
        public void Send_Bilgi(string msg)
        {
            if (!Sp.IsOpen) Sp.Open();
                string msg1 = msg;
                Sp.Write(msg1);
                Sp.Close(); 
            
        }
       
    }
}


kullandığım kodlar bunlar. hata neresinde anlamadım. "COM1 açılamıyor! Portun başka bir program tarafından kullanılmadığına emin olun." hatası alıyorum sürekli. kodu siliyorum yine bunu cıkarıyor karşıma. anlamadım.

kralsam

#3
1. ihtimal: Bilgisayar COM1 olarak bluetooth yada başka bir birimi görüyor olabilir.
2. ihtimal: Ben tanımlamada hangi port olduğunu belirtiyorum ama senin uygulamada görünmüyor. Birde aşağıdakini denermisin?

private SerialPort Sp = new SerialPort();

yerine...

private SerialPort Sp = new SerialPort("COM1",9600); //istediğin port numarası..(cihazın bağlı olan com portu olacak!)

chezque

rs232 ile bağlantıyı kuruyorum yalnız ben. laptopta 4 usb girişinin 3ü dolu. bu sorun olur mu?

kralsam

#5
Hocam FxDev arkadaşımızın geliştirmiş olduğu uygulamayı indirip çalıştırırsan sana uygun COM port isimlerini listeleyecektir. Listeeki isimleri benim son yazdıpım formatta Tırnak işareti içindeki "COM1" ifadesini değiştirirsen o porta bağlanır. En kolay o şekilde bulabilirsin.

Yada windows işletim sistemi kullanıyorsan bilgisayarıma sağ tıkla ve "Yönet" yazısına gir. Orada donanımlar ile ilgili bir kısım vardı oradan rs232 dönüştürücünün portunu öğren o şekilde dene. Ben Linux kullandığımdan sekmeleri tam hatırlayamadım.

Program: http://www.4shared.com/file/b5LRMUzF/Serial_Port_Terminal_V11_-_FxD.html

kaynak: http://www.fxdev.org/muhendislik/c-sharp/


@Düzenleme: Eğer 4shared e giremiyorsan benim GPS için yaptığım bir uygulamanın açılış menüsünü o amaç için kullanabilirsin.
program: http://mf2.dpu.edu.tr/%7Eoyilmaz/GPS_DPU-MCU.rar

chezque

şimdi oldu hocam. vallahi ne kadar teşekkür etsem azdır. gece gece kurtardın beni şu azaptan :))

kralsam

Sorun çözüldü ise sıkıntı yok :) Kolay gelsin...