Официальный сайт компании Arduino по адресу arduino.cc
/////////////////////////// КУБ 4*4*4 НА MAX7219 #include <QuadrumCode.h> #include <LedControlSPI.h>//вариация библиотеки LedControl (переименована),использующая аппаратный SPI // https://github.com/jacken/LedControl_HW_SPI LedControl LC = LedControl(9,6);// создаём объект класса для 6 индикаторов // при этом выводы 11-DIN(MOSI) 13-CLK(SCK) 9-CS //зелёный,фиолетовый,жёлтый /////////////////////////////////////////// #define DATASTORE_IS_PROGMEM true ////////////////////////////////////// QuadrumCode qc; int t = 0; //счётчик кадров extern const uint8_t animation_1[]; extern const uint8_t animation_2[]; extern const uint8_t animation_3[]; extern const uint8_t animation_4[]; void setup () { qc.configure(animation_2, 256, frame,DATASTORE_IS_PROGMEM ); // allow frame control//разрешить управление кадром qc.start(); //////////////////////////////////////////////// LC.shutdown(0, false);//выключаем энергосберегающий режим LC.setIntensity(0,15 );// устанавливаем интенсивность в 15 единиц между 0 и 15 LC.clearDisplay(0);//очищаем матрицу ///////////////////////////////////////////////// } void loop () { qc.tick(); delay(150);// время между сменой кадров t++; if (t == 50) //если мы хотим изменить анимацию на 50 кадре { qc.configure(animation_1, 256, frame, DATASTORE_IS_PROGMEM); // } if (t == 100) //если мы хотим изменить анимацию на 100 кадре { qc.configure(animation_3, 256, frame,DATASTORE_IS_PROGMEM); // } if (t == 150) //если мы хотим изменить анимацию на 150 кадре { qc.configure(animation_2, 256, frame,DATASTORE_IS_PROGMEM); } if (t == 200) //если мы хотим изменить анимацию на 200 кадре { qc.configure(animation_4, 256, frame,DATASTORE_IS_PROGMEM); t=0;//сброс счётчика для нового перебора эффектов } } ///////////////////////////////// void frame(QuadrumCode* _QuadrumCodeObject) { uint8_t cubeSideSize = _QuadrumCodeObject->getCubeSideSize(); for (uint8_t z = 0; z < cubeSideSize; z ++) { for (uint8_t y = 0; y < cubeSideSize; y ++) { for (uint8_t x = 0; x < cubeSideSize; x ++) { uint8_t pixelNumber = ( x*2+(y%2))+ (2*cubeSideSize * (y/2)) + (cubeSideSize * cubeSideSize * z); if (_QuadrumCodeObject->getVoxelState (z, y, x) == true) { // возвращает true, если воксель в x, y и z включен, иначе возвращает false LC.setLed(0,pixelNumber/8 ,pixelNumber%8 ,1);// } else { LC.setLed(0,pixelNumber/8 ,pixelNumber%8 ,0);// } } } } }
#include <avr/pgmspace.h> //// волна-гора const uint8_t animation_1[]PROGMEM = {0x04,0x01,0x01,0x06,0x00,0x00,0x00,0xC8,0x42,0x21,0x84,0x10,0x4A,0x80,0x25,0x48,0x12,0x00,0x00,0xC8,0x42,0x52,0x08, 0x21,0x84,0x10,0x4A,0x80,0x25,0x00,0x00,0xC8,0x42,0xA4,0x01,0x52,0x08,0x21,0x84,0x10,0x4A,0x00,0x00,0x48,0x43,0x48, 0x12,0xA4,0x01,0x52,0x08,0x21,0x84,0x00,0x00,0xC8,0x42,0x80,0x25,0x48,0x12,0xA4,0x01,0x52,0x08,0x00,0x00,0xC8,0x42, 0x10,0x4A,0x80,0x25,0x48,0x12,0xA4,0x01 }; //// волна const uint8_t animation_2[] PROGMEM = {0x04,0x01,0x01,0x06,0x00,0x00,0x00,0xC8,0x42,0x21,0x84,0x21,0x84,0x21,0x84,0x21,0x84,0x00,0x00,0xC8,0x42,0x52,0x08, 0x52,0x08,0x52,0x08,0x52,0x08,0x00,0x00,0xC8,0x42,0xA4,0x01,0xA4,0x01,0xA4,0x01,0xA4,0x01,0x00,0x00,0xC8,0x42,0x48, 0x12,0x48,0x12,0x48,0x12,0x48,0x12,0x00,0x00,0xC8,0x42,0x80,0x25,0x80,0x25,0x80,0x25,0x80,0x25,0x00,0x00,0xC8,0x42, 0x10,0x4A,0x10,0x4A,0x10,0x4A,0x10,0x4A }; //// рамка вниз-вверх const uint8_t animation_3[] PROGMEM ={0x04,0x01,0x01,0x06,0x00,0x00,0x00,0xC8,0x42,0x0F,0x00,0x09,0x00,0x09,0x00,0x0F,0x00,0x00,0x00,0xC8,0x42,0xF0,0x00,0x90, 0x00,0x90,0x00,0xF0,0x00,0x00,0x00,0xC8,0x42,0x00,0x0F,0x00,0x09,0x00,0x09,0x00,0x0F,0x00,0x00,0xC8,0x42,0x00,0xF0,0x00, 0x90,0x00,0x90,0x00,0xF0,0x00,0x00,0xC8,0x42,0x00,0x0F,0x00,0x09,0x00,0x09,0x00,0x0F,0x00,0x00,0xC8,0x42,0xF0,0x00,0x90, 0x00,0x90,0x00,0xF0,0x00 }; //// рамка вперёд-назад const uint8_t animation_4[] PROGMEM ={0x04,0x01,0x01,0x06,0x00,0x00,0x00,0xC8,0x42,0x11,0x11,0x01,0x10,0x01,0x10,0x11,0x11,0x00,0x00,0xC8,0x42,0x22,0x22,0x02, 0x20,0x02,0x20,0x22,0x22,0x00,0x00,0xC8,0x42,0x44,0x44,0x04,0x40,0x04,0x40,0x44,0x44,0x00,0x00,0xC8,0x42,0x88,0x88,0x08, 0x80,0x08,0x80,0x88,0x88,0x00,0x00,0xC8,0x42,0x44,0x44,0x04,0x40,0x04,0x40,0x44,0x44,0x00,0x00,0xC8,0x42,0x22,0x22,0x02, 0x20,0x02,0x20,0x22,0x22 };
Адаптировал 4*4*4 куб под работу с симулятором.
Адаптировал 4*4*4 куб под работу с симулятором.