// https://www.mrelectrouino.com/2019/05/12-led-chaser-using-arduino-uno-7-effect.html
// https://github.com/pcr512/LED-CHASER-WITH-7-EFFECTS-ARDUINO
#define t 30
#define t1 20
#define t2 100
#define t3 50
#define numLeds 18 // Number of LEDs
#define halfLeds numLeds / 2
int leds[numLeds] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
void setup() {
// set up pins 2 to 13 as outputs
for (int i = 0; i < numLeds; i++) {
pinMode(leds[i], OUTPUT);
}
}
/////////////////////////////////////////////////////////////////////////////////Effect 1
void loop() {
//effect_1();
//effect_1();
effect_2();
effect_2();
// effect_3();
// effect_3();
// effect_4();
// effect_4();
// effect_5();
// effect_5();
// effect_6();
// effect_6();
//effect_7();
// effect_7();
}
//left to right and right to left
void effect_1() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(leds[i], HIGH);
delay(t1);
digitalWrite(leds[i+1], HIGH);
delay(t1);
digitalWrite(leds[i+2], HIGH);
delay(t1);
digitalWrite(leds[i], LOW);
delay(t1);
digitalWrite(leds[i+1], LOW);
delay(t1);
digitalWrite(leds[i+2], LOW);
delay(t1);
}
for (int i = numLeds - 1; i >= 0; i--) {
digitalWrite(leds[i], HIGH);
delay(t1);
digitalWrite(leds[i-1], HIGH);
delay(t1);
digitalWrite(leds[i-2], HIGH);
delay(t1);
digitalWrite(leds[i], LOW);
delay(t1);
digitalWrite(leds[i-1], LOW);
delay(t1);
digitalWrite(leds[i-2], LOW);
delay(t1);
}
}
/////////////////////////////////////////////////////////////////////////////////Effect 2
void effect_2()
{
int count = 13; // keeps track of second LED movement
// move first LED from left to right and second from right to left
for (int i = 2; i < 13; i++) {
clear();
digitalWrite(i, HIGH); // chaser 1
digitalWrite(count, HIGH); // chaser 2
count--;
// stop LEDs from appearing to stand still in the middle
if (count != 7) {
delay(t2);
}
}
// move first LED from right to left and second LED from left to right
for (int i = 13; i > 2; i--) {
clear();
digitalWrite(i, HIGH); // chaser 1
digitalWrite(count, HIGH); // chaser 2
count++;
// stop LEDs from appearing to stand still in the middle
if (count != 8) {
delay(t2);
}
}
}
////////////////////////////////////////////////////////////////////////////////Effect 3
void effect_3()
{
for (int i = 2; i < 14; i++) {
digitalWrite(i, HIGH);
delay(t3);
}
for (int i = 2; i < 14; i++) {
digitalWrite(i, LOW);
delay(t3);
}
for (int i = 14; i >= 2; i--) {
digitalWrite(i, HIGH);
delay(t3);
}
for (int i = 14; i >= 2; i--) {
digitalWrite(i, LOW);
delay(t3);
}
}
///////////////////////////////////////////////////////////////////////////Effect 4
void effect_4()
{
for (int j = 2; j <= 13; j++) {
digitalWrite(j, HIGH);
delay(t2);
j = j + 1;
}
for (int j = 2; j <= 13; j++) {
digitalWrite(j, LOW);
delay(t2);
}
for (int k = 15; k > 2; k--) {
digitalWrite(k, HIGH);
delay(t2);
k = k - 1;
}
for (int k = 15; k > 2; k--) {
digitalWrite(k, LOW);
delay(t2);
}
}
//////////////////////////////////////////////////////////////////////////////Effect 5
void effect_5()
{
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin, HIGH);
delay(t1);
digitalWrite(pin + 1, LOW);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin + 1, HIGH);
delay(t1);
digitalWrite(pin + 2, LOW);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin + 2, HIGH);
delay(t1);
digitalWrite(pin + 3, LOW);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin + 3, HIGH);
delay(t1);
digitalWrite(pin + 4, LOW);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin + 4, HIGH);
delay(t1);
digitalWrite(pin + 5, LOW);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin + 5, HIGH);
delay(t1);
digitalWrite(pin + 6, LOW);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin + 6, HIGH);
delay(t1);
digitalWrite(pin + 7, LOW);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin + 7, HIGH);
delay(t1);
digitalWrite(pin + 8, LOW);
delay(t1);
}
for (int pin = 9; pin >= 2; pin--)
{
digitalWrite(pin + 8, HIGH);
delay(t1);
digitalWrite(pin + 9, LOW);
delay(t1);
}
for (int pin = 9; pin >= 2; pin--)
{
digitalWrite(pin + 9, HIGH);
delay(t1);
digitalWrite(pin + 10, LOW);
delay(t1);
}
for (int pin = 9; pin >= 2; pin--)
{
digitalWrite(pin + 10, HIGH);
delay(t1);
digitalWrite(pin + 11, LOW);
delay(t1);
}
for (int pin = 14; pin >= 2; pin--)
{
digitalWrite(pin + 11, HIGH);
delay(t1);
}
for (int pin = 13; pin >= 2; pin--)
{
digitalWrite(pin, LOW);
delay(t1);
}
}
/////////////////////////////////////////////////////////////////////////////Effect 6
void effect_6()
{
for (int j = 2; j < 14; j++) {
digitalWrite(j, LOW);
delay(t);
digitalWrite(j, HIGH);
delay(t);
digitalWrite(j - 2, LOW);
delay(t);
digitalWrite(j, HIGH);
}
for (int k = 15; k > 2; k--) {
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k + 2, LOW);
delay(t);
digitalWrite(k, HIGH);
}
for (int k = 2; k < 14; k++) {
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k - 2, LOW);
delay(t);
digitalWrite(k, HIGH);
}
for (int k = 15; k > 2; k--) {
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k + 4, LOW);
delay(t);
digitalWrite(k, HIGH);
}
for (int k = 2; k < 14; k++) {
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k - 4, LOW);
delay(t);
digitalWrite(k, HIGH);
}
}
///////////////////////////////////////////////////////////////////////////////////Effect 7
void effect_7()
{
for (int j = 2; j < 14; j++) {
digitalWrite(j, HIGH);
delay(t);
digitalWrite(j + 2, LOW);
delay(t);
}
for (int k = 15; k > 2; k--) {
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k + 2, LOW);
delay(t);
}
}
// function to switch all LEDs off
void clear(void)
{
for (int i = 2; i <= 13; i++) {
digitalWrite(i, LOW);
}
}