Это относится как к физическому программированию, так и к Ruby, работающему на веб-сервере. У меня есть массив светодиодов RGB, который составляет 5x5, то есть всего 25 светодиодов. Они пронумерованы и индивидуально адресуемы как таковые:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Вот фото:
Что касается аппаратного обеспечения (которое на самом деле не важно, потому что оно работает нормально), система состоит из 25 BlinkM , Arduino и некоторых различных кабелей и разъемы.
Светодиоды посылают команды через последовательный порт с такой командой:
@sp.write ["\x01", led, "\x04\x00", "c", color]
Который записывает байтовый массив в последовательный порт, используя Serialport gem в ruby, переменные "led" и "color" заменяются шестнадцатеричным числом каждого, поэтому, например, если я хочу сделать led номер 8 красный, мой вывод будет выглядеть так:
@sp.write ["\x01","\x08", "\x04\x00", "c", "\xff\x00\x00"]
Пока все это творит чудеса, и я действительно доволен тем, что у меня есть, теперь мой вопрос в значительной степени связан с общей математикой и простым программированием, но каким-то образом реализация идет мне на ум.
Вот пример такой анимации. В основном мне интересно, как можно анимировать узоры, используя рубин. Я вспоминаю некоторые сценарии «обработки» анимации, просто зацикливая функцию, используя массив в качестве объекта и воздействуя на элементы массива, создавая интересные анимации только из-за математики вывода.
Кто-нибудь имеет представление о том, как я мог начать с чего-то подобного? В настоящее время я могу воздействовать на светодиоды по одному своим сценарием, и я могу связать их вместе с sleep x
после каждой команды и вручную создавать анимации, но как я могу сделать так, чтобы один работал бесконечно с какой-то процедурной анимацией?
EDIT
Я действительно не описал массив байт-кодов полностью, вот что делает каждая часть:
@sp.write ["\x01", led, "\x04\x00", "c", color]
^ ^ ^ ^ ^ ^
a b c d e f
a. start byte (not important, tells serial that it is the start of a command)
b. hex for LED address, ex. `\x07` is led 7
c. length of command (starting at "e")
d. bytes to be read (always 0 in our case)
e. the "fade to color" command
f. the color we want to fade to in rrggbb hex format.