diff --git a/ANIMartRIX.ino b/ANIMartRIX.ino index 7c7fa69..b89bae7 100644 --- a/ANIMartRIX.ino +++ b/ANIMartRIX.ino @@ -83,6 +83,48 @@ struct rgb { rgb pixel; +typedef void (*Pattern)(); +typedef Pattern PatternList[]; +typedef struct { + Pattern pattern; + String name; +} PatternAndName; +typedef PatternAndName PatternAndNameList[]; + +int currentPattern = 0; + +#include "animation_collection.h" + +PatternAndNameList gPatterns = { + { RGB_Blobs5, "RGB_Blobs5" }, + { RGB_Blobs4, "RGB_Blobs4" }, + { RGB_Blobs3, "RGB_Blobs3" }, + { RGB_Blobs2, "RGB_Blobs2" }, + { RGB_Blobs, "RGB_Blobs" }, + { Polar_Waves, "Polar_Waves" }, + { Slow_Fade, "Slow_Fade" }, +// { Zoom2, "Zoom2" }, + { Zoom, "Zoom" }, + { Hot_Blob, "Hot_Blob" }, + { Spiralus2, "Spiralus2" }, + { Spiralus, "Spiralus" }, + { Yves, "Yves" }, + { Scaledemo1, "Scaledemo1" }, + { Lava1, "Lava1" }, + { Caleido3, "Caleido3" }, + { Caleido2, "Caleido2" }, + { Caleido1, "Caleido1" }, + { Distance_Experiment, "Distance_Experiment" }, + { Center_Field, "Center_Field" }, + { Waves, "Waves" }, + { Chasing_Spirals, "Chasing_Spirals" }, + { Rotating_Blob, "Rotating_Blob" }, + { Rings, "Rings" }, +}; + +#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0])) +int gPatternCount = ARRAY_SIZE(gPatterns); + //****************************************************************************************************************** @@ -120,7 +162,7 @@ void loop() { //Spiralus(); //Yves(); //Scaledemo1(); - Lava1(); + // Lava1(); //Caleido3(); //Caleido2(); //Caleido1(); @@ -130,5 +172,14 @@ void loop() { //Chasing_Spirals(); //Rotating_Blob(); //Rings(); + EVERY_N_SECONDS(90) { + currentPattern = random(1, (gPatternCount - 1)); +// autopgm++; + // if (autopgm >= gPatternCount) autopgm = 1; + Serial.print("Next Auto pattern: "); + Serial.println(gPatterns[currentPattern].name); + } + + gPatterns[currentPattern].pattern(); } diff --git a/animation_collection.ino b/animation_collection.h similarity index 99% rename from animation_collection.ino rename to animation_collection.h index c9b7803..0c42a96 100644 --- a/animation_collection.ino +++ b/animation_collection.h @@ -1,3 +1,7 @@ +#include "noise.h" +#include "oscillators.h" +#include "rendering.h" + void Rotating_Blob() { diff --git a/noise.ino b/noise.h similarity index 100% rename from noise.ino rename to noise.h diff --git a/notes_to_myself.ino b/notes_to_myself.ino index 31e18ad..58ec5c1 100644 --- a/notes_to_myself.ino +++ b/notes_to_myself.ino @@ -35,35 +35,6 @@ idle light routine (>=min brightnes) */ -void run_default_oscillators(){ - - timings.master_speed = 0.005; // master speed - - timings.ratio[0] = 1; // speed ratios for the oscillators, higher values = faster transitions - timings.ratio[1] = 2; - timings.ratio[2] = 3; - timings.ratio[3] = 4; - timings.ratio[4] = 5; - timings.ratio[5] = 6; - timings.ratio[6] = 7; - timings.ratio[7] = 8; - timings.ratio[8] = 9; - timings.ratio[9] = 10; - - - timings.offset[0] = 000; - timings.offset[1] = 100; - timings.offset[2] = 200; - timings.offset[3] = 300; - timings.offset[4] = 400; - timings.offset[5] = 500; - timings.offset[6] = 600; - timings.offset[7] = 700; - timings.offset[8] = 800; - timings.offset[9] = 900; - - calculate_oscillators(timings); -} diff --git a/oscillators.ino b/oscillators.h similarity index 52% rename from oscillators.ino rename to oscillators.h index 063f593..c54d8c4 100644 --- a/oscillators.ino +++ b/oscillators.h @@ -17,3 +17,32 @@ void calculate_oscillators(oscillators &timings) { } +void run_default_oscillators(){ + + timings.master_speed = 0.005; // master speed + + timings.ratio[0] = 1; // speed ratios for the oscillators, higher values = faster transitions + timings.ratio[1] = 2; + timings.ratio[2] = 3; + timings.ratio[3] = 4; + timings.ratio[4] = 5; + timings.ratio[5] = 6; + timings.ratio[6] = 7; + timings.ratio[7] = 8; + timings.ratio[8] = 9; + timings.ratio[9] = 10; + + + timings.offset[0] = 000; + timings.offset[1] = 100; + timings.offset[2] = 200; + timings.offset[3] = 300; + timings.offset[4] = 400; + timings.offset[5] = 500; + timings.offset[6] = 600; + timings.offset[7] = 700; + timings.offset[8] = 800; + timings.offset[9] = 900; + + calculate_oscillators(timings); +} diff --git a/rendering.ino b/rendering.h similarity index 99% rename from rendering.ino rename to rendering.h index a06a1d5..fea5803 100644 --- a/rendering.ino +++ b/rendering.h @@ -1,3 +1,15 @@ +// float mapping maintaining 32 bit precision +// we keep values with high resolution for potential later usage + +float map_float(float x, float in_min, float in_max, float out_min, float out_max) { + + float result = (x-in_min) * (out_max-out_min) / (in_max-in_min) + out_min; + if (result < out_min) result = out_min; + if( result > out_max) result = out_max; + + return result; +} + // Convert the 2 polar coordinates back to cartesian ones & also apply all 3d transitions. // Calculate the noise value at this point based on the 5 dimensional manipulation of // the underlaying coordinates. @@ -46,17 +58,6 @@ void render_polar_lookup_table(float cx, float cy) { -// float mapping maintaining 32 bit precision -// we keep values with high resolution for potential later usage - -float map_float(float x, float in_min, float in_max, float out_min, float out_max) { - - float result = (x-in_min) * (out_max-out_min) / (in_max-in_min) + out_min; - if (result < out_min) result = out_min; - if( result > out_max) result = out_max; - - return result; -} /* unnecessary bloat