Почему ИК-передатчик привязан к одному контакту

Я использую IRremote.h (https://github.com/Arduino-IRremote/Arduino-IRremote). Приемник позволяет вам изменить контакт, к которому он подключен, но передатчик этого не делает. Есть ли какая-то причина, по которой это жестко закодировано в IRremoteInt.h. Если это просто ШИМ-вывод, нельзя ли использовать какой-либо ШИМ-вывод?

#if defined(CORE_OC2B_PIN)
#define TIMER_PWM_PIN        CORE_OC2B_PIN  /* Teensy */
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define TIMER_PWM_PIN        9  /* Arduino Mega */
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
#define TIMER_PWM_PIN        14 /* Sanguino */
#else
#define TIMER_PWM_PIN        3  /* Arduino Duemilanove, Diecimila, LilyPad, etc */
#endif

На этот счет не так много документации.

, 👍0

Обсуждение

Вы пробовали использовать другой контакт?, @jsotola

Где эти определения контактов? Просто нашел несколько выводов в IRTimer.hpp. Хотя по умолчанию вы можете использовать любой вывод для отправки, так как синхронизация выполняется с помощью программного обеспечения. Определения выводов воспроизводятся только тогда, когда вы хотите использовать аппаратный таймер в режиме PWM. Затем вы можете предоставить соответствующие определения, чтобы указать библиотеке, какой таймер использовать. Это важно, так как он будет напрямую обращаться к соответствующим регистрам этого Таймера, @chrisl

Короче говоря, мне нужно изменить заголовок и источник, если я хочу использовать какой-либо вывод для отправки. Понятия не имею, почему автор спроектировал приемник так, чтобы он принимал любой вывод, но не отправителя. Я просто изменю его, чтобы принять любой контакт, и отправлю моды автору., @cup

@cup Я бы предположил, что автор сделал это таким образом, потому что таковы большинство библиотек Arduino. "На этот счет не так много документации" добавляет веса этому предположению. ИМО многие библиотеки создаются потому, что автору нужна функциональность, а затем они публикуются, потому что авторы просто хорошие люди и готовы поделиться. В этом случае автор, вероятно, никогда не думал об использовании другого контакта, провод был подключен к порту 9, зачем "ему" это нужно на порту 8., @Code Gorilla

@кубок ... Существует также вероятность того, что существует аппаратное ограничение, которое действовало в то время, что означало, что оно может быть только на порту 9, это был единственный порт, который поддерживал PWM? Может быть, теперь этого ограничения больше нет. Но в любом случае у вас есть правильная идея, если вы можете улучшить библиотеку, сделайте это и верните ее обратно в репо., @Code Gorilla

Я внесу изменения, протестирую их, а затем верну автору. Кто-нибудь может это закрыть?, @cup


1 ответ


Лучший ответ:

0

Добрался до сути дела. Как уже упоминалось в комментариях, это связано с таймерами. Список приведен в Secrets of Arduino PWM. Код можно изменить, чтобы использовать другой таймер, но он все равно будет привязан к определенному контакту.

,