ntmcguff:
Here is my example of a Star Wars Blaster with 8 RGB LEDs, 3 74HC595 shift registers and the WTV020-SD-16P sound card. The sound files are from onesky.
74HC595 shift registers wiring: http://www.arduino.cc/en/Tutorial/ShiftOut
Blaster4 - YouTube
// Name : Blaster4 //
// Author : Norman McGuffey //
// Date : 16 Feb 2013 //
// Version : 1.0 //
// Notes : Code for using 3 74HC595 Shift Registers with //
// : 8 - 5mm Superbright CC RGB LEDs on E-11 Blaster //
// : Sound using WTV020-SD-16P microSD audio module //
int resetPin2 = 2; // Pin D2 connected to WTV20 /Reset (Pin 1)
int clockPin2 = 3; // Pin D3 connected to WTV20 P04 (clock)(Pin 7)
int dataPin2 = 4; // Pin D4 connected to WTV20 P05 (data)(Pin 10)
int button1Pin = 6; // Pin D6 connected to Trigger Switch
int button2Pin = 7; // Pin D7 connected to Select Switch
int latchPin = 8; // Pin D8 connected to ST_CP (PIN 12)of 74HC595
int dataPin = 11; // Pin D11 connected to DS (PIN 14) of 74HC595
int clockPin = 12; // Pin D12 connected to SH_CP (PIN 11)of 74HC595
int LEDPin = 13; // Pin D13 connected to LED
int button1State = 0;
int button2State = 0;
int button2Count = 1;
const unsigned int VOLUME_0 = 0xFFF0;
const unsigned int VOLUME_1 = 0xFFF1;
const unsigned int VOLUME_2 = 0xFFF2;
const unsigned int VOLUME_3 = 0xFFF3;
const unsigned int VOLUME_4 = 0xFFF4;
const unsigned int VOLUME_5 = 0xFFF5;
const unsigned int VOLUME_6 = 0xFFF6;
const unsigned int VOLUME_7 = 0xFFF7;
const unsigned int PLAY_PAUSE = 0xFFFE;
const unsigned int STOP = 0xFFFF;
byte dataRED;
byte dataGREEN;
byte dataBLUE;
int dataArrayRED[] = {1,8,64,0,0,0,0,0,0};
int dataArrayGREEN[] = {0,0,0,2,16,128,0,0,0};
int dataArrayBLUE[] = {0,0,0,0,0,0,4,32,0};
void setup() {
pinMode(clockPin2, OUTPUT);
pinMode(dataPin2, OUTPUT);
pinMode(resetPin2, OUTPUT);
pinMode(LEDPin, OUTPUT);
digitalWrite(clockPin2, HIGH);
digitalWrite(dataPin2, LOW);
pinMode(latchPin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
digitalWrite(resetPin2, HIGH);
delay(100);
digitalWrite(resetPin2, LOW);
delay(10);
digitalWrite(resetPin2, HIGH);
delay(100);
delay(500);
sendCommand(0xFFF6);
digitalWrite(LEDPin, HIGH);
delay(50);
digitalWrite(LEDPin, LOW);
Serial.begin(9600);
}
void loop() {
button2State = digitalRead(button2Pin);
if (button2State == HIGH) {
sendCommand(0x000);
button2Count = button2Count +1;
if (button2Count > 5) {
button2Count = 1;
}
for (int x=0; x < button2Count; x++){
digitalWrite(LEDPin, HIGH);
delay(100);
digitalWrite(LEDPin, LOW);
delay(200);
}
delay(500);
}
button1State = digitalRead(button1Pin);
if (button1State == HIGH) {
switch (button2Count) {
case 1:
{ // Color = Red
sendCommand(0x001);
int dataArrayRED[] = {1,8,64,0,0,0,0,0,0};
int dataArrayGREEN[] = {0,0,0,2,16,128,0,0,0};
int dataArrayBLUE[] = {32,32,32,32,32,32,36,32,0};
for (int j = 0; j < 9; j++) {
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];
dataBLUE = dataArrayBLUE[j];
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataBLUE);
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
digitalWrite(latchPin, 1);
delay(60);}
break;}
case 2:
{ // Color = Blue
sendCommand(0x002);
int dataArrayRED[] = {4,32,0,0,0,0,0,0,0};
int dataArrayGREEN[] = {0,0,1,8,64,0,0,0,0};
int dataArrayBLUE[] = {128,128,128,128,128,130,144,128,0};
for (int j = 0; j < 9; j++) {
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];
dataBLUE = dataArrayBLUE[j];
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataBLUE);
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
digitalWrite(latchPin, 1);
delay(100);}
break;}
case 3:
{ // Color = Green
sendCommand(0x003);
int dataArrayRED[] = {2,16,128,0,0,0,0,0,0};
int dataArrayGREEN[] = {0,0,0,4,32,0,0,0,0};
int dataArrayBLUE[] = {64,64,64,64,64,65,72,64,0};
for (int j = 0; j < 9; j++) {
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];
dataBLUE = dataArrayBLUE[j];
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataBLUE);
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
digitalWrite(latchPin, 1);
delay(90);}
break;}
case 4:
{ // Color = Purple
sendCommand(0x004);
int dataArrayRED[] = {5,40,64,0,0,0,0,0,0};
int dataArrayGREEN[] = {0,0,1,10,80,128,0,0,0};
int dataArrayBLUE[] = {160,160,160,160,160,162,180,160,0};
for (int j = 0; j < 9; j++) {
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];
dataBLUE = dataArrayBLUE[j];
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataBLUE);
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
digitalWrite(latchPin, 1);
delay(90);}
break;}
case 5:
{ // Color = Orange
sendCommand(0x005);
int dataArrayRED[] = {3,24,192,0,0,0,0,0,0};
int dataArrayGREEN[] = {0,0,0,6,48,128,0,0,0};
int dataArrayBLUE[] = {96,96,96,96,96,97,108,96,0};
for (int j = 0; j < 9; j++) {
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];
dataBLUE = dataArrayBLUE[j];
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataBLUE);
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
digitalWrite(latchPin, 1);
delay(75);}
break;}
}
}
}
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
digitalWrite(myDataPin, pinState);
digitalWrite(myClockPin, 1);
digitalWrite(myDataPin, 0);
}
digitalWrite(myClockPin, 0);
}
void blinkAll_3Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 1);
digitalWrite(latchPin, 1);
delay(50);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
}
}
void sendCommand(int addr)
{
digitalWrite(clockPin2, LOW);
delay(2);
for (int i=15; i>=0; i--)
{
delayMicroseconds(200);
if((addr>>i)&0x0001 >0)
{
digitalWrite(dataPin2, HIGH);
}
else
{
digitalWrite(dataPin2, LOW);
}
delayMicroseconds(200);
digitalWrite(clockPin2, HIGH);
delayMicroseconds(200);
if(i>0)
digitalWrite(dataPin2, LOW);
else
digitalWrite(dataPin2, HIGH);
delayMicroseconds(200);
if(i>0)
digitalWrite(clockPin2, LOW);
else
digitalWrite(clockPin2, HIGH);
}
delay(30);
}
very well!
did you post your video in whitearmor forum too?
http://www.whitearmor.net/forum/topic/19322-arduino-a-cheap-board-for-e11-blaster-effects/page__st__120