ИК ретранслятор
- Войдите на сайт для отправки комментариев
Есть ИК приемник и ИК передатчик. Задача: принять с приемника сигнал, запомнить его, а потом в нужный момент отправить этот сигнал через передатчик.
Проблема: вначале решил для этого использовать библиотеку IRremote, но он не может декодировать сигнал с моего пульта (с другого может, а с моего - Unknown protocol). Вначале хотел поискать альтернативные библиотеки, а потом подумал: а зачем? По идее можно просто запомнить последовательность сигналов с временными интервалами, которые пришли с пина, а потом просто отправить эту последовательность на другой пин.
Если идея жизнеспособная, то может кто показать, как это делается? Или не взлетит и нужно искать библиотеку с поддержкой моего протокола?
Как для ретранслятора идея жизнеспособна, но суть ее в чем? За стеной телевизором управлять?
Трамп, так в чем проблема?
Сначала принимаете сигнал,
затем его запоминаете,
потом - воспроизводите.
Начните с начала - что у Вас получается?
В своё время снял с брелка моей хонды ИК сигнал открывания дверей и загнал его в телефон с ИК портом. А то пару раз сигналка закрывала двери с ключами в салоне. Снимал на блюпиле. Поставил в режим АЦП, что бы с приёмного ИК диода снять напряжение c равными интервалами времени, которое было совсем не TTL и снял длинную реализацию, загнал в комп, превратил в цифру по времени, нашёл минимальный квант, по нему восстановил цифровую последовательность нулей и единичек. Её отправил обратно - дверь открылась.
Есть ИК приемник и ИК передатчик. Задача: принять с приемника сигнал, запомнить его, а потом в нужный момент отправить этот сигнал через передатчик.
Проблема: вначале решил для этого использовать библиотеку IRremote, но он не может декодировать сигнал с моего пульта (с другого может, а с моего - Unknown protocol). Вначале хотел поискать альтернативные библиотеки, а потом подумал: а зачем? По идее можно просто запомнить последовательность сигналов с временными интервалами, которые пришли с пина, а потом просто отправить эту последовательность на другой пин.
Если идея жизнеспособная, то может кто показать, как это делается? Или не взлетит и нужно искать библиотеку с поддержкой моего протокола?
А если считать код таким методом:
int pin = 7; unsigned long duration; void setup() { Serial.begin(115200); pinMode(pin, INPUT); } void loop() { duration = pulseIn(pin, LOW); if(duration) Serial.println(duration); }В консоли будут какие-то цифры, потом еще раз запустить - цифры будут совпадать??? Если да- тогда можно попробовать их отправить дальше.
Идея так себе. PulseIn ждёт фронта, а потом начинает считать следующий. Т.е. есть промежуток времени, который таким образом ни как не получить, пока ждёт фронт. Если уж получать интервалы - то подать на вход таймера, у которого по разным фронтам разные прерывания и снимать счетчик в прерывании. Получим точные интервалы нулей и единичек. Но надо сигнал ИК к TTL подогнать.
За стеной телевизором управлять?
Можно не только за стеной. Если соединить 2 модуля радиоканалом, хоть той же LoRа, можно оооочень сильно удлинить радиус действия пульта от зомбоящика)))
А смысл? Превратить "визор" в обычное "радио"?
За стеной телевизором управлять?
Можно не только за стеной. Если соединить 2 модуля радиоканалом, хоть той же LoRа, можно оооочень сильно удлинить радиус действия пульта от зомбоящика)))
Если лорой, то придется дешифровать и отправлять уже дешифрованый сигнал. Либо накапливать пачку, а потом пихать ее, задержка будет знатная.
Извините, пропал на неделю
Сначала принимаете сигнал,
Вот, например, такой код
#include <Arduino.h> #define IR_PIN 12 // pins: SGV #define WAIT_TIMEOUT ((unsigned long)-1) #define TIMES_COUNT 100 void setup() { Serial.begin(9600); Serial.println("Test"); pinMode(IR_PIN, INPUT); } unsigned long waitPin(uint8_t pin, uint8_t value, unsigned long timeout) { unsigned long startPhase = micros(); uint8_t waitIdx = 0; unsigned long res = 0; while (true) { while (digitalRead(pin) == value && ++waitIdx != 0); unsigned long endPhase = micros(); res += endPhase - startPhase; if (waitIdx == 0) { if (res >= timeout) return WAIT_TIMEOUT; startPhase = endPhase; } else return res; } } void readIR(uint8_t pin, uint8_t baseVal) { unsigned long times[TIMES_COUNT]; uint8_t curVal = baseVal; uint8_t timeIdx = 0; do { times[timeIdx] = waitPin(pin, curVal, 100000); curVal = !curVal & 1u; } while (timeIdx < TIMES_COUNT && times[timeIdx++] != WAIT_TIMEOUT); curVal = baseVal; for (uint8_t i = 0; i < timeIdx; i++) { Serial.print('['); Serial.print(i); Serial.print("] "); Serial.print(curVal); Serial.print(": "); Serial.println(times[i]); curVal = !curVal & 1u; } } void loop() { if (digitalRead(IR_PIN) == LOW) readIR(IR_PIN, LOW); }При активации пультом выводит 96 элементов массива, а потом отправляет Ардуину в перезагрузку. Если TIMES_COUNT поставить 200, тогда выводится 195 элементов и перезагрузка
Нашел ошибку. Вместо
нужно было писать
Но теперь вопрос когда останавливать чтение? 250 элементов массива (т.е 125 переходов LOW-HIGH-LOW) считываются. Числа получаются такие
Что-то я не то делаю
Числа получаются такие
Что-то я не то делаю
А почему Вы решили, что Вы что-то не так делаете?
Лог очень похож на посылки, которые вполне себе даже можно расшифровать.
У кондеев есть одна особенность: посылка, как правило, содержит всю информацию о настройках. Это как бы слепок настроек. А вот у телевизора, например, посылка это всего лишь код кнопки. Это нужно учитывать при расшифровке сообщения. Если хотите не просто скопирастить посылку, а готовитесь отправить ее "со смыслом".
У кондеев есть одна особенность: посылка, как правило, содержит всю информацию о настройках. Это как бы слепок настроек.
Именно так. По другому не встречалось.
У кондеев есть одна особенность: посылка, как правило, содержит всю информацию о настройках. Это как бы слепок настроек.
Именно так. По другому не встречалось.
по видимо да, стоит притащить пульт от другого кондея и все настройки улетают
Прикалываетесь ? Или подумать лень ? Не у кондея посылки ВКЛ. Есть например посылка "Вкл в режим охладения до целевой температуры 25, с медленным вращением вентилятора, махая опахалом".
Если вам похрену в каком режиме будет кондиционер, тогда это не имеет значения.... Действительно какая разница.
Кстати, IRremote может принимать и воспроизводить и неизвестный ему протокол, это называется в RAW формате.
http://arduino.ru/forum/proekty/ik-vyklyuchatel-mobilnogo-konditsionera-...