I spent a few hours searching but found 100% no code that would even get one of the LED's to turn on. I managed to import the FastSPI_LED library and then must have tried 30 different pieces of code and nothing has worked.
Hi, I recently got an arduino uno and would and a 50LED WS2811 light strip.
The LED strip has 4 wires (red, black (which I connected to a 5V rail of an old computer power supply), and the final 2 wires are a green and a white wire. (the white and black wire seem to be connected together as the resistance reads as 0.3 ohms )
I took a picture of the hardware. http://i.imgur.com/SDrDLsY.jpg
I would at least like to get the LED's to turn on (First time using arduino)
The LED's purchased were these: http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=151023467725&ssPageName=ADME:X:BOCOR:US:1123
That was one of the first ones I tried. (the writer made it quite difficult to find the code )
http://sourceforge.net/p/abavr/lib/ci/e3429e3493e08015d94d9237699bf15c085970c7/tree/WS2811/WS2811.h
That was the one I tried copying, and confirmed that the correct pin was used, and the LED's did not attempt to light.
the next that I tried was
http://funkboxing.com/wordpress/wp-content/_postfiles/sk_qLEDFX_POST.ino
but it would not even let me flash it
I also tried
and other than those, I mostly found forum post with sample code but none of the code was in a form where it can just be used, they were all partial.
eg Arduino Forum
Just not sure what I am doing wrong.
Edit: I originally started off with the info provided on this video and imported the libraries listed Google Code Archive - Long-term storage for Google Code Project Hosting. for the library, and
LEDstrip/switched at master · tomfinnie/LEDstrip · GitHub for the users code (also did not work)
Try this:
/*------------------------------------------------------------------------
WS2811 demo
------------------------------------------------------------------------*/
#include <Arduino.h>
#include <util/delay.h>
/*------------------------------------------------------------------------
Pin mappings for different chips
------------------------------------------------------------------------*/
#if defined (__AVR_ATtiny85__)
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED_BIT _BV(3)
#elif defined (__AVR_ATtiny84__)
#define LED_DDR DDRA
#define LED_PORT PORTA
#define LED_PIN PINA
#define LED_BIT _BV(0)
#else
// Assume Arduino Uno, digital pin 8 (ie. port B, pin 0)
// See http://arduino.cc/en/Hacking/PinMapping168 for pin mappings
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED_BIT _BV(0)
#endif
#define NOP __asm__("nop\n\t")
/*------------------------------------------------------------------------
Set the LED pin as output on startup
------------------------------------------------------------------------*/
class WS2811 {
public:
static void init() {
LED_PORT &= ~LED_BIT;
LED_DDR |= LED_BIT;
}
static void sendByte(byte b) {
byte i=8;
do {
if ((b&0x80)==0) {
// Send a '0'
if (F_CPU==16000000L) {
LED_PIN=LED_BIT;NOP;// Hi (start)
NOP;NOP; // Hi
LED_PIN=LED_BIT;NOP;// Lo (250ns)
NOP;NOP; // Lo
NOP;NOP; // Lo (500ns)
}
else if (F_CPU==8000000L) {
LED_PIN = LED_BIT; // Hi (start)
NOP; // Hi
LED_PIN = LED_BIT; // Lo (250ns)
NOP; // Lo
NOP; // Lo (500ns)
NOP; // Lo (data bit here!)
NOP; // Lo (750ns)
}
}
else {
// Send a '1'
if (F_CPU==16000000L) {
LED_PIN=LED_BIT;NOP;// Hi (start)
NOP;NOP; // Hi
NOP;NOP; // Hi (250ns)
NOP;NOP; // Hi
NOP;NOP; // Hi (500ns)
LED_PIN=LED_BIT; // Lo (625ns)
}
else if (F_CPU==8000000L) {
LED_PIN = LED_BIT; // Hi (start)
NOP; // Hi
NOP; // Hi (250ns)
NOP; // Hi
NOP; // Hi (500ns)
NOP; // Hi (data bit here!)
LED_PIN = LED_BIT; // Lo (750ns)
}
}
b = b+b;
} while (--i!=0);
}
};
WS2811 ws2811;
/*------------------------------------------------------------------------
LED object
------------------------------------------------------------------------*/
class LED {
byte r_,g_,b_;
public:
LED& setColor(byte r, byte g, byte b) {
r_ = r;
g_ = g;
b_ = b;
}
// nb. Interrupts must be disabled when you call this (use "cli()")
void send() const {
ws2811.sendByte(g_);
ws2811.sendByte(b_);
ws2811.sendByte(r_);
}
};
/*------------------------------------------------------------------------
Three LEDs
------------------------------------------------------------------------*/
LED led1,led2,led3;
void sendLEDs()
{
// Interrupts off
cli();
// Send 60 LEDs
for (byte i=0; i<20; ++i) {
led1.send();
led2.send();
led3.send();
}
// Interrupts on again
sei();
}
/*------------------------------------------------------------------------
Testing on the Mega328
------------------------------------------------------------------------*/
void setup()
{
// Initialize ws2811 object
ws2811.init();
// Set LED colors
byte a = 0x00;
byte b = 0xff;
led1.setColor(b,b,a);
led2.setColor(a,a,b);
led3.setColor(a,b,b);
}
void loop()
{
// Update LEDs
sendLEDs();
// Wait one second
_delay_ms(1000);
// Swap the LEDs around
LED t = led1;
led1 = led2;
led2 = led3;
led3 = t;
}
hamster462:
The LED strip has 4 wires (red, black (which I connected to a 5V rail of an old computer power supply), and the final 2 wires are a green and a white wire. (the white and black wire seem to be connected together as the resistance reads as 0.3 ohms )
Connect the green wire to Arduino pin 8 and the white wire to Arduino GND.
okay that sample code worked for me very well. After I flipped around my strips so I was using the right input T-T
I was wondering if someone could elaborate on how it all works?
I have worked out that the A is 0 and B is 1 or at least A makes one of the colors turn off in the RGB on and then B make them turn on and that I can add more to the led1-led3 and make more than 3 in a row changing color.
so if the first part of the coding has the timing that sends out the on and off how would I add more precise color changing to my strip like having it make R255, G128, B000, hex color ff8000, which should be orange in color.
Renizy:
okay that sample code worked for me very well. After I flipped around my strips so I was using the right input T-T
I was wondering if someone could elaborate on how it all works?
I have worked out that the A is 0 and B is 1 or at least A makes one of the colors turn off in the RGB on and then B make them turn on and that I can add more to the led1-led3 and make more than 3 in a row changing color.
so if the first part of the coding has the timing that sends out the on and off how would I add more precise color changing to my strip like having it make R255, G128, B000, hex color ff8000, which should be orange in color.
led1.setColor(255,128,0);
Oh, and some strips have the colors switched around. You might need to change the "send()" function in the LED class to this:
void send() const {
ws2811.sendByte(g_);
ws2811.sendByte(r_);
ws2811.sendByte(b_);
}
Okay I have fiddled with it for a while. I have found that the best results are from using the ws2811.h library from http://bleaklow.com/2012/12/02/driving_the_ws2811_at_800khz_with_a_16mhz_avr.html and the code that this guy made Testing my WS2811 LED strip - YouTube I am do not have a mic to hook up to it at the moment but they do make a really pretty color flow with nothing but the lights attached on my arduino uno. http://www.amazon.com/gp/product/B006H06TVG/ref=oh_details_o03_s00_i00?ie=UTF8&psc=1
Basically what I want to do is use either a few buttons, or a few pots (I have both) to switch between light patterns.
thanks for any help.