Hey guys. Still very new to the C language. My program is working, and working exactly the way I expected. However, I can’t help but feel there has to be a way to clean up the code and make it shorter with better use some of C++'s internal functions.
The project: I am using a 6 position switch to select what “loop” it is going to do… each loop does different LED tricks
The code:
// Name LED pins
int led1 = 3;
int led2 = 5;
int led3 = 6;
int led4 = 7;
int led5 = 8;
int led6 = 9;
int led7 = 10;
int led8 = 11;
// Setup LED pins for loops
int ledArray[] = {3, 5, 6, 7, 8, 9, 10, 11};
int count = 0;
int brightness = 0;
void setup() {
// Define Inputs
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(12, INPUT);
pinMode(13, INPUT);
// Define Outputs
pinMode(3, OUTPUT); //PWM
pinMode(5, OUTPUT); //PWM
pinMode(6, OUTPUT); //PWM
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT); //PWM
pinMode(10, OUTPUT); //PWM
pinMode(11, OUTPUT); //PWM
}
void loop() {
//Read Switch Position
int switchPos1 = digitalRead(0);
int switchPos2 = digitalRead(1);
int switchPos3 = digitalRead(2);
int switchPos4 = digitalRead(4);
int switchPos5 = digitalRead(12);
int switchPos6 = digitalRead(13);
// Read the pots
int leftPot = analogRead(A0);
int rightPot = analogRead(A1);
// Read current from speaker
int speaker = analogRead(A2);
if (switchPos1 == LOW) { // Check if in position 1
/* Knight Rider Effect - with delay: (LED Chaser)
The left pot will control delay for each light.
The right pot will control delay after each cycle. */
leftPot = map(leftPot, 0, 1023, 5, 75);
rightPot = map(rightPot, 0, 1023, 10, 50);
for (count=0;count<7;count++) {
digitalWrite(ledArray[count], HIGH);
delay(leftPot);
digitalWrite(ledArray[count + 1], HIGH);
delay(leftPot);
digitalWrite(ledArray[count], LOW);
delay(rightPot);
}
for (count=7;count>0;count--) {
digitalWrite(ledArray[count], HIGH);
delay(leftPot);
digitalWrite(ledArray[count - 1], HIGH);
delay(leftPot);
digitalWrite(ledArray[count], LOW);
delay(rightPot);
}
} else if (switchPos2 == LOW) { // Check if in position 2
/* Alt Chaser
if the Pot on the right is turned CCW,
then the LEDs chase left, CW they chase
right, in the middle, chase from
inside out */
leftPot = map(leftPot, 0, 1023, 10, 75);
rightPot = map(rightPot, 0, 1023, 1, 100);
if (rightPot <= 30) {
for (count=0;count<7;count++) {
digitalWrite(ledArray[count], HIGH);
delay(leftPot);
digitalWrite(ledArray[count + 1], HIGH);
delay(leftPot);
digitalWrite(ledArray[count], LOW);
delay(leftPot);
}
} else if(rightPot >= 61) {
for (count=7;count>0;count--) {
digitalWrite(ledArray[count], HIGH);
delay(leftPot);
digitalWrite(ledArray[count - 1], HIGH);
delay(leftPot);
digitalWrite(ledArray[count], LOW);
delay(leftPot);
}
} else {
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
delay(leftPot * 4);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led6, HIGH);
delay(leftPot * 4);
digitalWrite(led3, LOW);
digitalWrite(led6, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led7, HIGH);
delay(leftPot * 4);
digitalWrite(led2, LOW);
digitalWrite(led7, LOW);
digitalWrite(led1, HIGH);
digitalWrite(led8, HIGH);
delay(leftPot * 4);
digitalWrite(led1, LOW);
digitalWrite(led8, LOW);
}
} else if (switchPos3 == LOW) { // Check if in position 3
// Just a goofy
leftPot = map(leftPot, 0, 1023, 5, 75);
rightPot = map(rightPot, 0, 1023, 1, 100);
if (rightPot <= 30) { // One Direction
digitalWrite(led1, HIGH);
delay(leftPot);
digitalWrite(led2, HIGH);
delay(leftPot);
digitalWrite(led3, HIGH);
delay(leftPot);
digitalWrite(led4, HIGH);
delay(leftPot);
digitalWrite(led5, HIGH);
delay(leftPot);
digitalWrite(led6, HIGH);
delay(leftPot);
digitalWrite(led7, HIGH);
delay(leftPot);
digitalWrite(led8, HIGH);
delay(leftPot);
digitalWrite(led1, LOW);
delay(leftPot);
digitalWrite(led2, LOW);
delay(leftPot);
digitalWrite(led3, LOW);
delay(leftPot);
digitalWrite(led4, LOW);
delay(leftPot);
digitalWrite(led5, LOW);
delay(leftPot);
digitalWrite(led6, LOW);
delay(leftPot);
digitalWrite(led7, LOW);
delay(leftPot);
digitalWrite(led8, LOW);
delay(leftPot);
} else if(rightPot >= 61) { // The other direction
digitalWrite(led8, HIGH);
delay(leftPot);
digitalWrite(led7, HIGH);
delay(leftPot);
digitalWrite(led6, HIGH);
delay(leftPot);
digitalWrite(led5, HIGH);
delay(leftPot);
digitalWrite(led4, HIGH);
delay(leftPot);
digitalWrite(led3, HIGH);
delay(leftPot);
digitalWrite(led2, HIGH);
delay(leftPot);
digitalWrite(led1, HIGH);
delay(leftPot);
digitalWrite(led8, LOW);
delay(leftPot);
digitalWrite(led7, LOW);
delay(leftPot);
digitalWrite(led6, LOW);
delay(leftPot);
digitalWrite(led5, LOW);
delay(leftPot);
digitalWrite(led4, LOW);
delay(leftPot);
digitalWrite(led3, LOW);
delay(leftPot);
digitalWrite(led2, LOW);
delay(leftPot);
digitalWrite(led1, LOW);
delay(leftPot);
} else { // inside to out
digitalWrite(led4, HIGH);
delay(leftPot);
digitalWrite(led5, HIGH);
delay(leftPot);
digitalWrite(led3, HIGH);
delay(leftPot);
digitalWrite(led6, HIGH);
delay(leftPot);
digitalWrite(led2, HIGH);
delay(leftPot);
digitalWrite(led7, HIGH);
delay(leftPot);
digitalWrite(led1, HIGH);
delay(leftPot);
digitalWrite(led8, HIGH);
delay(leftPot);
digitalWrite(led4, LOW);
delay(leftPot);
digitalWrite(led5, LOW);
delay(leftPot);
digitalWrite(led3, LOW);
delay(leftPot);
digitalWrite(led6, LOW);
delay(leftPot);
digitalWrite(led2, LOW);
delay(leftPot);
digitalWrite(led7, LOW);
delay(leftPot);
digitalWrite(led1, LOW);
delay(leftPot);
digitalWrite(led8, LOW);
delay(leftPot);
}