Технический форум по робототехнике.
@vlad@ » 29 май 2010, 11:51
Здравствуйте. Хочу написать программу для кпк с использованием bluetooth. Может у кого нибудь есть исходники или сами помогут?Буду благодарен любой помощи
Спасибо
Последний раз редактировалось
@vlad@ 01 июн 2010, 20:38, всего редактировалось 1 раз.
=DeaD= » 29 май 2010, 12:04
Вы для начала укажите операционку вашего КПК и среду разработки в которой работать умеете.
@vlad@ » 29 май 2010, 14:03
Кпк asus p535 WM6. Работаю в Visual studio 2008 C#
@vlad@ » 01 июн 2010, 20:37
И так написал прогу, получается что действую через виртуальный ком порт.Вот программа:
private void config()
{
port.PortName = "COM7";
port.WriteTimeout = 500;
port.ReadTimeout = 500;
port.BaudRate = 115200;
port.Open();
}
private void forward()
{
port.WriteLine("0x01");
}
private void Form1_Load(object sender, EventArgs e)
{
config();
}
Но не работает((Виртуальный кпк гооворит что порт закрыт. В риальном вот что выдает:
в
System.IO.Ports.SerialPort.ThrowIfClose
d()
в
System.IO.Ports.SerialPort.Write(String text)
в
System.IO.Ports.SerialPort.WriteLine(string text)
в robot.Form1.pitureBox1_click(object sender, EventArgs e)
в
System.Windows.Forms.Control.WnProc(WM wm, Int32 lParam)
в
System.Windows.Forms.Control._Intern alWmProc(WM wm, Int32 wParam, Int32 lParam)
в
Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
в
System.Windows.Forms.Application.Run(Form fm)
в robot.Program.Main()
Все com порты перебрал...В чем может быть причина?
=DeaD= » 01 июн 2010, 20:43
А на КПК нет утилиты по обзору СОМ-портов? Чтобы глянуть где что? Модуль вообще подружить не забыли с КПК?
Angel71 » 02 июн 2010, 03:18
System.IO.Ports.SerialPort.GetPortNames() возвращает string[] со всеми портами в системе.
если он хоть какие-то порты вернул, значит деле в настройках (BaudRate, DataBits, StopBits,...)
@vlad@ » 02 июн 2010, 15:12
В моей программе есть небольшая утила по обзору com портов. Попробовал все-ничего...Блютуз включал, но нисчем не соеденял. ЧТо делать дальше-вообще не знаю
Добавлено спустя 3 минуты 14 секунд:
Angel71 да имеется такая сточка какк string[] ports = System.IO.Ports.SerialPort.GetPortNames(); Возратила несколько портов, пробовал все-прога всеравно вылетает при попытке передать число.
=DeaD= » 02 июн 2010, 15:13
Так ничего и не должно работать. Сначала с КПК найдите в окружении этот модуль, законнектитесь с ним, введите пин код, как только два устройства подружатся - у вас должен появится СОМ-порт новый, "Исходящее соединение", если как на винде будет. Вот через него и работайте. А поиск новых устройств и пин-коды через службу СОМ-порта конечно никогда не будут работать
@vlad@ » 02 июн 2010, 15:22
Angel71 все настройки имеются-хотя не факт что правильные.
port.PortName = "COM7";
port.WriteTimeout = 500;
port.ReadTimeout = 500;
port.BaudRate = 115200;
port.Open();
=DeaD= спасибо, щас проверим...
Добавлено спустя 2 минуты 35 секунд:
Правдо блютуза еще нету(модуля) щас попробую с другим кпк соедениться. Но потом конечно куплю=)
Добавлено спустя 4 минуты 1 секунду:
Неа, новый com порт при сопряжении 2 кпк не появился...Щас попробую через старые работать. 1,7,6,4,2,9
=DeaD= » 02 июн 2010, 15:24
Тяжело без модуля искать ком-порт на котором этот модуль зацеплен
@vlad@ » 02 июн 2010, 15:36
ну я имею ввиду блютуза для кпк нет
Angel71 » 02 июн 2010, 16:16
ну... про все эт вы сильно горячитесь. из основных ещё есть DataBits, StopBits, Parity, Handshake. есть и другие параметры, но на них споткнуться при попытке открыть порт кажись нереально.
второй нюанс, а вы случаем не забыли в кэтчь закинуть:
InvalidOperationException
ArgumentOutOfRangeException
ArgumentException
IOException
UnauthorizedAccessException
тогда и к гадалке ходить не прийдётся, сразу будет понятно чего не соединяет, да и прога отучится вылетать
@vlad@ » 03 июн 2010, 00:58
Спасибо уезжал на весь день-с портами пока что не успел попробовать. За ваш кусочек кода тоже спасибо, не пробовал=)ЗАвтро все постараюсь проверить
Angel71 » 03 июн 2010, 01:19
ну код выглядел бы примерно так, а то был список эксэпшинов из msdn`а
- Код: Выделить всё • Развернуть
try
{
if (!port.IsOpen && "" != port.PortName) port.Open();
}
catch (InvalidOperationException)
{
//The specified port is open.
}
catch (ArgumentOutOfRangeException)
{
//One or more of the properties for this instance are invalid.
//For example, the Parity, DataBits, or Handshake properties are not valid values;
//the BaudRate is less than or equal to zero;
//the ReadTimeout or WriteTimeout property is less than zero and is not InfiniteTimeout.
}
catch (ArgumentException)
{
//The port name does not begin with "COM".
//- or -
//The file type of the port is not supported.
}
catch (IOException)
{
//The port is in an invalid state.
//- or -
//An attempt to set the state of the underlying port failed. For example, the parameters passed from this SerialPort object were invalid.
}
catch (UnauthorizedAccessException)
{
//Access is denied to the port.
}
finally { //... }
при закрытии может только вот этот нарисоваться InvalidOperationException (The specified port is not open)
Последний раз редактировалось
Vooon 03 июн 2010, 18:22, всего редактировалось 1 раз.
Причина: [code=cs]
ToniPizecato » 03 июн 2010, 11:36
очень очень давно делал для ИК, когда они еще были.
- Код: Выделить всё • Развернуть
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net.Sockets;
using System.Net;
namespace IrDa
{
public partial class Form1 : Form
{
System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort();
public Form1()
{
InitializeComponent();
button1.Enabled = false;
try
{
Cursor.Current = Cursors.WaitCursor;
sp.PortName = "COM6";
sp.BaudRate = 115200;
sp.Parity = System.IO.Ports.Parity.None;
sp.StopBits = System.IO.Ports.StopBits.One;
sp.DataBits = 8;
sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(sp_DataReceived);
sp.Open();
button1.Enabled = true;
Cursor.Current = Cursors.Default;
}
catch (Exception ex)
{
if (sp.IsOpen) { sp.Close(); }
MessageBox.Show(ex.Message);
}
}
void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
label1.Text = sp.ReadExisting();
}
private void Form1_Closing(object sender, CancelEventArgs e)
{
if (sp.IsOpen) { sp.Close(); }
}
private void button1_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
sp.WriteLine("hello");
Cursor.Current = Cursors.Default;
}
}
}
Последний раз редактировалось
Vooon 03 июн 2010, 18:21, всего редактировалось 1 раз.
Причина: [code=cs]