Hi Guys,
I am using a Mega 2560 for my project.
I want to use a ON/OFF button to control LEDs running in sequence (i.e. flashing in order)
A 4-pin rotary switch is used for dimming the brightness of LEDs.
Here is my code:
byte button = 7;
byte led[4] =
{
2,3,4,5}; // 4 leds.
byte rSwitch[4] =
{
8,9,10,11}; // 4-position rotary switch
unsigned long int brightness;
void setup()
{
pinMode(button, INPUT);
for(int i = 0; i<4; i++)
{
pinMode(led[i], OUTPUT);
}
for(int a = 0; a<4; a++)
{
pinMode(rSwitch[a], INPUT);
}
}
void loop()
{
if(digitalRead(button) == HIGH) // if button is pressed
{
if(digitalRead(rSwitch[1]) == HIGH) //select 1st brightness
{
brightness = 10; // set brightness
blink_led_task(); // blink LED function
}
else if(digitalRead(rSwitch[2]) == HIGH) //select 2nd brightness
{
brightness = 50; // set brightness
blink_led_task(); // blink button
}
else if(digitalRead(rSwitch[3]) == HIGH) //select 3rd brightness
{
brightness = 100; // set brightness
blink_led_task(); // blink LED function
}
else if (digitalRead(rSwitch[4]) == HIGH) //select 2nd brightness
{
brightness = 200; // set brightness
blink_led_task(); // blink LED function
}
}
else
{
for(int i = 0; i<4; i++)
digitalWrite(led[i], LOW); // turn off all led.
}
}
unsigned long blink_led_time;
void blink_led_task()
{
if(millis() - blink_led_time > 500) // 500 ms.
blink_led_time = millis();
else
return;
static byte number = 0;
for(int i = 0; i<4; i++)
digitalWrite(led[i], LOW); // turn off all leds first.
analogWrite(led[number], brightness);
number++;
if(number == 4)
number = 0; // reset back to zero.
// digitalWrite(led, digitalRead(led) ^ 1); // toggle led.
}
It compiles but does not work as I expected, nothing happens if I turn the rotary switch or press the button.
Actually it was developed from the old version:
byte button = 8;
byte led[4] = {
2,3,4,5}; // 4 leds.
void setup()
{
pinMode(button, INPUT);
for(int i = 0; i<4; i++)
{
pinMode(led[i], OUTPUT);
digitalWrite(led[i], LOW);
}
}
void loop()
{
if(digitalRead(button) == HIGH) // if button is pressed
{
blink_led_task(); // blink button
}
else
{
for(int i = 0; i<4; i++)
digitalWrite(led[i], LOW); // turn off all led.
}
}
unsigned long blink_led_time;
void blink_led_task()
{
if(millis() - blink_led_time > 500) // 500 ms.
blink_led_time = millis();
else
return;
static byte number = 0;
for(int i = 0; i<4; i++)
digitalWrite(led[i], LOW); // turn off all leds first.
digitalWrite(led[number], HIGH);
number++;
if(number == 4)
number = 0; // reset back to zero.
// digitalWrite(led, digitalRead(led) ^ 1); // toggle led.
}
The original one works perfectly.
I couldn't see why it doesn't work after adding the rotary switch.
Could anyone give me advice and hints ? Thank you very much