Почему ИК и Неопиксели одновременно, это сложно
Таким образом, основной смысл этой страницы, однако, заключается в том, чтобы рассмотреть вопросы управления Неопикселями и приема ИК-сигналов одновременно.
Легко слушать ИК, а затем менять неопиксели, оставлять их в покое и снова слушать ИК. Трудно (или почти невозможно на некоторых чипах) активно обновлять полосы neopixel для анимации и одновременно прослушивать ИК-команды.
То, что происходит на низкоуровневых чипах arduino (328p, leonardo или даже на mega и всех других 16-битных AVR), neopixels управляются путем остановки прерываний чипа и отправки очень точно синхронизированного сигнала на neopixels. Если время немного сбивается, посылаются неправильные цвета или вообще ничего не работает. Вот почему прерывания должны быть отключены
Теперь на самом деле существует множество других адресуемых многоцветных светодиодов. Хорошие из них-4 провода и работают через SPI, что позволяет процессору контролировать синхронизацию и часы, устраняя эту точную проблему с синхронизацией битов. Более дешевые 3-проводные имеют установленные часы и требуют, чтобы процессор посылал очень точно синхронизированный сигнал, обычно это делается при отключении прерываний. Видишь
https://github.com/FastLED/FastLED/wiki/Overview
Но поскольку полосы neopixel (они же WS2811/WS2812/WS2812B) - это то, что у меня уже было, теперь мне пришлось иметь дело с этой точной проблемой времени. Как вы можете догадаться, отключение прерываний вызывает проблемы с библиотекой IRRemote, потому что у нее есть таймер обработчика прерываний on, который также требует запуска в специальное время, или она не захватывает правильные ИК-сигналы.
Конечным результатом является то, что вы не можете отключить прерывания и получать ИК-сигналы, а если вы не отключите прерывания, сигнал neopixel будет нестабильным и цвета будут мерцать (продемонстрировано в видео выше).
Таким образом, если вы не используете какое-то специальное оборудование для привода полосок neopixels на чипе AVR, параллельные IR + neopixels просто не будут работать.