The photos from the parade!
The parade was a lot of fun and definitely worth the effort we put into make the costume.
Embroidering the heart – we created the graphics in vector and used the embroidery machine to stitch the outline of the heart on the fabric. We learned that the density of the stitch is very important as it broke the needle while stitching! Testing the density and how stable the tension is imperative.
Testing the circuit for two LEDs fading
The code used for the two fading hearts and LED strip in between the hearts that goes back and forth.
#include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> #endif #define PIN 4 LORA pixels, not v2) // NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products) Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRBW + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input // and minimize distance between Arduino and first pixel. Avoid connecting // on a live circuit...if you must, connect GND first. int led = 9;// the PWM pin the LED is attached to //int led2 = 3; int brightness = 0; // how bright the LED is int fadeAmount = 8; // how many points to fade the LED by void setup() { // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // End of trinket special code pinMode(led, OUTPUT); //pinMode(led2, OUTPUT); strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { // Some example procedures showing how to display to the pixels: colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 0, 0), 50); // Red colorWipeReverse(strip.Color(255, 0, 0), 50); // Red colorWipeReverse(strip.Color(0, 0, 0), 50); // Red } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { //analogWrite(led2, brightness); analogWrite(led, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } // wait for 30 milliseconds to see the dimming effect strip.setPixelColor(i, c); strip.show(); delay(wait); } } // Fill the dots one after the other with a color void colorWipeReverse(uint32_t c, uint8_t wait) { for(uint16_t i=strip.numPixels(); i>0; i--) { //analogWrite(led2, brightness); analogWrite(led, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } strip.setPixelColor(i, c); strip.show(); delay(wait); } } // 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); }