Today I built a Boarduino and the example sketches are working fine. For my first project I wanted to control some ShiftBrite LEDs. When I upload the sample program which (I assume) cycles through red, green & blue, the ShiftBrite does light up, but it it just sorta flickers for a few seconds, then stays steady white for a few seconds, repeat ad nauseum.
I've tried 2 different ShiftBrite modules and get the same behavior.
So I tried creating my own little program to read from the serial monitor and manually control RGB. If I'm setting it to "all green" it stays steady white. All red or all blue just sorta flickers white. Code is below.
Any ideas? Maybe I've not wired/soldered my Boarduino correctly?
I'm a programmer, not a hardware guy, so please keep my ignorance in mind.
int datapin = 10; // DI
int latchpin = 11; // LI
int enablepin = 12; // EI
int clockpin = 13; // CI
unsigned long SB_CommandPacket;
int SB_CommandMode;
int SB_BlueCommand;
int SB_RedCommand;
int SB_GreenCommand;
int val;
void setup() {
Serial.begin(9600);
pinMode(datapin, OUTPUT);
pinMode(latchpin, OUTPUT);
pinMode(enablepin, OUTPUT);
pinMode(clockpin, OUTPUT);
digitalWrite(latchpin, LOW);
digitalWrite(enablepin, LOW);
}
void SB_SendPacket() {
SB_CommandPacket = SB_CommandMode & B11;
SB_CommandPacket = (SB_CommandPacket << 10) | (SB_BlueCommand & 1023);
SB_CommandPacket = (SB_CommandPacket << 10) | (SB_RedCommand & 1023);
SB_CommandPacket = (SB_CommandPacket << 10) | (SB_GreenCommand & 1023);
shiftOut(datapin, clockpin, MSBFIRST, SB_CommandPacket >> 24);
shiftOut(datapin, clockpin, MSBFIRST, SB_CommandPacket >> 16);
shiftOut(datapin, clockpin, MSBFIRST, SB_CommandPacket >> 8);
shiftOut(datapin, clockpin, MSBFIRST, SB_CommandPacket);
delay(1); // adjustment may be necessary depending on chain length
digitalWrite(latchpin,HIGH); // latch data into registers
delay(1); // adjustment may be necessary depending on chain length
digitalWrite(latchpin,LOW);
}
void loop() {
if (Serial.available()) {
val = Serial.read();
if (val == 'r') {
SB_CommandMode = B01; // Write to current control registers
SB_RedCommand = 127; // Full current
SB_GreenCommand = 0; // No current
SB_BlueCommand = 0; // No current
SB_SendPacket();
SB_CommandMode = B00; // Write to PWM control registers
SB_RedCommand = 1023; // Maximum red
SB_GreenCommand = 0; // Minimum green
SB_BlueCommand = 0; // Minimum blue
SB_SendPacket();
}
if (val == 'b') {
SB_CommandMode = B01; // Write to current control registers
SB_RedCommand = 0; // No current
SB_GreenCommand = 0; // No current
SB_BlueCommand = 127; // Full current
SB_SendPacket();
SB_CommandMode = B00; // Write to PWM control registers
SB_RedCommand = 0; // Minimum red
SB_GreenCommand = 0; // Minimum green
SB_BlueCommand = 1023; // Maximum blue
SB_SendPacket();
}
if (val == 'g') {
SB_CommandMode = B01; // Write to current control registers
SB_RedCommand = 0; // No current
SB_GreenCommand = 127; // Full current
SB_BlueCommand = 0; // No current
SB_SendPacket();
SB_CommandMode = B00; // Write to PWM control registers
SB_RedCommand = 0; // Minimum red
SB_GreenCommand = 1023; // Maximum green
SB_BlueCommand = 0; // Minimum blue
SB_SendPacket();
}
}
}