Новогодняя игрушка - свето-цвето-крутилка

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Проект был создан 5 лет назад - в декабре 2015 года - года моего первого знакомства с Arduino. Тогда я посчитал, что проект слишком примитивен для того, чтобы его стоило публиковать. Но в дальнейшем тот факт, что мои более сложные проекты не нашли отклика, заставил меня пересмотреть эту позицию. Поэтому публикация состоится - здесь и сейчас.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Видео можно посмотреть здесь: https://youtu.be/E19HfKm3vfo

Проект создан в первые полгода моего знакомства с Arduino, на тот момент я еще не созрел для изучения особенностей микроконтроллеров и использовании этих особенностей в своих скетчах. Поэтому скетч написан целиком в рамках парадигмы Arduino - никакого прямого доступа к аппаратуре, а, следовательно, - программный ногодрыг.

Фрагмент схемы: 

Питание осуществляется от встроенного в вилку китайского БП 12В 1А, Arduino Pro Mini подключается через стабилизатор напряжения. К каждому из 18 выходов Arduino со 2-го по 20-й (А5) через резистор подключен транзистор КТ315. Коллектор транзистора подключен ко входам 12-вольтовой RGB ленты (светодиод обычные, не адресные). Лента нарезана на кусочки, кусочков - 18. Кусочки объединены по 3. Т.е. имеется 6 независимых фрагментов по 3 цвета в каждом.

Схема собрана на макетке:

Кусочки светодиодной ленты расположены вдоль лучей на круглом пластиковом основании:

И с обратной стороны:

Скетч:

#define dtPWM 250 //250 // PWM period
#define maxEffects 52
//#define byte unsigned char
#define numLevels 64 // number of light (volume) levels
#define volumeStep 256/numLevels

class tLEDRGB
{
public:
    byte t; // time of frame in 16 ms units
    byte f; // number of frames per cycle
    byte r; // number of cycle repetitions
    int d; // offset in data array
};

#define tempo 4

#define effect00 0             // -6- 3 rays blue star tail rotating clockwise
#define effect01 effect00+108  // -6- 3 rays red star tail rotating clockwise
#define effect02 effect01+108  // -6- 3 rays green star tail rotating clockwise
#define effect03 effect02+108  // -6- 3 rays magenta star tail rotating clockwise
#define effect04 effect03+108  // -6- 3 rays yellow star tail rotating clockwise
#define effect05 effect04+108  // -6- 3 rays cyan star tail rotating clockwise

#define effect06 effect05+108  // -6- 3 rays blue star tail rotating counterclockwise
#define effect07 effect06+108  // -6- 3 rays red star tail rotating counterclockwise
#define effect08 effect07+108  // -6- 3 rays green star tail rotating counterclockwise
#define effect09 effect08+108  // -6- 3 rays magenta star tail rotating counterclockwise
#define effect0A effect09+108  // -6- 3 rays yellow star tail rotating counterclockwise
#define effect0B effect0A+108  // -6- 3 rays cyan star tail rotating counterclockwise

#define effect0C effect0B+108  // -3- 6 rays blue star tail rotating clockwise
#define effect0D effect0C+ 54  // -3- 6 rays red star tail rotating clockwise
#define effect0E effect0D+ 54  // -3- 6 rays green star tail rotating clockwise
#define effect0F effect0E+ 54  // -3- 6 rays magenta star tail rotating clockwise
#define effect0G effect0F+ 54  // -3- 6 rays yellow star tail rotating clockwise
#define effect0H effect0G+ 54  // -3- 6 rays cyan star tail rotating clockwise

#define effect0I effect0H+ 54  // -3- 6 rays blue star tail rotating counterclockwise
#define effect0J effect0I+ 54  // -3- 6 rays red star tail rotating counterclockwise
#define effect0K effect0J+ 54  // -3- 6 rays green star tail rotating counterclockwise
#define effect0L effect0K+ 54  // -3- 6 rays magenta star tail rotating counterclockwise
#define effect0M effect0L+ 54  // -3- 6 rays yellow star tail rotating counterclockwise
#define effect0N effect0M+ 54  // -3- 6 rays cyan star tail rotating counterclockwise

#define effect0O effect0N+ 54  // -3- 12 rays blue star tail rotating clockwise
#define effect0P effect0O+ 54  // -3- 12 rays red star tail rotating clockwise
#define effect0Q effect0P+ 54  // -3- 12 rays green star tail rotating clockwise
#define effect0R effect0Q+ 54  // -3- 12 rays magenta star tail rotating clockwise
#define effect0S effect0R+ 54  // -3- 12 rays yellow star tail rotating clockwise
#define effect0T effect0S+ 54  // -3- 12 rays cyan star tail rotating clockwise

