i have this sketch that uses lots of different led effects when a button is pushed. id like the leds to turn off after say 10 mins regardless of what state it was in then if the button is pushed again go to the next effect. ive tried using the millis and a universal timer library but everywhere i put it has no effect, the leds just continue what they were doing. any help or guidance would be great.
#include <DYPlayerArduino.h>
DY::Player player; // Initialise the player, it defaults to using Serial.
int pinsCount=5; // declaring the integer variable pinsCount
int pins[] = {5,6,9,10,11}; // declaring the array pins[]
const int led1 = 11;
const int led2 = 10;
const int led3 = 9;
const int led4 = 6;
const int led5 = 5;
int pin_switch=2;
int brightness=0;
int state=0;
int ledState = LOW;
const int blinkDuration = 5000; // number of millisecs that Led's are on - all leds use this
unsigned long currentMillis = 0; // stores the value of millis() in each iteration of loop()
unsigned long previousOnBoardLedMillis = 0;
void setup() {
for (int i=0; i<pinsCount; i=i+1){ // counting the variable i from 0 to 9
pinMode(pins[i], OUTPUT); // initialising the pin at index i of the array of pins as OUTPUT
}
player.begin();
player.setVolume(30); // 100% Volume
Serial.begin(9600);
pinMode(led1, OUTPUT); // Make Digital Pin 9 an OUTPUT
pinMode(led2, OUTPUT); // Make Digital Pin 9 an OUTPUT
pinMode(led3, OUTPUT); // Make Digital Pin 9 an OUTPUT
pinMode(led4, OUTPUT); // Make Digital Pin 9 an OUTPUT
pinMode(led5, OUTPUT); // Make Digital Pin 9 an OUTPUT
attachInterrupt(0,interrupt_service_routine,RISING);
}
// change
int preState = 0;
void loop() {
// change
if(preState != state){
if(state == 1){
player.playSpecified(7);
timer();
}else if(state == 2){
player.playSpecified(1);
}else if(state == 3){
player.playSpecified(2);
}else if(state == 4){
player.playSpecified(5);
}else if(state == 5){
player.playSpecified(3);
}else if(state == 6){
player.playSpecified(6);
}else if(state == 7){
player.playSpecified(8);
}else if(state == 8){
player.playSpecified(4);
}else if(state == 9){
;
}
preState = state;
}
Serial.println(state);
if(state==0)
effect1();
else if(state==1)
effect2();
else if (state==2)
twinkle();
else if(state==3)
effect3();
else if(state==4)
blink();
else if(state==5)
chase();
else if(state==6)
{combo();
twinkle(); }
else if(state==7)
effect6();
else if(state==8)
all();
else if(state==9)
{ digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);}
else if(state==10||state>10)
state=0;
}
void interrupt_service_routine(){
state=state+1;
}
//----------------------------------FUNCTIONS-------------------------------------------------------------
void blink(){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
delay(2000);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
delay(2000);
}
void twinkle() {
// Set the brightness of the LED to a random value.
analogWrite(led1, random(200)+150);
analogWrite(led2, random(200)+150);
analogWrite(led3, random(200)+150);
analogWrite(led4, random(200)+150);
analogWrite(led5, random(200)+150);
// Randomly delay for a period of time between 0 and 0.3 seconds.
delay(random(300));
}
void fade()
{
for (brightness = 0; brightness <= 255; brightness += 10) {
analogWrite(11, brightness);
analogWrite(10, brightness);
analogWrite(9, brightness);
analogWrite(6, brightness);
analogWrite(5, brightness);
delay(30); // Wait for 30 millisecond(s)
}
for (brightness = 255; brightness >= 0; brightness -= 7) {
analogWrite(11, brightness);
analogWrite(10, brightness);
analogWrite(9, brightness);
analogWrite(6, brightness);
analogWrite(5, brightness);
delay(30); // Wait for 30 millisecond(s)
}
}
void combo(){
for(int ii=0;ii<2;ii=ii+1)
blink();
for(int ii=0;ii<2;ii=ii+1)
fade();
for(int ii=0;ii<2;ii=ii+1)
twinkle();
chase();
}
void effect1()
{ digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
void effect2()
{ timer();
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
fade();
}
void effect3()
{ for (brightness = 0; brightness <= 255; brightness += 15) {
analogWrite(11, brightness);
analogWrite(10, brightness);
analogWrite(9, brightness);
analogWrite(6, brightness);
analogWrite(5, brightness);
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
}
void effect4()
{
digitalWrite(led3,HIGH);
delay(1000);
digitalWrite(led3,LOW);
delay(1000);
}
void chase()
{
for (int i=0; i<pinsCount; i=i+1){ // chasing right
digitalWrite(pins[i], HIGH); // switching the LED at index i on
delay(100); // stopping the program for 100 milliseconds
digitalWrite(pins[i], LOW); // switching the LED at index i off
}
for (int i=pinsCount-1; i>0; i=i-1){ // chasing left (except the outer leds)
digitalWrite(pins[i], HIGH); // switching the LED at index i on
delay(100); // stopping the program for 100 milliseconds
digitalWrite(pins[i], LOW); // switching the LED at index i off
}
}
void effect6()
{ digitalWrite(led1, HIGH);
delay (500);
digitalWrite(led2,HIGH);
delay (500);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led4,HIGH);
delay (500);
digitalWrite(led5,HIGH);
delay (500);
digitalWrite (led5,LOW);
delay (500);
digitalWrite (led4,LOW);
delay (500);
digitalWrite (led3,LOW);
delay (500);
digitalWrite (led2,LOW);
delay (500);
digitalWrite (led1,LOW);
}
void all()
{ effect6();
combo();
chase();
effect2();
effect3();
effect4();
twinkle();
blink();}
void timer(){
currentMillis = millis(); // capture the latest value of millis()
// if the Led is on, we must wait for the duration to expire before turning it off
if (currentMillis - previousOnBoardLedMillis >= blinkDuration)
// time is up, so change the state to LOW
ledState = LOW;
// and save the time when we made the change
previousOnBoardLedMillis += blinkDuration;
// Set the LED state
digitalWrite(led1, ledState);
digitalWrite(led2, ledState);
digitalWrite(led3, ledState);
digitalWrite(led4, ledState);
digitalWrite(led5, ledState);
}