Эпиграф: Идет мужик по болоту, видит кукушку. Спрашивает - "Кукушка-кукушка, сколько мне жить осталось?" Кукушка: "Ку..." Мужик: "А почему так ма..." (Старый анекдот) В общем, тем, кто пробовал что-то делать со светодиодными линейками WS2812 (с тремя выводами), наверное, известна проблема - IR и прочее, требующее прерываний, не работает или работает очень глючно с кодом, который с бешеной скоростью отправляет команды линейке светодиодов. Выход тоже известен - пусть за прием IR-команд отвечает другой проц, в моем случае ATtiny85, а точнее, готовый Digispark. Прошил туда скетч, IR распознает команды и отправляет по SoftSerial букву или цифру на Arduino Nano, где крутится скетч с библиотекой FastLED. Но даже одна буква, например, "F", доходит не всегда - видимо, не все биты успевают дойти в этой круговерти. Можно нажать на пульт еще раз или два и дойдет, но есть какое-то чувство неудовлетворенности. Вопрос - как бы сделать понадежнее? Может, отправлять не букву (это ж целых 1 или 2 байта), или байт - минимальный квант, который можно переслать через SoftSerial? Если, конечно брать для платы с IR что-то более многоногое, да хоть вторую Nano, можно тупо посылать с одной на другую через разные пины сигналы HIGH (нужно-то всего команд 5), но это как-то тоже забавно. В общем, как бороться с "Ку...", если прерывания отключены и идет бешеный обмен данными, что и два байта не всегда дойдет?
Ну не всегда мы можем это себе позволить, иначе кому бы нужны были бы те же Ардуино при наличии более крутых "старших братьев". Да и иногда просто жалко - например, для той же елочной гирлянды использовать две Наны. Хотя у меня осталось на Digispark-е 4 вывода, может, если нет другого изящного решения уйти от SoftwareSerial, то обойдусь и 4-мя командами. Зачем мне команда "назад"? Вперед, только вперед!
Гм... Хотя чего я туплю. Я же могу смотреть не просто состояние каждого входа, а на сочетание их состояний. 3 входа дадут 3! = 6, 4 - аж 12. Тогда вопрос - если один девайс (Digispark) имитирует нажатия кнопок, а другой (Nano) эти HIGH и LOW обрабатывает, мне же ничего не нужно городить для безопасности? Просто включаю подтягивающие резисторы на Nano, а на Digispark генерирую HIGH или LOW, скажем, на 100 миллисекунд, после чего возвращаю выход в исходное состояние?