Skip to content

Instantly share code, notes, and snippets.

@timeclock98
Created April 22, 2021 00:29
Show Gist options
  • Save timeclock98/de2df871a5f5484a4b27c8f44bdb3f77 to your computer and use it in GitHub Desktop.
Save timeclock98/de2df871a5f5484a4b27c8f44bdb3f77 to your computer and use it in GitHub Desktop.
// LED Variables
const int ledL1 = 10;
const int ledL2 = 11;
const int ledL3 = 12;
const int ledL4 = 13;
const int ledR1 = 9;
const int ledR2 = 8;
const int ledR3 = 7;
const int ledR4 = 6;
// Mic Variables
int analogPin = A0;
int micVal = 0;
// Timers
int mainTimer = 0;
int extraTimer = 0;
int timer1 = 0;
int timer2 = 0;
int timer3 = 0;
bool t1 = 0;
bool t2 = 0;
bool t3 = 0;
int btimer1 = 0;
int btimer2 = 0;
int btimer3 = 0;
bool bt1 = 0;
bool bt2 = 0;
bool bt3 = 0;
int switchvar = 5; // Change for different modes (LED patterns)
void setup(){
Serial.begin(9600);
pinMode(ledL1, OUTPUT);
pinMode(ledL2, OUTPUT);
pinMode(ledL3, OUTPUT);
pinMode(ledL4, OUTPUT);
pinMode(ledR1, OUTPUT);
pinMode(ledR2, OUTPUT);
pinMode(ledR3, OUTPUT);
pinMode(ledR4, OUTPUT);
}
void loop(){
micVal = analogRead(analogPin); // Read mic input
//Serial.println(micVal); // (Debug)
if(switchvar == 1){ // First LED pattern
if(micVal >= 344 && mainTimer > 100){
if(t1 == 0){t1 = 1;}
else if(t2 == 0){t2 = 1;}
else if(t3 == 0){t3 = 1;}
if(bt1 == 0){bt1 = 1;}
else if(bt2 == 0){bt2 = 1;}
else if(bt3 == 0){bt3 = 1;}
mainTimer = 0;
}
if(t1 == 1){ // Call an instance to a function to run leds
topFunc(&timer1, &t1);
}
if(bt1 == 1){
bottomFunc(&btimer1, &bt1);
}
if(t2 == 1){
topFunc(&timer2, &t2);
}
if(bt2 == 1){
bottomFunc(&btimer2, &bt2);
}
if(t3 == 1){
topFunc(&timer3, &t3);
}
if(bt3 == 1){
bottomFunc(&btimer3, &bt3);
}
mainTimer = mainTimer + 10;
delay(10); // debounce
}
else if(switchvar == 2){ // Second LED pattern
if(micVal >= 344 && mainTimer > 100){
if(t1 == 0){t1 = 1;}
else if(t2 == 0){t2 = 1;}
else if(t3 == 0){t3 = 1;}
if(bt1 == 0){bt1 = 1;}
else if(bt2 == 0){bt2 = 1;}
else if(bt3 == 0){bt3 = 1;}
mainTimer = 0;
}
if(t1 == 1){
BOTHAwaySlow(&timer1, &t1, 1);
}
if(bt1 == 1){
BOTHAwaySlow(&btimer1, &bt1, 0);
}
if(t2 == 1){
BOTHAwaySlow(&timer2, &t2, 1);
}
if(bt2 == 1){
BOTHAwaySlow(&btimer2, &bt2, 0);
}
if(t3 == 1){
BOTHAwaySlow(&timer3, &t3, 1);
}
if(bt3 == 1){
BOTHAwaySlow(&btimer3, &bt3, 0);
}
mainTimer = mainTimer + 5;
delay(10); // debounce
}
else if(switchvar == 3){ // Third LED pattern
if(micVal >= 344 && mainTimer > 100){
if(t1 == 0){t1 = 1;}
else if(t2 == 0){t2 = 1;}
else if(t3 == 0){t3 = 1;}
if(bt1 == 0){bt1 = 1;}
else if(bt2 == 0){bt2 = 1;}
else if(bt3 == 0){bt3 = 1;}
mainTimer = 0;
}
if(t1 == 1){
BOTHUpSlope(&timer1, &t1);
}
if(t2 == 1){
BOTHUpSlope(&timer2, &t2);
}
if(t3 == 1){
BOTHUpSlope(&timer3, &t3);
}
mainTimer = mainTimer + 2;
delay(10); // debounce
}
else if(switchvar == 4){ // Fourth LED pattern
bt1 = 0;
if(t1 != 0){bt1 = 1; extraTimer = 0; btimer1 = 0;}
if(micVal >= 344 && mainTimer > 100){
if(t1 == 0){t1 = 1;}
else if(t2 == 0){t2 = 1;}
else if(t3 == 0){t3 = 1;}
mainTimer = 0;
}
if(bt1 == 0){
extraTimer++;
if(extraTimer >= 100){BOTHUpDown(&btimer1, &bt1);}
}
else{
if(t1 == 1){
BOTHDown(&timer1, &t1);
}
if(t2 == 1){
BOTHDown(&timer2, &t2);
}
if(t3 == 1){
BOTHDown(&timer3, &t3);
}
}
mainTimer = mainTimer + 2;
delay(10); // debounce
}
else if(switchvar == 5){ // Fith LED pattern
if(micVal >= 344 && mainTimer > 90){
if(t1 == 0){t1 = 1;}
else if(t2 == 0){t2 = 1;}
else if(t3 == 0){t3 = 1;}
if(bt1 == 0){bt1 = 1;}
else if(bt2 == 0){bt2 = 1;}
else if(bt3 == 0){bt3 = 1;}
mainTimer = 0;
}
if(t1 == 1){
BOTHUpFast(&timer1, &t1);
}
if(t2 == 1){
BOTHUpFast(&timer2, &t2);
}
if(t3 == 1){
BOTHUpFast(&timer3, &t3);
}
mainTimer = mainTimer + 2;
delay(10); // debounce
}
//Serial.println(timer1); // (Debug)
}
/////////////// Functions ///////////////
// Third LED Pattern Functions
void BOTHUpFast(int *timer,bool *t){
if(*timer == 10){
digitalWrite(ledR4, HIGH);
}
else if(*timer == 500){ // +200 but -20 every row
digitalWrite(ledR3, HIGH);
}
else if(*timer == 100){
timeDelay(ledR2, ledR4);
}
else if(*timer == 150){
timeDelay(ledR1, ledR3);
}
else if(*timer == 200){
timeDelay(ledL1, ledR2);
}
// Top LEDs
else if(*timer == 250){
timeDelay(ledL2, ledR1);
}
else if(*timer == 300){
timeDelay(ledL3, ledL1);
}
else if(*timer == 350){
timeDelay(ledL4, ledL2);
}
else if(*timer == 400){
digitalWrite(ledL3, LOW);
}
else if(*timer == 450){
digitalWrite(ledL4, LOW);
*t = 0;
*timer = 0;
return;
}
*timer = *timer + 10;
}
// Fourth LED Pattern Functions
void BOTHUpDown(int *timer,bool *t){
if(*timer == 5){ // Up
digitalWrite(ledR4, HIGH);
}
else if(*timer == 100){
digitalWrite(ledR3, HIGH);
}
else if(*timer == 190){
timeDelay(ledR2, ledR4);
}
else if(*timer == 270){ // 80
timeDelay(ledR1, ledR3);
}
else if(*timer == 320){ // 50
timeDelay(ledL1, ledR2);
}
// Top LEDs
else if(*timer == 350){ // 30
timeDelay(ledL2, ledR1);
}
else if(*timer == 400){ // 50
timeDelay(ledL3, ledL1);
}
else if(*timer == 480){ // 80
timeDelay(ledL4, ledL2);
}
else if(*timer == 570){
digitalWrite(ledL3, LOW);
}
else if(*timer == 800){ // Down
digitalWrite(ledL3, HIGH);
}
else if(*timer == 890){
timeDelay(ledL2, ledL4);
}
else if(*timer == 970){ // 80
timeDelay(ledL1, ledL3);
}
else if(*timer == 1020){ // 50
timeDelay(ledR1, ledL2);
}
// Top LEDs
else if(*timer == 1050){ // 30
timeDelay(ledR2, ledL1);
}
else if(*timer == 1100){ // 50
timeDelay(ledR3, ledR1);
}
else if(*timer == 1180){ // 80
timeDelay(ledR4, ledR2);
}
else if(*timer == 1270){
digitalWrite(ledR3, LOW);
}
else if(*timer == 1370){
digitalWrite(ledR4, LOW);
*t = 0;
*timer = 0;
return;
}
*timer = *timer + 5;
}
void BOTHDown(int *timer,bool *t){
if(*timer == 10){
digitalWrite(ledL4, HIGH);
}
else if(*timer == 100){
digitalWrite(ledL3, HIGH);
}
else if(*timer == 200){
timeDelay(ledL2, ledL4);
}
else if(*timer == 300){
timeDelay(ledL1, ledL3);
}
else if(*timer == 400){
timeDelay(ledR1, ledL2);
}
// Top LEDs
else if(*timer == 500){
timeDelay(ledR2, ledL1);
}
else if(*timer == 600){
timeDelay(ledR3, ledR1);
}
else if(*timer == 700){
timeDelay(ledR4, ledR2);
}
else if(*timer == 800){
digitalWrite(ledR3, LOW);
}
else if(*timer == 900){
digitalWrite(ledR4, LOW);
*t = 0;
*timer = 0;
return;
}
*timer = *timer + 20;
}
// Third LED Pattern Functions
void BOTHUpSlope(int *timer,bool *t){
if(*timer == 10){
digitalWrite(ledR4, HIGH);
}
else if(*timer == 200){ // +200 but -20 every row
digitalWrite(ledR3, HIGH);
}
else if(*timer == 380){
timeDelay(ledR2, ledR4);
}
else if(*timer == 540){
timeDelay(ledR1, ledR3);
}
else if(*timer == 680){
timeDelay(ledL1, ledR2);
}
// Top LEDs
else if(*timer == 800){
timeDelay(ledL2, ledR1);
}
else if(*timer == 900){
timeDelay(ledL3, ledL1);
}
else if(*timer == 980){
timeDelay(ledL4, ledL2);
}
else if(*timer == 1040){
digitalWrite(ledL3, LOW);
}
else if(*timer == 1080){
digitalWrite(ledL4, LOW);
*t = 0;
*timer = 0;
return;
}
*timer = *timer + 10;
}
// Second LED Pattern Functions
void BOTHAwaySlow(int *timer,bool *t, bool switcher){
if(switcher == 1){
if(*timer == 10){
digitalWrite(ledL1, HIGH);
}
else if(*timer == 100){
digitalWrite(ledL2, HIGH);
}
else if(*timer == 150){
timeDelay(ledL3, ledL1);
}
else if(*timer == 200){
timeDelay(ledL4, ledL2);
}
else if(*timer == 300){
digitalWrite(ledL3, LOW);
}
else if(*timer == 400){
digitalWrite(ledL4, LOW);
*t = 0;
*timer = 0;
return;
}
}
else if(switcher == 0){
if(*timer == 10){
digitalWrite(ledR1, HIGH);
}
else if(*timer == 100){
digitalWrite(ledR2, HIGH);
}
else if(*timer == 150){
timeDelay(ledR3, ledR1);
}
else if(*timer == 200){
timeDelay(ledR4, ledR2);
}
else if(*timer == 300){
digitalWrite(ledR3, LOW);
}
else if(*timer == 400){
digitalWrite(ledR4, LOW);
*t = 0;
*timer = 0;
return;
}
}
*timer = *timer + 10;
}
// First LED Pattern Functions
void topFunc(int *timer,bool *t){
if(*timer == 10){
timeDelay(ledL1, ledL4);
}
else if(*timer == 100){
timeDelay(ledL2, ledL1);
}
else if(*timer == 150){
timeDelay(ledL3, ledL2);
}
else if(*timer == 200){
timeDelay(ledL4, ledL3);
}
else if(*timer == 300){
digitalWrite(ledL4, LOW);
*t = 0;
*timer = 0;
return;
}
*timer = *timer + 10;
}
void bottomFunc(int *timer,bool *t){
if(*timer == 10){
timeDelay(ledR1, ledR4);
}
else if(*timer == 100){
timeDelay(ledR2, ledR1);
}
else if(*timer == 150){
timeDelay(ledR3, ledR2);
}
else if(*timer == 200){
timeDelay(ledR4, ledR3);
}
else if(*timer == 300){
digitalWrite(ledR4, LOW);
*t = 0;
*timer = 0;
return;
}
*timer = *timer + 10;
}
void timeDelay(const int led1, const int led2){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment