Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.171] |
|
Сообщ.
#1
,
|
|
|
Это не вопрос. Это пост для тех, кто захочет написать что-нибудь с GPS. Думаю, я достаточно его оформил, чтобы в поиске было легче найти =)
Нашел решение - помоги другому. Итак, нам надо "припаять" GPS к программе. У нас есть КПК с GPS модулем на COM порту, подключенном, к примеру, на COM8. Действия: 1) Качаем сырцы для чтения данных с COM порта OpenNETCF.IO.Serial. http://www.opennetcf.com/sharedsource/serial.ocf или прямой линк для ленивцев - http://www.opennetcf.com/downloads/download.aspx?s=OpenNETCF.IO.Serial 2) Распаковываем скачанный архив в "куда-нибудь". Достаем оттуда файлы: СommAPI.cs DCB.cs Port.cs PortCapabilities.cs PortSettings.cs И копируем в папку проекта. 3) Добавляем эти файлы (в среде MS VS) в проект (Project->Add Existing Item) 4) В using ваших файлов проекта добавляем using System.Threading; 5) Пользуемся. А вот тут поподробнее: public class Form1 : System.Windows.Forms.Form { // COM port variables public static Int32 COM_PORT = 8; public static Int32 COM_RATE = 115200; public static Int32 COM_THRESHOLD = 1; public static Int32 COM_BUFFER = 1024; public static Port COM_port; private DetailedPortSettings COM_portSettings; public static string COM_SERBUF = ""; byte[] COM_PORT_BUFFER = new byte[4096]; public static int COM_PORT_SLEEP = 20; // ... public Form1() { InitializeComponent(); // initialize COM port // порт просто инициализируется, но не подключается и данные с него в программу не поступают COM_portSettings = new HandshakeNone(); COM_port = new Port("COM8:", COM_portSettings); COM_port.RThreshold = COM_THRESHOLD; COM_port.InputLen = COM_BUFFER; COM_port.SThreshold = COM_THRESHOLD; COM_port.DataReceived += new Port.CommEvent(COM_port_DataReceived); COM_port.OnError += new Port.CommErrorEvent(COM_port_OnError); } //обработчик ошибок private void COM_port_OnError(string Description) { this.Invoke(new EventHandler(COM_DoSerialError)); } //обработчик ошибок private void COM_DoSerialError(object s, EventArgs e) { } //функция, которая включает СОМ private void COM_Connect() { try { if (COM_port.IsOpen) { COM_port.Close(); Thread.Sleep(COM_PORT_SLEEP); } if (COM_PORT <= 9) COM_port.PortName = "COM" + COM_PORT + ":"; else COM_port.PortName = "\\\\.\\COM" + COM_PORT; switch (COM_RATE) { case 300: COM_port.Settings.BaudRate = BaudRates.CBR_300; break; case 600: COM_port.Settings.BaudRate = BaudRates.CBR_600; break; case 1200: COM_port.Settings.BaudRate = BaudRates.CBR_1200; break; case 2400: COM_port.Settings.BaudRate = BaudRates.CBR_2400; break; case 4800: COM_port.Settings.BaudRate = BaudRates.CBR_4800; break; case 9600: COM_port.Settings.BaudRate = BaudRates.CBR_9600; break; case 14400: COM_port.Settings.BaudRate = BaudRates.CBR_14400; break; case 19200: COM_port.Settings.BaudRate = BaudRates.CBR_19200; break; case 38400: COM_port.Settings.BaudRate = BaudRates.CBR_38400; break; case 56000: COM_port.Settings.BaudRate = BaudRates.CBR_56000; break; case 57600: COM_port.Settings.BaudRate = BaudRates.CBR_57600; break; case 115200: COM_port.Settings.BaudRate = BaudRates.CBR_115200; break; } COM_Log("Opening port " + COM_port.PortName); COM_port.Open(); Thread.Sleep(COM_PORT_SLEEP); COM_Log("OK"); } catch (System.Exception ex) { COM_Log("ERROR: " + ex.Message); MessageBox.Show("An error occured when trying to open COM port:\r\n" + ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); } } функция-обработчик при поступлении данных с порта private void COM_port_DataReceived() { this.Invoke(new EventHandler(COM_DoSerialUpdate)); } //чтение данных с порта private void COM_DoSerialUpdate(object s, EventArgs e) { if (!COM_port.IsOpen) return; Thread.Sleep(COM_PORT_SLEEP); COM_PORT_BUFFER = COM_port.Input; Encoding enc = Encoding.ASCII; string line = enc.GetString(COM_PORT_BUFFER, 0, COM_PORT_BUFFER.Length); // //берем данные из переменной line // } else { //leave } } конпка на форме для запуска СОМ порта private void button6_Click(object sender, EventArgs e) { COM_Connect(); } Надеюсь, достаточно ясно для тех, кому это понадобится. Если что-то не понятно - вопрос тут. На эту тему я подписан. Добавлено Удачи с COM портом! С GPS данными, надеюсь, разберетесь сами. А если не разберетесь - в этом же архиве есть папочка GPS. Там есть файлик а в нем есть функция nmea(). Ищите ее, разбирайте и используйте! |
Сообщ.
#2
,
|
|
|
p.s. линки не пашут...
http://www.opennetcf.com/sharedsource/serial.ocf http://www.opennetcf.com/downloads/downloa...NETCF.IO.Serial |
Сообщ.
#3
,
|
|
|
Пробуй искать прямо через www.opennetcf.com
И вообще лучше писать все же под CF 2.0 |
Сообщ.
#4
,
|
|
|
Цитата Slukad @ Это не вопрос. Это пост для тех, кто захочет написать что-нибудь с GPS. Думаю, я достаточно его оформил, чтобы в поиске было легче найти =) Оформил-то просто зашибись, только к GPS это имеет примерно такое же отношение, как и к балету... Для GPS первичнее NMEA, а не "как считать данные с COM-порта" |
Сообщ.
#5
,
|
|
|
Да ладно Вам. Человек то постарялся. и ответил на те вопросы, которые лично для него стали самой большой проблемой.
|
Сообщ.
#6
,
|
|
|
Тема называется
Работа с GPS под CF 1.1, COM порт, GPS, чтение данных, КПК, Pocket PC, Framework 1.1 Это, ИМХО, подразумевает в первую очередь подключение GPS. Но ты прав - нужна NMEA. Заглянем в архив, на который я дал ссылку и увидим, что там есть папка GPS, где есть код для работы именно с GPS данными. Включая парсинг сырой инфы прямо с COM порта =) Кто теперь не прав, а? А? =))) Добавлено P.S. Ссылки пашут |
Сообщ.
#7
,
|
|
|
Slukad , Огромное спасибо!!!!
Это просто безценная инфа и примеры. Всё работает. пысы Даже не представляете скока я промучился на разных языках пока ненашел эту ветку тут хоть и есть несколько опечаток но после исправления все ЗАРАБОТАЛО!!!))) |