#include #ifdef __AVR__ #include #endif #include #include "wagon.h" #define PIN D2 #define NUMPIXELS 300 Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); long lastPixelUpdate=0; #define PIXELUPDATETIME 10 long lastRoutineUpdate=0; #define ROUTINEUPDATETIME 10 long loopmillis=0; uint8_t height[NUMPIXELS]; #define MAXHEIGHT 45 std::vector wagon_arr; uint8_t maxid=0; void setup() { Serial.begin(115200); strip.begin(); strip.setBrightness(150); strip.show(); // Initialize all pixels to 'off' Serial.println("Started"); for (int i=0;i length 1 float interpolateStep= ((int)(interpolateEndvalue)-(int)(interpolateStartvalue))*1.0 /(interpolateLength+1); Serial.println(); Serial.print("interpolateStep="); Serial.print("("); Serial.print(interpolateEndvalue); Serial.print("-"); Serial.print(interpolateStartvalue); Serial.print(")/"); Serial.print(interpolateLength+1); Serial.print("="); Serial.println(interpolateStep); int interpolateStepCounter=1; Serial.println(); Serial.print("interpolateStartpos="); Serial.println(interpolateStartpos); Serial.print("interpolateEndpos="); Serial.println(interpolateEndpos); Serial.print("interpolateStartvalue="); Serial.println(interpolateStartvalue); Serial.print("interpolateEndvalue="); Serial.println(interpolateEndvalue); Serial.print("interpolateLength="); Serial.println(interpolateLength); Serial.print("interpolateStep="); Serial.println(interpolateStep,6); for (int setinti=interpolateStartpos;setinti<=interpolateEndpos;setinti++) { //for all coherent elements to interpolate height[setinti]=height[interpolateStartpos-1]+(int)(interpolateStep*interpolateStepCounter); /*Serial.print(height[interpolateStartpos-1]); Serial.print("+("); Serial.print(interpolateStep); Serial.print("*"); Serial.print(interpolateStepCounter); Serial.print(")="); Serial.println(height[setinti]);*/ interpolateStepCounter++; } interpolateStartpos=interpolateEndpos; } } Serial.println(); for (int i=0;i::iterator it = wagon_arr.begin(); it != wagon_arr.end(); ++it) //all wagons { Wagon & w = *it; w.updateGraphics(); } strip.show(); } if (lastRoutineUpdate+ROUTINEUPDATETIME::iterator it = wagon_arr.begin(); it != wagon_arr.end(); ++it) //all wagons { Wagon & w = *it; w.updatePhysics(ROUTINEUPDATETIME); if (!w.alive()) { it = wagon_arr.erase(it); // After erasing, it is now pointing the next element. --it; spawnWagon(); //spawn new one } } } } // Input a value 0 to 255 to get a color value. // The colours are a transition r - g - b - back to r. uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); }