Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Подсчёт пульсаций и пауз при приёме данных с ИК пульта


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж Terran
Новичок




Зарегистрирован: 17.12.2007
Сообщения: 11

СообщениеСр, 23-Сен-2009 18:06    Заголовок сообщения: Подсчёт пульсаций и пауз при приёме данных с ИК пульта
Цитата

Всем привет! У меня возникла проблема с которой я уже очень долго разбираюсь и всё безуспешно. К COM порту подключён ИК приёмник и я пытаюсь получить определённый сигнал при нажатии кнопки на пульте. ИК приёмник работает по DCD каналу (1-ая ножка COM порта) и я использовал API функции для считывания состояния DCD, но всё никак не могу добиться желаемого результата... Использовал GetCommModemStatus(Port, Status),WaitCommEvent(port,IpEvtMas k,nil). Нашёл на одном сайте краткое описание как это сделать, но что-то непонятно как это реализовать.
Цитата с сайта:

Цитата:
Если приемник качает информацию по DCD, нужен таймер, который будет считать время между изменениями DCD и установкой событий. Промежуток Т между 2 событиями равен нулевому биту в команде или адресе, 2Т соответственно равен 1. Время Т таймера обычно равно промежутку между старт битом и битом синхронизации. Набивая полученными битами байт - получаем искомое число - команду переданную с пульта, вначале идут несколько бит адреса блока команд и только потом сама команда. Плюс нужна поправка на пропуск в цикле каждого второго события, который сигнализирует о том, что сигнал на DCD вернулся в исходное состояние. В принципе по нему можно перезапускать таймер.
Итак, по событию запустить таймер для измерения интервала. По следующему событию учесть полученный интервал в таймере. Пропустить несколько событий (сколько - зависит от пульта). Запустить таймер. По наступлению события смотреть, было ли событие от таймера, или в событии от таймера смотреть, было ли событие от порта. Ориентируясь на это добавлять сдвигом в байт бит (0 или 1) в цикле N раз (сколько зависит от пульта). По окончанию цикла дождаться еще 1 события (стоповый бит). Проанализировать, что за байт получился и предпринять какие то шаги. Не забыть закрыть порт по выходу из программы.

Есть так же исходник маленькой программки WinLirc, которая считывает данные с пульта, но проблема в том, что он написан на C++, а я только знаю Delphi. Подскажите, пожалуйста, как реализовать считку данных? Если можно, то приведите пример кода.



WinLirc.rar
 Описание:
Исходник

Скачать
 Имя файла:  WinLirc.rar
 Размер:  202.33 KB
 Загружен:  134 раз(а)

В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСр, 23-Сен-2009 21:48 
Цитата

Речь идет о том, что ты с некоторой частотой (как минимум, в 2 раза большей, чем частота сигналов пульта) опрашиваешь СОМ-порт на предмет сигнала. На основании данных такого опроса можно сформировать картину поступления сигналов. Это раз.
А еще WinLirc имеет API, который можно использовать в своей программе. И есть к нему модули для Delphi. Это два.

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Terran
Новичок




Зарегистрирован: 17.12.2007
Сообщения: 11

СообщениеСр, 23-Сен-2009 23:21 
Цитата

Цитата:
А еще WinLirc имеет API, который можно использовать в своей программе. И есть к нему модули для Delphi.

А можно немного поподробней про это? И подскажите, пожалуйста, где можно найти эти модули?
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеЧт, 24-Сен-2009 1:38 
Цитата

Да чего их искать-то? Введи в гугле
WinLirc Delphi
...и первые же ссылки будут на примеры.

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Terran
Новичок




Зарегистрирован: 17.12.2007
Сообщения: 11

СообщениеЧт, 24-Сен-2009 17:12 
Цитата

Что-то ничего не нашёл, кроме готовых программок WinLirc...
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеПт, 25-Сен-2009 19:26 
Цитата

Да ладно тебе, посмотри внимательнее, вот тебе вторая ссылка, выданная гуглем:
http://winlirc.sourceforge.net/delphi.html

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Terran
Новичок




Зарегистрирован: 17.12.2007
Сообщения: 11

СообщениеСб, 26-Сен-2009 12:12 
Цитата

Большое спасибо! Но мне хотелось бы в своей программке реализовать распознавание сигнала без использования сторонних программ.
Когда я считывал данные, у меня получалось что приходят одни и те же данные, независимо от того на какую кнопку я нажимаю на пульте. В общем я ещё попробую поэкспериментировать и если не получится, то придётся использовать эти модули.
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100