Hi, first post here.
I'm looking for help in streamlining the attached code.
It's very basic (as I'm a novice programmer) and is based around an Arduino tutorial.
The end result is a 'chasing' effect involving three LEDS with varying brightnesses, across a total of six LEDS.
I wanted to write it to put my (limited) knowledge of 'C' and the Arduino to use and build further upon what I learned in the tutorials.
(The circuit I have made is very simple, so I felt it unnecessary to include a schematic. It uses pins ~3, ~5, ~6, ~9, ~10, ~11 and x1 220ohm resistor & x1 LED for each. (My issue is really with the programming and not the circuit!))
My first draft progressed from one LED up to six and the code became lengthy very quickly. It works, but I'm sure there must be a way to streamline it, so I began working on a 2nd draft (see below).
In the second draft my intention is to simply set "ledsUsed = 'x'" and achieve the same result of fading LEDS over 'x' LEDS... but with far less code.
I have started with a nested 'for' loop which iterates through the correct number of times based on ledsUsed. But afer that, I am stumped. I guessed I would need to call a function to determine brightnesses..?
I am really not looking for somebody to spoon-feed me a solution per se, but some guidance on what I should look into/learn to use in 'C' would be very much appreciated, or perhaps what/how I should be thinking in order to solve my problem.
(I understand that the Arduino accepts C# too, but I felt that I needed to get a good grasp on 'C' before moving upto 'C#'.)
Many Thanks,
Tom
First draft:
int totalLeds = 6; //Total LEDS connected to Uno
int delayTime = 100; //Delay time(ms)
int bri[] = {100, 33, 5, 0}; //Brightness array
int led[] = {3, 5, 6, 9, 10, 11}; //Uno pin number array
void setup() {
// put your setup code here, to run once:
for (int i = 0; i < totalLeds; i++) {
pinMode(led[i], OUTPUT);
}
}
void loop() {
useSix();
}
void useOne() {
analogWrite(led[0], bri[0]);
delay(delayTime);
analogWrite(led[0], bri[1]);
delay(delayTime);
analogWrite(led[0], bri[2]);
delay(delayTime);
analogWrite(led[0], bri[3]);
delay(delayTime);
}
void useTwo() {
analogWrite(led[0], bri[0]);
delay(delayTime);
analogWrite(led[1], bri[0]);
analogWrite(led[0], bri[1]);
delay(delayTime);
analogWrite(led[1], bri[1]);
analogWrite(led[0], bri[2]);
delay(delayTime);
analogWrite(led[1], bri[2]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
}
void useThree() {
analogWrite(led[0], bri[0]);
delay(delayTime);
analogWrite(led[1], bri[0]);
analogWrite(led[0], bri[1]);
delay(delayTime);
analogWrite(led[2], bri[0]);
analogWrite(led[1], bri[1]);
analogWrite(led[0], bri[2]);
delay(delayTime);
analogWrite(led[2], bri[1]);
analogWrite(led[1], bri[2]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[2], bri[2]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
}
void useFour() {
analogWrite(led[0], bri[0]);
delay(delayTime);
analogWrite(led[1], bri[0]);
analogWrite(led[0], bri[1]);
delay(delayTime);
analogWrite(led[2], bri[0]);
analogWrite(led[1], bri[1]);
analogWrite(led[0], bri[2]);
delay(delayTime);
analogWrite(led[3], bri[0]);
analogWrite(led[2], bri[1]);
analogWrite(led[1], bri[2]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[3], bri[1]);
analogWrite(led[2], bri[2]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[3], bri[2]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[3], bri[3]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
}
void useFive() {
analogWrite(led[0], bri[0]);
delay(delayTime);
analogWrite(led[1], bri[0]);
analogWrite(led[0], bri[1]);
delay(delayTime);
analogWrite(led[2], bri[0]);
analogWrite(led[1], bri[1]);
analogWrite(led[0], bri[2]);
delay(delayTime);
analogWrite(led[3], bri[0]);
analogWrite(led[2], bri[1]);
analogWrite(led[1], bri[2]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[4], bri[0]);
analogWrite(led[3], bri[1]);
analogWrite(led[2], bri[2]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[4], bri[1]);
analogWrite(led[3], bri[2]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[4], bri[2]);
analogWrite(led[3], bri[3]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[4], bri[3]);
analogWrite(led[3], bri[3]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
}
void useSix() {
analogWrite(led[0], bri[0]);
delay(delayTime);
analogWrite(led[1], bri[0]);
analogWrite(led[0], bri[1]);
delay(delayTime);
analogWrite(led[2], bri[0]);
analogWrite(led[1], bri[1]);
analogWrite(led[0], bri[2]);
delay(delayTime);
analogWrite(led[3], bri[0]);
analogWrite(led[2], bri[1]);
analogWrite(led[1], bri[2]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[4], bri[0]);
analogWrite(led[3], bri[1]);
analogWrite(led[2], bri[2]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[5], bri[0]);
analogWrite(led[4], bri[1]);
analogWrite(led[3], bri[2]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[5], bri[1]);
analogWrite(led[4], bri[2]);
analogWrite(led[3], bri[3]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[5], bri[2]);
analogWrite(led[4], bri[3]);
analogWrite(led[3], bri[3]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
analogWrite(led[5], bri[3]);
analogWrite(led[4], bri[3]);
analogWrite(led[3], bri[3]);
analogWrite(led[2], bri[3]);
analogWrite(led[1], bri[3]);
analogWrite(led[0], bri[3]);
delay(delayTime);
}
Second draft:
const int totalLeds = 6; //Total number of LEDS used on Uno.
int ledsUsed = 6; //Amount of LEDS to use in chase effect.
int led[] = {3, 5, 6, 9, 10, 11}; //Array containing Uno LED pin numbers.
int delayTime = 500;
void setup() {
// put your setup code here, to run once:
for (int i = 0; i < totalLeds; i++) {
pinMode(led[i], OUTPUT); //Do this while i < totalLeds
}
}
void loop() {
for (int a = 0; a < (ledsUsed + 3); a++) {
for (int b = 0; b < ledsUsed; b++) { //Do this (ledsUsed + 3) times.
//analogWrite(led[b], findBrightness(b)); //Do this while (b < ledsUsed).
//findBrightness(b) calls function findBrightness with 'b' as parameter.
delay(delayTime);
}
}
}
void findBrightness(int b) {
//Looking for help with this function?
}