Не простой бегущий огонь на WS2811, может кто подскажет.
- Войдите на сайт для отправки комментариев
Пт, 09/02/2018 - 17:19
Добрый вечер, подтолкните в нужном направлении. Научился ей (лентой) управлять по разному, пока хватает комбинаций. Не могу придумать как можно сделать так, что когда нажимаю на кнопку, у меня пускается полоса, например из 4х сетодиодов, я еще раз нажимаю, не дожидаясь пока закончиться первая, и идет уже вслед за первой, вторая полоса и так столько раз, сколько захочешь. Пробовал по разному, не могу понять как обновлять в цикле не дожидаясь его завершения... Возможно не правильно выразился.
Как пробовали - показывайте... Только кратенько.
Как пробовали - показывайте... Только кратенько.
На самом деле вариантов много было, и условия задавал, пробовал использовать две переменные в цикле,
но, потом понимал, что они выполняются последовательно... Головой то понимаю, что нужно пускать непрерывный поток байтов в ленту, чтобы они все выключены были, а при нажатии кнопки, окрашивать несколько и пускать дальше... Но так как я в этом деле совсем зеленый, реализовать не могу. Уже думал о многопоточности, но к сожалению ее тут нет.
Так... Давайте проведем мысленный эксперимент. Как вы считаете, если в страйпе постоянно сдвигать цвет пикселя от 0-го к N-ному, но 4 раза на каждом проходе помещать в пиксель в позиции 0 заданный цвет, то это будет вашей "бегущей полоской"? А если каждый раз при нажатии кнопки инициировать это четырехкратное помещение в нулевую позицию заданного цвета - будет ли это желаемым эффектом?
Так... Давайте проведем мысленный эксперимент. Как вы считаете, если в страйпе постоянно сдвигать цвет пикселя от 0-го к N-ному, но 4 раза на каждом проходе помещать в пиксель в позиции 0 заданный цвет, то это будет вашей "бегущей полоской"? А если каждый раз при нажатии кнопки инициировать это четырехкратное помещение в нулевую позицию заданного цвета - будет ли это желаемым эффектом?
Вы так имели введу, или я что то не правильно понял?
Нет, вам нужно немного изменить свое мышление.
На каждой итерации loop() вы можете делать так:
Спасибо Вам большое, действительно я нехотел чтобы кто то писал код, потому, что хочу сам разобраться... Так вот, что у меня получилось. В принцепе результатом доволен, не знаю правильно я Вас понял или нет, но почитав про strip.getPixelColor я понял, как это работает. На analogRead() не обращайте внимания - это у меня микрофон вместо кнопки :)
Единственное скорость очень большая, но все работает. Еще раз Вам спасибо... Если что, то я не правильно сделал, укажите пожалуйста на ошибку.
Если результат устраивает, то цель достигнута. Для ускорения вызывайте strip.show() не в цикле, а один раз, когда все операции над пикселями (перемещение, закраска и пр.) уже закончены. Суть в том, что все манипуляции над пикселями виртуальны - на самом деле перемещаются числа внутри памяти микроконтроллера. Даже getPixelColor() со страйпа ничего не читает. Единственный метод, непосредственно работающий со светодиодами - это show(). Поэтому его имеет смысл вызывать, когда "картинка" сформирована.