| Автор
| Сообщение |
 Terran
Новичок

Зарегистрирован: 17.12.2007
Сообщения: 11
|
|
|
Цитата |
|
Всем привет! У меня возникла проблема с которой я уже очень долго разбираюсь и всё безуспешно. К 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 |
| Размер: |
202.33 KB |
| Загружен: |
134 раз(а) |
|
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Речь идет о том, что ты с некоторой частотой (как минимум, в 2 раза большей, чем частота сигналов пульта) опрашиваешь СОМ-порт на предмет сигнала. На основании данных такого опроса можно сформировать картину поступления сигналов. Это раз.
А еще WinLirc имеет API, который можно использовать в своей программе. И есть к нему модули для Delphi. Это два.
_________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Terran
Новичок

Зарегистрирован: 17.12.2007
Сообщения: 11
|
|
|
Цитата |
|
| Цитата: | | А еще WinLirc имеет API, который можно использовать в своей программе. И есть к нему модули для Delphi. |
А можно немного поподробней про это? И подскажите, пожалуйста, где можно найти эти модули?
|
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Да чего их искать-то? Введи в гугле
WinLirc Delphi
...и первые же ссылки будут на примеры.
_________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Terran
Новичок

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

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
| В начало |
|
 |
 Terran
Новичок

Зарегистрирован: 17.12.2007
Сообщения: 11
|
|
|
Цитата |
|
Большое спасибо! Но мне хотелось бы в своей программке реализовать распознавание сигнала без использования сторонних программ.
Когда я считывал данные, у меня получалось что приходят одни и те же данные, независимо от того на какую кнопку я нажимаю на пульте. В общем я ещё попробую поэкспериментировать и если не получится, то придётся использовать эти модули.
|
|
| В начало |
|
 |
|