Приём передача ИК-сигнала reciv and send IR signal

Maxsimus
Offline
Зарегистрирован: 04.11.2021

Доброго времени, В программе отказ приём сигнала на ИК модуль после того как использована функция send, до этого момента ИК сигнал приёмник ик ловит и реагирует должным образом.

Подскажите пожалуйста, что может быть?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Может быть ошибка в скетче.

SAB
Offline
Зарегистрирован: 27.12.2016

Точно, в 10 строке ошибка, и на схеме R5 надо на минус завести. 

sadman41
Offline
Зарегистрирован: 19.10.2016
Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

1. работает раснараснепидарас, короче зависит. фаза луны там, месячные карины стримершы (ну или киттсан-некотян, короче вертел я этот твич на кожной оси).

2. как сказал Сэдмэн41, остановить приёмник перед началом передачи, вроде очевидно но новички имеют привычку забивать на доскональное чтение мануала на библиотеку, короче это неочевидный момент но важный, учитывайте его.

3. конфликты по таймерам/перерываниям.

4. иногда нехочет падла, просто никак. в этом случае по дубовому битбангом, я применяю два способа:

- то что сказала функция IRRecvDump, проклацать прямо в светодиод через digitalWrite() и delayMicroseconds(), в т. ч. и саму несущую (принято считать что она 38 кГц, это на микросекунды около 27 мкс). несущая докучи бывает ещё 36, 40, и вроде даже 32 и 44. дальше от реальной несущей датчика = хуже приём (меньше дальность), но всё равно работает. килогерцы несущей - две последних цифры на корпусе датчика, например tsop1738, vs1838 где 38 какбе намекаэ.

- всё то же самое но гнать не несущую а нули единицы по форме пачек, их видно если нарисовать график по цифрам или воспользоваться ослом/логаном. рисовать удобно в inkscape, мастхев программуля для DIYщика ящитаю. Есть из коробки в debian. Детский вопрос: стопшто, а как какать единицы, что формирует несущую? Правильно, снаружи прицеплен таймер 555 настроенный на несущую (например в обвязке 10k+1k+1n8), клацаем таймер выводом 4 (внешний reset, 1=запрет, 0=разреш).

/p>- нельзя оптимизировать bitbang код, любые for while циклы искажают те микросекунды за которые родит digitalWrite() и сигнал уплывает. если есть сверхнеобходимость уменьшить код (щас бы экономить 100 байт ассемблера во флеше) то надо думать, как чо по конечным автоматам, чтобы прям строго контролировать, когда начинаются кончаются пачки, и чтобы в пачках было ровно плюсминус 27 мкс, иначе сигнал не читается. мне рефакторить такие коды впадлу, работает и ладно.

5. детские моменты типа воткнуть светик без транзистора яшнадеюсь не происходят, ИК светодиод рили прожорливый, запросто может схавать 300 мА.

моя тулза как перегнать вывод ирдумп в битбанг https://github.com/arleenlasleur/raw2dp

Maxsimus
Offline
Зарегистрирован: 04.11.2021

2 отдельные функции одна Reciv другая Send по библиотеке IRremote. h,
Вначале всё норм если получаю сигнал на приёмник, но стоит нажать клавишу отправки сигнала, после приёмник больше не работает, а Send продолжает работать по нажатию на клавишу.
После перезагрузки платы такая же картина.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Перечитайте что написано, на время ащще забудьте ради эксперимента что Send() существует, чисто на digitalWrite(). Чисто ради эксперимента чтобы выяснить, что именно виновно. Это называется "изоляция второй (третьей, и т п, всмысле, непервой) неизвестной переменной".

Green
Offline
Зарегистрирован: 01.10.2015

Voodoo Doll, нужно быть таким же наркоманом, что бы понимать ваш спич.)
Вспомнил историю. Со знакомым ехали к нему домой, общались. Водитель (тоже знакомый) потом спрашивал: "Слушай, о чём говорили? Я нихрена не понял!" Хотя он, вроде как, в МК шарил.)