Старая проблема - WS2812 + IR

Тема в разделе "Arduino & Shields", создана пользователем Gomez, 17 дек 2017.

  1. Gomez

    Gomez Гик

    Эпиграф:
    Идет мужик по болоту, видит кукушку. Спрашивает - "Кукушка-кукушка, сколько мне жить осталось?"
    Кукушка: "Ку..."
    Мужик: "А почему так ма..."
    (Старый анекдот)

    В общем, тем, кто пробовал что-то делать со светодиодными линейками WS2812 (с тремя выводами), наверное, известна проблема - IR и прочее, требующее прерываний, не работает или работает очень глючно с кодом, который с бешеной скоростью отправляет команды линейке светодиодов.
    Выход тоже известен - пусть за прием IR-команд отвечает другой проц, в моем случае ATtiny85, а точнее, готовый Digispark. Прошил туда скетч, IR распознает команды и отправляет по SoftSerial букву или цифру на Arduino Nano, где крутится скетч с библиотекой FastLED.
    Но даже одна буква, например, "F", доходит не всегда - видимо, не все биты успевают дойти в этой круговерти. Можно нажать на пульт еще раз или два и дойдет, но есть какое-то чувство неудовлетворенности.
    Вопрос - как бы сделать понадежнее? Может, отправлять не букву (это ж целых 1 или 2 байта), или байт - минимальный квант, который можно переслать через SoftSerial?
    Если, конечно брать для платы с IR что-то более многоногое, да хоть вторую Nano, можно тупо посылать с одной на другую через разные пины сигналы HIGH (нужно-то всего команд 5), но это как-то тоже забавно.

    В общем, как бороться с "Ку...", если прерывания отключены и идет бешеный обмен данными, что и два байта не всегда дойдет? :)
     
  2. rkit

    rkit Гуру

    Если не хватает производительности, то нужно взять железку попроизводительнее, кто бы мог подумать.
     
  3. Gomez

    Gomez Гик

    Ну не всегда мы можем это себе позволить, иначе кому бы нужны были бы те же Ардуино при наличии более крутых "старших братьев". Да и иногда просто жалко - например, для той же елочной гирлянды использовать две Наны. :)
    Хотя у меня осталось на Digispark-е 4 вывода, может, если нет другого изящного решения уйти от SoftwareSerial, то обойдусь и 4-мя командами. Зачем мне команда "назад"? Вперед, только вперед!
     
  4. Gomez

    Gomez Гик

    Гм... Хотя чего я туплю. Я же могу смотреть не просто состояние каждого входа, а на сочетание их состояний. 3 входа дадут 3! = 6, 4 - аж 12.

    Тогда вопрос - если один девайс (Digispark) имитирует нажатия кнопок, а другой (Nano) эти HIGH и LOW обрабатывает, мне же ничего не нужно городить для безопасности?
    Просто включаю подтягивающие резисторы на Nano, а на Digispark генерирую HIGH или LOW, скажем, на 100 миллисекунд, после чего возвращаю выход в исходное состояние?
     
    Последнее редактирование: 18 дек 2017