#define effect0U effect0T+ 54  // -3- 12 rays blue star tail rotating counterclockwise
#define effect0V effect0U+ 54  // -3- 12 rays red star tail rotating counterclockwise
#define effect0W effect0V+ 54  // -3- 12 rays green star tail rotating counterclockwise
#define effect0X effect0W+ 54  // -3- 12 rays magenta star tail rotating counterclockwise
#define effect0Y effect0X+ 54  // -3- 12 rays yellow star tail rotating counterclockwise
#define effect0Z effect0Y+ 54  // -3- 12 rays cyan star tail rotating counterclockwise


#define effect10 effect0Z+ 54  // -6- 3 rays magenta+green star tail rotating clockwise
#define effect11 effect10+108  // -6- 3 rays magenta+green star tail rotating counterclockwise


#define effect12 effect11+108  // -6- 3 rays with blue tail rotating clockwise
#define effect13 effect12+108  // -6- 3 rays with blue tail rotating counterclockwise
#define effect14 effect13+108  // -6- 3-ray stars: green & magenta rotating in different directions (1)
#define effect15 effect14+108  // -6- 3-ray stars: green & magenta rotating in different directions (2)
#define effect16 effect15+108  // -3- 6 rays with red tail rotating clockwise
#define effect17 effect16+ 54  // -3- 6 rays with red tail rotating counterclockwise
#define effect18 effect17+ 54  // -3- 6-ray stars: green & magenta rotating in different directions (1)
#define effect19 effect18+ 54  // -3- 6-ray stars: green & magenta rotating in different directions (2)
#define effect1A effect19+ 54  // -2- white-black shining
#define effect1B effect1A+ 36  // -2- green-magenta shining
#define effect1C effect1B+ 36  // -3- 3colors rotating clockwise
#define effect1D effect1C+ 54  // -3- 3colors rotating counterclockwise
#define effect1E effect1D+ 54  // -6- rainbow rotating clockwise
#define effect1F effect1E+108  // -6- rainbow rotating counterclockwise
//#define effect9 effect0D+108  //
//#define effect9 effect0E+108  //

static const int effects[] = { // заголовки эффектов: t, f, r, d
  tempo, 6,  4, effect00,
  tempo, 6,  4, effect01,
  tempo, 6,  4, effect02,

  tempo, 6,  4, effect03,
  tempo, 6,  4, effect04,
  tempo, 6,  4, effect05,
  tempo, 6,  4, effect06,
  tempo, 6,  4, effect07,
  tempo, 6,  4, effect08,
  tempo, 6,  4, effect09,
  tempo, 6,  4, effect0A,
  tempo, 6,  4, effect0B,

  tempo, 3,  8, effect0C,
  tempo, 3,  8, effect0D,
  tempo, 3,  8, effect0E,
  tempo, 3,  8, effect0F,
  tempo, 3,  8, effect0G,
  tempo, 3,  8, effect0H,
  tempo, 3,  8, effect0I,
  tempo, 3,  8, effect0J,
  tempo, 3,  8, effect0K,
  tempo, 3,  8, effect0L,
  tempo, 3,  8, effect0M,
  tempo, 3,  8, effect0N,

  tempo, 3,  8, effect0O,
  tempo, 3,  8, effect0P,
  tempo, 3,  8, effect0Q,
  tempo, 3,  8, effect0R,
  tempo, 3,  8, effect0S,
  tempo, 3,  8, effect0T,
  tempo, 3,  8, effect0U,
  tempo, 3,  8, effect0V,
  tempo, 3,  8, effect0W,
  tempo, 3,  8, effect0X,
  tempo, 3,  8, effect0Y,
  tempo, 3,  8, effect0Z,

  tempo, 6,  4, effect10,
  tempo, 6,  4, effect11,



  tempo, 6,  4, effect12,
  tempo, 6,  4, effect13,
  tempo, 6,  4, effect14,
  tempo, 6,  4, effect15,
  tempo, 3,  8, effect16,
  tempo, 3,  8, effect17,
  tempo, 3,  8, effect18,
  tempo, 3,  8, effect19,
  tempo, 2, 12, effect1A,
  tempo, 2, 12, effect1B,
  tempo, 3,  8, effect1C,
  tempo, 3,  8, effect1D,
  tempo, 6,  4, effect1E,
  tempo, 6,  4, effect1F
};

