I think Sneech has it(is the a dr suess thing?)but instead if frosted plexi cover, what about buying an under cabinet led strip light cover and use some of that tail light tint spray at the auto parts store, put a light coat on the inside just to dumb it down alittle and put the 5 26" strips across the flasher panel. I may be too distracting and you will have to crank up the brightness on the playfield. I also want to run a fer down the sides of cab 1 inch above the playfield with a full length lense over it but this whas for regular 5050 rgbleds and cut them at each contact point and use the lense to cover oll the wiring which will go back through a fer small holes on the playfield flasher panel. I have 33 feet of ws2812 leds, probably more and 18 feet of the regular rgbs, 2 home made flasher panels but I broke one last night testing the temp, I accidently tore the cree off the board but 10 mins of solid 3 color on one led hit 96F. I have them hot glued on but the glue never softened, I did it when I disconnected all the wires. It wasn't white but sort of a white magenta, thats not too hot. With this post becoming so active in the last few weeks, does that mean the controlers are available? Later....Vic
If it ain't broke, it's probably a good idea to take it apart anyway!
Favorite Pinball: Power Play, BoP, JackBot, MM, AFM, CV, MB,Champions Pub, CftBL, ToM, and Many More
PS3 Gamer Tag: LCT0819, Les73gtx
360 Gamer Tag: PissPoorShot
Posted 25 August 2015 - 06:23 AM
Randr what are you using for a controller beside the Swisslizard board. I love the Cree 8 row replacement board and was one of my first thoughts a year ago when these were announced. A quick rundown of how this is wired if you please. I played around with the Config tool tonight and that is lot of LED's on the 2811 controller config page. Just trying to get a better picture of what I need to get either another LedWiz or PacLed64 ....
I'll add some good pics after I get proper led strips but here are a couple with crap strips I used for testing
I plan on doing pictures or video on matrix Arngrim but strips I currently have only have a led every 1.5" by this weekend I will be at least doubling the amount of led's per inch! Then it should really look cool
I'm going to do 3 demos. One @30 led's/meter as seen in videos already with good effects. One @60 led's/meter will be better and one @144 led's/meter should be awesome. Price is scaled per led so gets very expensive quick when setup is 144/meter.
Favorite Pinball: Power Play, BoP, JackBot, MM, AFM, CV, MB,Champions Pub, CftBL, ToM, and Many More
PS3 Gamer Tag: LCT0819, Les73gtx
360 Gamer Tag: PissPoorShot
Posted 27 August 2015 - 07:18 PM
Yeah did some shopping already and got the 60 led's per meter and I will be happy with that. .... Swisslizard ? ... Are you ready to sell these bad boys yet?
Hello, I'm from french forum pincab passion and i'm very enthusiastic working arounds those leds.
I didn't know exactly where to post so...
I have made a workaround with arduino that can make a few of the effects that are shown.
The ledstrip i used is 144 leds per meters
I have intercepted the outputs of the pinscape controller (kl25z) in ledwiz mode with the arduino uno and remaped those to some few effects. The colors cannot be changed for now.
Here is a video showing the effects and another video in game
#include <Adafruit_NeoPixel.h>
// Pattern types supported:
enum pattern { NONE, SCANNER};
// Patern directions supported:
enum direction { FORWARD, REVERSE };
// NeoPattern Class - derived from the Adafruit_NeoPixel class
class NeoPatterns : public Adafruit_NeoPixel
{
public:
// Member Variables:
pattern ActivePattern; // which pattern is running
direction Direction; // direction to run the pattern
unsigned long Interval; // milliseconds between updates
unsigned long lastUpdate; // last update of position
uint32_t Color1, Color2; // What colors are in use
uint16_t TotalSteps; // total number of steps in the pattern
uint16_t Index; // current step within the pattern
void (*OnComplete)(); // Callback on completion of pattern
// Constructor - calls base-class constructor to initialize strip
NeoPatterns(uint16_t pixels, uint8_t pin, uint8_t type, void (*callback)())
:Adafruit_NeoPixel(pixels, pin, type)
{
OnComplete = callback;
}
// Update the pattern
void Update()
{
if((millis() - lastUpdate) > Interval) // time to update
{
lastUpdate = millis();
switch(ActivePattern)
{
case SCANNER:
ScannerUpdate();
break;
default:
break;
}
}
}
// Increment the Index and reset at the end
void Increment()
{
if (Direction == FORWARD)
{
Index++;
if (Index >= TotalSteps)
{
Index = 0;
if (OnComplete != NULL)
{
OnComplete(); // call the comlpetion callback
}
}
}
else // Direction == REVERSE
{
--Index;
if (Index <= 0)
{
Index = TotalSteps-1;
if (OnComplete != NULL)
{
OnComplete(); // call the comlpetion callback
}
}
}
}
// Reverse pattern direction
void Reverse()
{
if (Direction == FORWARD)
{
Direction = REVERSE;
Index = TotalSteps-1;
}
else
{
Direction = FORWARD;
Index = 0;
}
}
// Initialize for a SCANNNER
void Scanner(uint32_t color1, uint8_t interval)
{
ActivePattern = SCANNER;
Interval = interval;
TotalSteps = (numPixels() - 1) * 2;
Color1 = color1;
Index = 0;
}
// Update the Scanner Pattern
void ScannerUpdate()
{
for (int i = 0; i < numPixels(); i++)
{
if (i == Index) // Scan Pixel to the right
{
setPixelColor(i, Color1);
}
else if (i == TotalSteps - Index) // Scan Pixel to the left
{
setPixelColor(i, Color1);
}
else // Fading tail
{
setPixelColor(i, DimColor(getPixelColor(i)));
}
}
show();
Increment();
}
// Calculate 50% dimmed version of a color (used by ScannerUpdate)
uint32_t DimColor(uint32_t color)
{
// Shift R, G and B components one bit to the right
uint32_t dimColor = Color(Red(color) >> 1, Green(color) >> 1, Blue(color) >> 1);
return dimColor;
}
// Set all pixels to a color (synchronously)
void ColorSet(uint32_t color)
{
for (int i = 0; i < numPixels(); i++)
{
setPixelColor(i, color);
}
show();
}
// Returns the Red component of a 32-bit color
uint8_t Red(uint32_t color)
{
return (color >> 16) & 0xFF;
}
// Returns the Green component of a 32-bit color
uint8_t Green(uint32_t color)
{
return (color >> 8) & 0xFF;
}
// Returns the Blue component of a 32-bit color
uint8_t Blue(uint32_t color)
{
return color & 0xFF;
}
// 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 Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
else if(WheelPos < 170)
{
WheelPos -= 85;
return Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
else
{
WheelPos -= 170;
return Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
}
};
// Define some NeoPatterns for the two rings and the stick
// as well as some completion routines
NeoPatterns Stick(144, 0, NEO_GRB + NEO_KHZ800, &StickComplete);
// Initialize everything and prepare to start
void setup()
{
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
// Initialize all the pixelStrips
Stick.begin();
// Kick off a pattern
Stick.Scanner(Stick.Color(255,0,0), 15);
}
// Main loop
void loop()
{
// Switch patterns on a button press:
if (digitalRead(2) == HIGH) // Slingshot Left Button #14 pressed
{
int d;
d = Stick.numPixels();
int slingshot;
slingshot = 15;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all red
for (int i=0; i<slingshot; i++)
{
Stick.setPixelColor(i,Stick.Color(255,0,0));
}
Stick.show();
}
else if (digitalRead(3) == HIGH) // Slingshot Right Button #15 pressed
{
int d;
d = Stick.numPixels();
int slingshot;
slingshot = 15;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all blue
for (int i=d; i>d - slingshot; i--)
{
Stick.setPixelColor(i,Stick.Color(0,0,255));
}
Stick.show();
}
else if (digitalRead(4) == HIGH) // Launch Button #16 pressed
{
// Set stick to Launch Blue
int d;
d = Stick.numPixels();
for (int i=(d/4)*3; i<d; i++)
{
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
Stick.setPixelColor(i, (0, 0, 255)); // Set just this one
Stick.show();
delay(10);
}
}
else if (digitalRead(5) == HIGH) // Gear Button #17 pressed
{
int d;
d = Stick.numPixels();
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all pink
int foo = random(Stick.numPixels());
Stick.setPixelColor(foo, Stick.Color1); // Set pixel white
Stick.show(); // Update strip to show new pixel
delay(10); // Hold it for a moment
Stick.setPixelColor(foo, 0, 0, 0); // Pixel off
//Stick.Color1 = Stick.Wheel(random(255));
// Change will be reflected on next strip.show()
}
else if (digitalRead(6) == HIGH) // Beacon Button #18 pressed
{
int speed = 50;
int length = 60;
for(int i=0; i<Stick.numPixels(); i++) {
Stick.setPixelColor(i, Stick.Color(0,0,0)); // set 'em dark
}
for(int i=0; i<length; i++) {
Stick.setPixelColor(i, Stick.Color(0,0,255)); // light 'em up
}
Stick.show(); // show 'em
delay(speed);
for(int i=0; i<Stick.numPixels(); i++) {
Stick.setPixelColor(i, Stick.Color(0,0,0)); // set 'em dark
}
for(int i=Stick.numPixels(); i>Stick.numPixels()-(length+1) ; i--) {
Stick.setPixelColor(i, Stick.Color(255,0,0)); // light 'em up
}
Stick.show(); // show 'em
delay(speed);
for(int i=0; i<Stick.numPixels(); i++) {
Stick.setPixelColor(i, Stick.Color(0,0,0)); // set 'em dark
}
for(int i=length; i<Stick.numPixels()-(length) ; i++) {
Stick.setPixelColor(i, Stick.Color(255,255,255)); // light 'em up
}
Stick.show(); // show 'em
delay(speed/2);
}
else if (digitalRead(7) == HIGH) // Strobe right Button #20 pressed
{
// Set stick to all blue
Stick.ColorSet(Stick.Color(255, 255, 255));
}
else if (digitalRead(8) == HIGH) // Bumper Back Right Button #21 pressed
{
int d;
d = Stick.numPixels();
int part;
part = d/16;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all green
for (int i=d-(4*part); i>(9*part); i--)
{
Stick.setPixelColor(i,Stick.Color(0,255,0));
}
Stick.show();
}
else if (digitalRead(9) == HIGH) // Bumper Back Center Button #22 pressed
{
int d;
d = Stick.numPixels();
int part;
part = d/16;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all blue
for (int i=d-(7*part); i>(7*part); i--)
{
Stick.setPixelColor(i,Stick.Color(0,0,255));
}
Stick.show();
}
else if (digitalRead(10) == HIGH) // Bumper Back Left Button #23 pressed
{
int d;
d = Stick.numPixels();
int part;
part = d/16;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all red
for (int i=(4*part); i<(7*part); i++)
{
Stick.setPixelColor(i,Stick.Color(255,0,0));
}
Stick.show();
}
else if (digitalRead(11) == HIGH) // Bumper Middle Right Button #24 pressed
{
int d;
d = Stick.numPixels();
int part;
part = d/16;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all ???
for (int i=d-(1*part); i>d-(4*part); i--)
{
Stick.setPixelColor(i,Stick.Color(0,255,255));
}
Stick.show();
}
else if (digitalRead(12) == HIGH) // Bumper Middle Center Button #25 pressed
{
int d;
d = Stick.numPixels();
int part;
part = d/16;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all ???
for (int i=d-(2*part); i>d-(5*part); i--)
{
Stick.setPixelColor(i,Stick.Color(255,0,125));
}
for (int i=(2*part); i<(5*part); i++)
{
Stick.setPixelColor(i,Stick.Color(255,0,125));
}
Stick.show();
}
else if (digitalRead(13) == HIGH) // Bumper Middle Left Button #26 pressed
{
int d;
d = Stick.numPixels();
int part;
part = d/16;
for (int i=0; i<d; i++)
{
Stick.setPixelColor(i, 0);
} // Turn off all LEDs
// Set stick to all ???
for (int i=part; i<(4*part); i++)
{
Stick.setPixelColor(i,Stick.Color(255,255,0));
}
Stick.show();
}
else // Back to normal operation
{
;
// And update tbe stick
Stick.Update();
}
}
//------------------------------------------------------------
//Completion Routines - get called on completion of a pattern
//------------------------------------------------------------
// Stick Completion Callback
void StickComplete()
{
// Random color change for next scan
Stick.Color1 = Stick.Wheel(random(255));
}
Got some updates...
With area of 23 x 3 1/4 I have made 3 different matrix with the 3 available strips 30/meter, 60/meter and 144/meter.
@30/meter effect works but honestly to much is lost as seen in my very first test videos. With 30/meter and size of my area matrix was 17 led's across with 8 rows so matrix was 136 led's and worked ok.
@144/meter effect is best it can be but expensive! With 144/meter and size of my area matrix was 81 led's across with 9 rows so matrix was 729 led's and works amazing! The best you can do!
@60/meter effect works fine. "Affordable" with 60/meter and size of my area matrix was 34 led's across with 8 rows so matrix was 272 led's and effect is fine.
Below are photos of prototype matrix's I applied to copper plate and just soldiered in one direction(strips are directional)
Top matrix is 60/meter
Below that is 30/meter
Below is what I'm going to personally use 144/meter
Again these are built very quickly and just for testing. I will also add in front of the matrix is 5% tinted(black limo tint) plexi and looks great! All you see is smooth black glass until matrix is lit.
Hope this helps people get a better idea of what is going on here.
So here is my thinking on this.
Emulate 5 small round flashers with matrix this should have near perfect result with 144/meter but with 60/meter will still be great! So for basic configs will "look" no different then actual 5 flashers but we will have option to add many more effects within the matrix. I have spent a day trying to convert areas to circles and is proving to be a large task so hoping swisslizard can provide a simple way of doing this. Will hold off on configs until tom can take a look. Thanks guys and sorry to clog up forum with stuff some people may not care about but i think its very cool!
im personally using 144/meter matrix and will say soldier points on 144 are very small. 60 has plenty of room.
Hope this helps someone with wiring the thing up! these are water tight strips and very nice, like the sealed strip just had to cut seal off soldier area no big deal