I have the following code to be used inside a star trek voyager kit, and this is, for what I call the left hand side phaser strip using 13 leds.
at the moment of course every output led pin is used on the uno.
now I would like to do (with a fourth/fifth and sixth button press), control a separate right hand bank of 13 led's, but with exactly the same sequence.
originally thought of using two separate tinys and two p/b's ,one for left hand bank and one for the right.
or is it possible to use 4x 595 shift registers and write one code to do all 6 sequences with a single button press?
// Project 1 - press button once to get 11 leds flowing from both ends and meeting in the middle led no.8 then fire a delay
// (for phaser bank array on voyager model kit)
// press button twice to get same effect but stopping at a different set point i.e led no.5
// press button third time to get same effect but at a third different point off
// each button press to run once only
int switchPin = 2; // switch is connected to pin 2
int led3Pin = 3;
int led4Pin = 4;
int led5Pin = 5;
int led6Pin = 6;
int led7Pin = 7;
int led8Pin = 8;
int led9Pin = 9;
int led10Pin = 10;
int led11Pin = 11;
int led12Pin = 12;
int led13Pin = 13;
int val; // variable for reading the pin status
int val2; // variable for reading the delayed status
int buttonState; // variable to hold the button state
int Mode = 0; // What mode is the light in?
boolean modeChanged = false;
const int NUM_MODES = 4;
void setup() {
pinMode(switchPin, INPUT); // Set the switch pin as input
pinMode(led3Pin, OUTPUT); // set led pins to output 3 to 13
pinMode(led4Pin, OUTPUT);
pinMode(led5Pin, OUTPUT);
pinMode(led6Pin, OUTPUT);
pinMode(led7Pin, OUTPUT);
pinMode(led8Pin, OUTPUT);
pinMode(led9Pin, OUTPUT);
pinMode(led10Pin, OUTPUT);
pinMode(led11Pin, OUTPUT);
pinMode(led12Pin, OUTPUT);
pinMode(led13Pin, OUTPUT);
buttonState = digitalRead(switchPin); // read the initial state
}
void loop(){
val = digitalRead(switchPin); // read input value and store it in val
delay(10); // 10 milliseconds is a good amount of time
val2 = digitalRead(switchPin); // read the input again to check for bounces
if (val == val2) { // make sure we got 2 consistent readings!
if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if button pressed
Mode++;
if (Mode >= NUM_MODES) {
Mode = 0;
}
modeChanged = true;
}
}
buttonState = val; // save the new state in our variable
}
if (modeChanged) {
modeChanged = false;
// now do whatever the lightmode indicates
switch(Mode) {
case 0:
digitalWrite(led3Pin, LOW);
digitalWrite(led4Pin, LOW);
digitalWrite(led5Pin, LOW);
digitalWrite(led6Pin, LOW);
digitalWrite(led7Pin, LOW);
digitalWrite(led8Pin, LOW);
digitalWrite(led9Pin, LOW);
digitalWrite(led10Pin, LOW);
digitalWrite(led11Pin, LOW);
digitalWrite(led12Pin, LOW);
digitalWrite(led13Pin, LOW);
break;
case 1:
digitalWrite(led3Pin, HIGH);// turn far right led on
digitalWrite(led13Pin,HIGH);// Turn far left led on
delay(50); // wait 50 milliseconds
digitalWrite(led3Pin, LOW);// Turn first set of leds off
digitalWrite(led13Pin,LOW);
digitalWrite(led4Pin, HIGH);// and repeat for LED 4 to 13
digitalWrite(led12Pin, HIGH);
delay(50);
digitalWrite(led4Pin, LOW);
digitalWrite(led12Pin, LOW);
digitalWrite(led5Pin, HIGH);
digitalWrite(led11Pin, HIGH);
delay(50);
digitalWrite(led5Pin, LOW);
digitalWrite(led11Pin, LOW);
digitalWrite(led6Pin, HIGH);
digitalWrite(led10Pin, HIGH);
delay(50);
digitalWrite(led6Pin, LOW);
digitalWrite(led10Pin, LOW);
digitalWrite(led7Pin, HIGH);
digitalWrite(led9Pin, HIGH);
delay(50);
digitalWrite(led7Pin, LOW);
digitalWrite(led9Pin, LOW);
digitalWrite(led8Pin, HIGH); // central led turn on and delay
delay(50);
digitalWrite(led8Pin, LOW); // turn central led off after delay
delay(200); // then delay off time
digitalWrite(led8Pin, HIGH); // turn central led back on for phaser fire
delay(1000);// then hold on for set time as phaser fires
digitalWrite(led8Pin,LOW); // then turn off central led
break;
case 2:
digitalWrite(led3Pin, HIGH);
digitalWrite(led13Pin, HIGH);
delay(50);
digitalWrite(led3Pin, LOW);
digitalWrite(led13Pin, LOW);
digitalWrite(led4Pin, HIGH);
digitalWrite(led12Pin, HIGH);
delay(50);
digitalWrite(led4Pin, LOW);
digitalWrite(led12Pin, LOW);
digitalWrite(led11Pin, HIGH);
delay(50);
digitalWrite(led11Pin, LOW);
digitalWrite(led10Pin, HIGH);
delay(50);
digitalWrite(led10Pin, LOW);
digitalWrite(led9Pin, HIGH);
delay(50);
digitalWrite(led9Pin, LOW);
digitalWrite(led8Pin, HIGH);
delay(50);
digitalWrite(led8Pin, LOW);
digitalWrite(led7Pin, HIGH);
delay(50);
digitalWrite(led7Pin, LOW);
digitalWrite(led6Pin, HIGH);
delay(50);
digitalWrite(led6Pin, LOW);
digitalWrite(led5Pin, HIGH);
delay(50);
digitalWrite(led5Pin, LOW);
delay(200);
digitalWrite(led5Pin, HIGH);
delay(1000);
digitalWrite(led5Pin, LOW);
break;
case 3:
digitalWrite(led3Pin, HIGH);
digitalWrite(led13Pin, HIGH);
delay(50);
digitalWrite(led3Pin, LOW);
digitalWrite(led13Pin, LOW);
digitalWrite(led4Pin, HIGH);
digitalWrite(led12Pin, HIGH);
delay(50);
digitalWrite(led4Pin, LOW);
digitalWrite(led12Pin, LOW);
digitalWrite(led5Pin, HIGH);
delay(50);
digitalWrite(led5Pin, LOW);
digitalWrite(led6Pin, HIGH);
delay(50);
digitalWrite(led6Pin, LOW);
digitalWrite(led7Pin, HIGH);
delay(50);
digitalWrite(led7Pin, LOW);
digitalWrite(led8Pin, HIGH);
delay(50);
digitalWrite(led8Pin, LOW);
digitalWrite(led9Pin, HIGH);
delay(50);
digitalWrite(led9Pin, LOW);
digitalWrite(led10Pin, HIGH);
delay(50);
digitalWrite(led10Pin, LOW);
digitalWrite(led11Pin, HIGH);
delay(50);
digitalWrite(led11Pin, LOW);
delay(200);
digitalWrite(led11Pin, HIGH);
delay(1000);
digitalWrite(led11Pin, LOW);
}
}
}