static const unsigned char a2p[] = {255,255,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0,17}; // recode from pin to array offset
//          {18,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19}; // recode from array offset to pin
//a4   2     3      4     5     6     7      8     9     10     11   12      13    a0    a1     a2    a3    a5
static const unsigned char data[] PROGMEM =  // BRG * 6 phases
{
0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 blue rays rotating clockwise
0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00, //f

0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 red rotating clockwise
0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00, //f

0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 green rotating clockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //f

0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 magenta rays rotating clockwise
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //f

0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 yellow rotating clockwise
0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff, //f

0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 cyan rotating clockwise
0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff, //f

0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 blue rays rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00, //f
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b

0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 red rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00, //f
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b

0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 green rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //f
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b

0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 magenta rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //f
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b

0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 yellow rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff, //f
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b

0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 cyan rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff, //f
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //b

0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 blue rays rotating clockwise
0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00, //c

0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 red rotating clockwise
0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00, //c

0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 green rotating clockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //c

0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 magenta rotating clockwise
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //c

0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 yellow rotating clockwise
0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff, //c

0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 cyan rotating clockwise
0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff, //c


0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 blue rays rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00, //b

0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 red rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00, //b

0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 green rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //b

0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 magenta rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //c
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //b

0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 yellow rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff, //c
0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00, //b

0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 6 cyan rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff, //c
0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00, //b


0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00, //a 12 blue rays rotating clockwise
0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00, //b
0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00, //c

0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00, //a 12 red rotating clockwise
0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00, //b
0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00, //c

0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //a 12 green rotating clockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff, //b
0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //c

0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //a 12 magenta rotating clockwise
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00, //b
0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //c

0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00, //a 12 yellow rotating clockwise
0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff, //b
0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff, //c

0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00, //a 12 cyan rotating clockwise
0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff, //b
0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff, //c


0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00, //a 12 blue rays rotating counterclockwise
0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00, //c
0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0x00, 0x00,  0xff, 0x00, 0x00, //b

0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00, //a 12 red rotating counterclockwise
0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00, //c
0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0x00, //b

0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //a 12 green rotating counterclockwise
0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //c
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0xff, //b

0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //a 12 magenta rotating counterclockwise
0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //c
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0xff, 0xff, 0x00, //b

0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00, //a 12 yellow rotating counterclockwise
0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff, //c
0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff,  0x00, 0x00, 0x00,  0x00, 0xff, 0xff,  0x00, 0xff, 0xff, //b

0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00, //a 12 cyan rotating counterclockwise
0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff, //c
0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff,  0x00, 0x00, 0x00,  0xff, 0x00, 0xff,  0xff, 0x00, 0xff, //b

0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 magenta+green rotating clockwise
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //b
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //c
0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //f

0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //a 3 magenta+green rotating counterclockwise
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00, //f
0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0xff,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00, //d
0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff, //c
0x00, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0x00,  0x00, 0x00, 0xff,  0x00, 0x00, 0x00, //b

//////////////////////////////////////

0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00, //a 3 rays with blue tail rotating clockwise
0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00, //b
0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00, //c
0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00, //d
0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00, //e
0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff, //f

0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00, //a 3 rays with blue tail rotating counterclockwise
0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff, //f
0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00, //e
0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00, //d
0x3f, 0x00, 0x00,  0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00, //c
0x7f, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0x0f, 0x00, 0x00,  0x1f, 0x00, 0x00,  0x3f, 0x00, 0x00, //b

0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00, //a 3-ray stars: green & magenta rotating in different directions (1)
0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f, //b
0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f, //c
0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f, //d
0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f, //e
0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff, //f
/////////////////////////////////////////

0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00, //a 3-ray stars: green & magenta rotating in different directions (2)
0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff, //f
0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f, //e
0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f, //d
0x3f, 0x3f, 0x0f,  0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f, //c
0x7f, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x7f,  0x0f, 0x0f, 0x3f,  0x1f, 0x1f, 0x1f,  0x3f, 0x3f, 0x0f, //b

0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00, //a 6 rays with red tail rotating clockwise
0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00, //b
0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff, //c

0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00, //a 6 rays with red tail rotating counterclockwise
0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff, //c
0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00,  0x00, 0x7f, 0x00,  0xff, 0xff, 0xff,  0x00, 0x3f, 0x00, //b

0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f, //a 6-ray stars: green & magenta rotating in different directions (1)
0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f, //b
0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff, //c

0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f, //a 6-ray stars: green & magenta rotating in different directions (2)
0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff, //c
0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f,  0x7f, 0x7f, 0x3f,  0xff, 0xff, 0xff,  0x3f, 0x3f, 0x7f, //b

0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00, //a white-black shining
0x00, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0xff, 0xff, 0xff,  0x00, 0x00, 0x00,  0xff, 0xff, 0xff, //b

0xff, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0xff, 0x00,  0x00, 0x00, 0xff, //a green-magenta shining
0x00, 0x00, 0xff,  0xff, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0xff, 0x00, //b

0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff, //a 3colors rotating clockwise
0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00, //b
0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00, //c

0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff, //a 3colors rotating counterclockwise
0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00, //c
0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00,  0x00, 0x00, 0xff,  0xff, 0x00, 0x00,  0x00, 0xff, 0x00, //b

0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00, //a rainbow rotating clockwise
0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00, //b
0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff, //c
0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff, //d
0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff, //e
0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00, //f

0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00, //a rainbow rotating counterclockwise
0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00, //f
0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff, //e
0xff, 0x00, 0xff,  0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff, //d
0xff, 0x00, 0x00,  0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff, //c
0xff, 0xff, 0x00,  0x00, 0xff, 0x00,  0x00, 0xff, 0xff,  0x00, 0x00, 0xff,  0xff, 0x00, 0xff,  0xff, 0x00, 0x00 //b
};

