+++PART ONE+++
So i have pondered for two weeks and finally came up with a solution. It was not easy, i had to find a completely new way to code the matrix.
I didn´t convert color codes neither build a cubic space with color vectors. I would like to, but im not that far in coding.
I ditched the delay() function and startet to work with millis(), the internal clock.
Here is my code:
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
#define PSTR // Make Arduino Due happy
#endif
#define PIN 13
// Color definitions
#define BLACK 0x0000
#define RED 0xF800
#define ORANGE 0xfba0
#define YELLOW 0xFFE0
#define LIME 0xc7e0
#define GREEN 0x07E0
#define CYAN 0x07FF
#define AQUA 0x05ff
#define BLUE 0x001F
#define PURPLE 0xb01f
#define MAGENTA 0xF81F
#define PINK 0xf814
#define WHITE 0xFFFF
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, 5, PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_GRB + NEO_KHZ800);
long ColVar[192]={63488, 63552, 63616, 63680, 63744, 63808, 63872, 63936, 64000, 64064, 64128, 64192, 64256, 64320, 64384, 64448, 64512, 64576, 64640, 64704, 64768, 64832, 64896, 64960, 65024, 65088, 65152, 65216, 65280, 65344, 65408, 65472,
65504, 63456, 61408, 59360, 57312, 55264, 53216, 51168, 49120, 47072, 45024, 42976, 40928, 38880, 36832, 34784, 32736, 30688, 28640, 26592, 24544, 22496, 20448, 18400, 16352, 14304, 12256, 10208, 8160, 6112, 4064, 2016,
2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047,
2015, 1951, 1887, 1823, 1759, 1695, 1631, 1567, 1503, 1439, 1375, 1311, 1247, 1183, 1119, 1055, 991, 927, 863, 799, 735, 671, 607, 543, 479, 415, 351, 287, 223, 159, 95, 31,
31, 2079, 4127, 6175, 8223, 10271, 12319, 14367, 16415, 18463, 20511, 22559, 24607, 26655, 28703, 30751, 32799, 34847, 36895, 38943, 40991, 43039, 45087, 47135, 49183, 51231, 53279, 55327, 57375, 59423, 61471, 63519,
63519, 63518, 63517, 63516, 63515, 63514, 63513, 63512, 63511, 63510, 63509, 63508, 63507, 63506, 63505, 63504, 63503, 63502, 63501, 63500, 63499, 63498, 63497, 63496, 63495, 63494, 63493, 63492, 63491, 63490, 63489, 63488};
int Col1 = 0;
int Col2 = 5;
int Col3 = 10;
int Col4 = 15;
int Col5 = 20;
int Col6 = 25;
int Col7 = 30;
int Col8 = 35;
int Col9 = 40;
int Col10 = 45;
int Col11 = 50;
int Col12 = 55;
unsigned long startMillis;
unsigned long ColMillis1;
unsigned long ColMillis2;
unsigned long ColMillis3;
unsigned long ColMillis4;
unsigned long ColMillis5;
unsigned long ColMillis6;
unsigned long ColMillis7;
unsigned long ColMillis8;
unsigned long ColMillis9;
unsigned long ColMillis10;
unsigned long ColMillis11;
unsigned long ColMillis12;
unsigned long currentMillis;
void setup() {
startMillis = millis(); //initial start time
ColMillis1 = millis();
ColMillis2 = millis();
ColMillis3 = millis();
ColMillis4 = millis();
ColMillis5 = millis();
ColMillis6 = millis();
ColMillis7 = millis();
ColMillis8 = millis();
ColMillis9 = millis();
ColMillis10 = millis();
ColMillis11 = millis();
ColMillis12 = millis();
matrix.begin();
matrix.setBrightness(20);
}
//===============================================================================================
//===========================================LOOP================================================
void loop() {
currentMillis = millis(); //get the current "time" (actually the number of milliseconds since the program started)
fastRect();
colSpectr();
timer();
HueControll();
}
//===============================================================================================
//====================================Kombined Funktions=========================================
//===============================================================================================
void fastRect() {
if ((currentMillis - startMillis >= 0) && (currentMillis - startMillis <= 250)) {
bigRect();
}
if ((currentMillis - startMillis >= 250) && (currentMillis - startMillis <= 500)) {
medRect();
}
if ((currentMillis - startMillis >= 500) && (currentMillis - startMillis <= 750)) {
smolRect();
}
if ((currentMillis - startMillis >= 750) && (currentMillis - startMillis <= 1000)) {
medRect();
}
if ((currentMillis - startMillis >= 1000) && (currentMillis - startMillis <= 1250)) {
bigRect();
}
if ((currentMillis - startMillis >= 1250) && (currentMillis - startMillis <= 1500)) {
medRect();
}
if ((currentMillis - startMillis >= 1500) && (currentMillis - startMillis <= 1750)) {
smolRect();
}
if ((currentMillis - startMillis >= 1750) && (currentMillis - startMillis <= 2000)) {
medRect();
}
if ((currentMillis - startMillis >= 2000) && (currentMillis - startMillis <= 2250)) {
bigRect();
}
if ((currentMillis - startMillis >= 2250) && (currentMillis - startMillis <= 2500)) {
medRect();
}
if ((currentMillis - startMillis >= 2500) && (currentMillis - startMillis <= 2750)) {
smolRect();
}
if ((currentMillis - startMillis >= 2750) && (currentMillis - startMillis <= 3000)) {
medRect();
}
if ((currentMillis - startMillis >= 3000) && (currentMillis - startMillis <= 3250)) {
bigRect();
}
if ((currentMillis - startMillis >= 3250) && (currentMillis - startMillis <= 3500)) {
medRect();
}
if ((currentMillis - startMillis >= 3500) && (currentMillis - startMillis <= 3750)) {
smolRect();
}
if ((currentMillis - startMillis >= 3750) && (currentMillis - startMillis <= 4000)) {
medRect();
}
if ((currentMillis - startMillis >= 4000) && (currentMillis - startMillis <= 4250)) {
bigRect();
}
if ((currentMillis - startMillis >= 4250) && (currentMillis - startMillis <= 4500)) {
medRect();
}
if ((currentMillis - startMillis >= 4500) && (currentMillis - startMillis <= 4750)) {
smolRect();
}
if ((currentMillis - startMillis >= 4750) && (currentMillis - startMillis <= 5000)) {
medRect();
}
}
//===============================================================================================
//===============================================================================================
void colSpectr(){
if ((currentMillis - startMillis >= 5000) && (currentMillis - startMillis <= 15000)) {
colSpectrH();
}
if ((currentMillis - startMillis >= 15000) && (currentMillis - startMillis <= 25000)) {
colSpectrV();
}
if ((currentMillis - startMillis >= 25000) && (currentMillis - startMillis <= 35000)) {
colSpectrD();
}
}
//===============================================================================================
//===============================================================================================
void timer() {
//Reset Loop-Timer
if (currentMillis - startMillis > 35000) {
startMillis = currentMillis;
}
}