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.
Satır değerlerinin sonrasında data alıp verirken Sp.Open(); yazmalı ve bittiğinde Sp.Close(); yazmalısın.
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.
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!)
rs232 ile bağlantıyı kuruyorum yalnız ben. laptopta 4 usb girişinin 3ü dolu. bu sorun olur mu?
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 (http://www.4shared.com/file/b5LRMUzF/Serial_Port_Terminal_V11_-_FxD.html)
kaynak: http://www.fxdev.org/muhendislik/c-sharp/ (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 (http://mf2.dpu.edu.tr/%7Eoyilmaz/GPS_DPU-MCU.rar)
şimdi oldu hocam. vallahi ne kadar teşekkür etsem azdır. gece gece kurtardın beni şu azaptan :))
Sorun çözüldü ise sıkıntı yok :) Kolay gelsin...