36mm Square 12V Digital RGB LED Pixels - WS2801

Forum announcements

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
flower
 
Posts: 2
Joined: Tue Mar 04, 2014 10:03 am

36mm Square 12V Digital RGB LED Pixels - WS2801

Post by flower »

Hello

I would like to connect two "36mm Square 12V Digital RGB LED Pixels (Strand of 20) - WS2801" from adafruit
to an arduino uno. Each strip on separate pins, that I can have a different color mode
for the two different strips. (for each strip i have a 12V connection)

Is this possible?

Many thanks
F.

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: 36mm Square 12V Digital RGB LED Pixels - WS2801

Post by adafruit_support_bill »

Yes. It is possible to control the two strips independently from separate sets of pins on the Arduino.

Just declare 2 Adafruit_WS2801 strip objects in your code and specify which pins they are connected to.

flower
 
Posts: 2
Joined: Tue Mar 04, 2014 10:03 am

Re: 36mm Square 12V Digital RGB LED Pixels - WS2801

Post by flower »

Thank you.

I tried it out (I would like to control one strip with 39 pixels, and one with 20 pixels).
The 20 pixels strip works properly (Just doing the adafruit strandtest), on the 39 pixels strip only the first pixel is changing colours, the rest of the pixels is off.

I think the wiring is made correctly. Is it correct to connect the two ground cables to the arduino ground on the digital pin side?

About the sketch, how could I do that both strips do first the adafruit strand test, but I can afterwards change the settings separately?

Can I do the setup for strip_1 and strip_2 ?

Many thanks F.



Below is what I changed so far in the adafruit strandtest sketch:

#include "SPI.h"
#include "Adafruit_WS2801.h"

/*****************************************************************************
Example sketch for driving Adafruit WS2801 pixels!


Designed specifically to work with the Adafruit RGB Pixels!
12mm Bullet shape ----> https://www.adafruit.com/products/322
12mm Flat shape ----> https://www.adafruit.com/products/738
36mm Square shape ----> https://www.adafruit.com/products/683

These pixels use SPI to transmit the color data, and have built in
high speed PWM drivers for 24 bit color per pixel
2 pins are required to interface

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution

*****************************************************************************/

// Choose which 2 pins you will use for output.
// Can be any valid output pins.
// The colors of the wires may be totally different so
// BE SURE TO CHECK YOUR PIXELS TO SEE WHICH WIRES TO USE!

uint8_t dataPin = 2; // Yellow wire on Adafruit Pixels Adafruit_WS2801 (20)
uint8_t clockPin = 3; // Green wire on Adafruit Pixels Adafruit_WS2801 (20)
uint8_t dataPin2 = 4; // Yellow wire on Adafruit Pixels Adafruit_WS2801_2 (39)
uint8_t clockPin2 = 5; // Green wire on Adafruit Pixels Adafruit_WS2801_2 (39)

// Don't forget to connect the ground wire to Arduino ground,
// and the +5V wire to a +5V supply

// Set the first variable to the NUMBER of pixels. 25 = 25 pixels in a row
Adafruit_WS2801 strip = Adafruit_WS2801(20, dataPin, clockPin, WS2801_GRB);
Adafruit_WS2801 strip2 = Adafruit_WS2801(39, dataPin, clockPin, WS2801_GRB);
// Optional: leave off pin numbers to use hardware SPI
// (pinout is then specific to each board and can't be changed)
//Adafruit_WS2801 strip = Adafruit_WS2801(25);

// For 36mm LED pixels: these pixels internally represent color in a
// different format. Either of the above constructors can accept an
// optional extra parameter: WS2801_RGB is 'conventional' RGB order
// WS2801_GRB is the GRB order required by the 36mm pixels. Other
// than this parameter, your code does not need to do anything different;
// the library will handle the format change. Examples:
//Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin, WS2801_GRB);
//Adafruit_WS2801 strip = Adafruit_WS2801(25, WS2801_GRB);

void setup() {

strip.begin();

// Update LED contents, to start they are all 'off'
strip.show();
}


void loop() {
// Some example procedures showing how to display to the pixels

colorWipe(Color(255, 0, 0), 50);
colorWipe(Color(0, 255, 0), 50);
colorWipe(Color(0, 0, 255), 50);
rainbow(20);
rainbowCycle(20);
}

void rainbow(uint8_t wait) {
int i, j;

for (j=0; j < 256; j++) { // 3 cycles of all 256 colors in the wheel
for (i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel( (i + j) % 255));
}
strip.show(); // write all the pixels out
delay(wait);
}
}

// Slightly different, this one makes the rainbow wheel equally distributed
// along the chain
void rainbowCycle(uint8_t wait) {
int i, j;

for (j=0; j < 256 * 5; j++) { // 5 cycles of all 25 colors in the wheel
for (i=0; i < strip.numPixels(); i++) {
// tricky math! we use each pixel as a fraction of the full 96-color wheel
// (thats the i / strip.numPixels() part)
// Then add in j which makes the colors go around per pixel
// the % 96 is to make the wheel cycle around
strip.setPixelColor(i, Wheel( ((i * 256 / strip.numPixels()) + j) % 256) );
}
strip.show(); // write all the pixels out
delay(wait);
}
}

// fill the dots one after the other with said color
// good for testing purposes
void colorWipe(uint32_t c, uint8_t wait) {
int i;

for (i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

/* Helper functions */

// Create a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte b)
{
uint32_t c;
c = r;
c <<= 8;
c |= g;
c <<= 8;
c |= b;
return c;
}

//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)
{
if (WheelPos < 85) {
return Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}

Locked
Please be positive and constructive with your questions and comments.

Return to “Announcements”