// LED SQUENCES SKETCH
// Number of LEDs
const int num = 8;
// Pin numbers will increase from this pin
const int startPin = 2;
// HOLD the button UNTIL the first LED flashes, then release
// Button connections: one side +5v | other side 10kOHm to GND and to buttonPin
const int buttonPin = 13;
// Potentiometer reading pin
const int potPin = A0;
// How long the delays are, adjust with potentiometer
int tick = 100;
// Current sequence counter
int sequence = 0;
void setup() {
int i = startPin;
while (i < num + startPin) {
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
i++;
}
pinMode(buttonPin, INPUT);
pinMode(potPin, INPUT);
}
void loop() {
bool isButtonPressed = checkButton();
if (isButtonPressed) {
flashSignal();
sequence++;
}
int potValue = analogRead(potPin);
tick = map(potValue, 0, 1023, 20, 500);
switch (sequence) {
case 0:
seq_ToOneSideBlink();
break;
case 1:
seq_ToOneSideHold();
break;
case 2:
seq_KnightRider();
break;
case 3:
seq_Flicker();
break;
case 4:
seq_Random();
break;
default:
sequence = 0;
break;
}
}
void flashSignal() {
digitalWrite(startPin, HIGH);
delay(tick);
digitalWrite(startPin, LOW);
delay(tick);
digitalWrite(startPin, HIGH);
delay(tick);
digitalWrite(startPin, LOW);
delay(2*tick);
}
bool checkButton() {
bool buttonState1 = digitalRead(buttonPin);
if (buttonState1 == false)
return false;
delay(20);
bool buttonState2 = digitalRead(buttonPin);
if (buttonState2 == false)
return false;
return true;
}
// ======================
// ===== SEQUENCES ======
// ======================
void seq_ToOneSideBlink() {
int i = startPin;
while (i < num + startPin) {
digitalWrite(i, HIGH);
digitalWrite(i - 1, LOW);
delay(tick);
i++;
}
digitalWrite(startPin + num - 1, LOW);
delay(tick);
}
void seq_ToOneSideHold() {
int i = startPin;
while (i < num + startPin) {
digitalWrite(i, HIGH);
delay(tick);
i++;
}
i = startPin;
while (i < num + startPin) {
digitalWrite(i, LOW);
delay(tick);
i++;
}
}
void seq_KnightRider() {
int i = startPin;
while (i < num + startPin) {
digitalWrite(i, HIGH);
digitalWrite(i - 1, LOW);
delay(tick);
i++;
}
while (i > startPin - 1) {
digitalWrite(i, HIGH);
digitalWrite(i + 1, LOW);
delay(tick);
i--;
}
delay(tick);
}
void seq_Flicker() {
for (int i = 0; i < num; i++) {
int pin = startPin + i;
if (i % 2 == 1) {
digitalWrite(pin, HIGH);
} else {
digitalWrite(pin, LOW);
}
}
delay(2 * tick);
for (int i = 0; i < num; i++) {
int pin = startPin + i;
if (i % 2 == 0) {
digitalWrite(pin, HIGH);
} else {
digitalWrite(pin, LOW);
}
}
delay(2 * tick);
// Turn all off to be safe
int i = startPin;
while (i < num + startPin) {
digitalWrite(i, LOW);
i++;
}
}
void seq_Random() {
randomSeed(analogRead(A1) + analogRead(potPin));
int pin1 = startPin;
int pin2 = pin1;
int pin3 = pin1;
pin1 = random(num) + startPin;
digitalWrite(pin1, HIGH);
if (random(3) > 0) {
pin2 = random(num) + startPin;
digitalWrite(pin2, HIGH);
if (random(2) > 0) {
pin3 = random(num) + startPin;
digitalWrite(pin3, HIGH);
}
}
delay(tick);
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
}