tLEDRGB LD[maxEffects];
unsigned long startTime; // start time of current effect
unsigned long prevTime; // time since last PWM phase

void setup()
{
    for(byte i = 2; i < 20; i++)
        pinMode(i, OUTPUT);
    Serial.begin(115200);
    for(byte i = 0; i < maxEffects; i++)
    {
      LD[i].t = effects[i*4 + 0];
      LD[i].f = effects[i*4 + 1];
      LD[i].r = effects[i*4 + 2];
      LD[i].d = effects[i*4 + 3];
      Serial.print("Offset: ");
      Serial.println(LD[i].d);
    }
    startTime = micros();
    prevTime = startTime;
}

void loop()
{
//    byte t; // time of frame in 16 ms units
//    byte f; // number of frames per cycle
//    byte r; // number of cycle repetitions
    static byte phase  = 0;  // (-) PWM phase (0-63)(0.25ms*64 = 16ms)
    static byte pwmc   = 0;  // (t) number of PWM-cycle repetition in frame (0 - LD.t-1)
    static byte frame  = 0;  // (f) current frame (0 - LD.f-1)
    static byte rep    = 0;  // (r) number of effect repetition (0 - LD.r-1)
    static byte effect = 0;  // (-) current effect  (0 - maxEffects-1)
    unsigned long time = micros();
    unsigned long dt = time - prevTime;
    if(dt >= dtPWM)    //  moment of RWM phase switch (each 250 ms) минимальное время выполнения ~110 мс
    {
        prevTime = time;
        for(int i = 2; i < 20; i++)
        {
//          pgm_read_byte(&
//            byte tmp = data[a2p[i] + frame*18 + LD[effect].d]; // volume
            byte tmp = pgm_read_byte(&data[a2p[i] + frame*18 + LD[effect].d]); // volume
            digitalWrite(i, tmp > phase*volumeStep);
        }
        phase++;
        if (phase == numLevels /*LD[effect].t*/) // moment of end PWM cycle (each 16 ms)
        {
            phase = 0;
            pwmc++;
            if(pwmc == LD[effect].t) // moment of frame switch (each ~150 ms)
            {
                pwmc = 0;
                frame++;
                if(frame == LD[effect].f) // moment of end effect cycle (~1s)
                {
                    frame = 0;
                    rep++;
                    if(rep == LD[effect].r) // moment of effect switch (~4s)
                    {
                        rep = 0;
                        effect++;
                        if(effect == maxEffects) // return to first effect (all time of effects sequence)
                            effect = 0;
                        static long prevEffectTime = 0;
                        Serial.print("Effect: ");
                        Serial.print(effect);
                        Serial.print(" time: ");
                        Serial.println(time - prevEffectTime);
                        prevEffectTime = time;
                            
                    }
                }
            }
        }
    }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

а как оно работает? видео есть?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Специально разместил повыше - в самом начале сообщения №1.

Правда, при загрузке изображение почему-то уменьшилось до 360. Наверное, я где-то ошибся.

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

Специально разместил повыше - в самом начале сообщения №1.

сорри, не увидел.

Спасибо

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Мне нраица. :)   Тока проводов много. :) 

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

На пиксельную можно перепилить, если сам визуал нравится.

Я запихивал адресные светодиоды в светильник уличный с круглым матовым плафоном. Получался магический шар.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

sadman41 пишет:
На пиксельную можно перепилить, если сам визуал нравится.

Не, ну мне нравится: сравнивать 6 каналов при 256к цветах с 54 каналами при 16М цветах.