// Timer/Fader 02 // // A delay-free timer for a single LED that fades in and out // and cascades 6 faders // Timer variables long timer1 = 0; long timer2 = 0; long timer3 = 0; long timer4 = 0; long timer5 = 0; long timer6 = 0; int offset = 10; // Change this for faster or slower fades // Pin variables int pwm1 = 11; int pwm2 = 10; int pwm3 = 9; int pwm4 = 6; int pwm5 = 5; int pwm6 = 3; // Direction variable int upDown1 = 1; int upDown2 = 1; int upDown3 = 1; int upDown4 = 1; int upDown5 = 1; int upDown6 = 1; // pwm value holding variable int val1 = 1; int val2 = 1; int val3 = 1; int val4 = 1; int val5 = 1; int val6 = 1; // flag variables boolean flag1 = 0; boolean flag2 = 0; boolean flag3 = 0; boolean flag4 = 0; boolean flag5 = 0; boolean flagDoOver = 0; //Setup void setup() { // The standard stuff... Serial.begin(9600); // Setup the serial communications so we can debug pinMode(pwm1,OUTPUT); pinMode(pwm2,OUTPUT); pinMode(pwm3,OUTPUT); pinMode(pwm4,OUTPUT); pinMode(pwm5,OUTPUT); pinMode(pwm6,OUTPUT); timer1 = millis(); } // Das Loop... void loop() { // Timer if( (timer1 + offset) < millis() ) { doFade1(); timer1 = millis(); } if(flagDoOver) { resetFade(); } } // Reset Fade Function void resetFade() { Serial.println("Resetting fade..."); // pwm value variables val1 = 1; val2 = 1; val3 = 1; val4 = 1; val5 = 1; val6 = 1; // Direction variables upDown1 = 1; upDown2 = 1; upDown3 = 1; upDown4 = 1; upDown5 = 1; upDown6 = 1; // flag variables flag1 = 0; flag2 = 0; flag3 = 0; flag4 = 0; flag5 = 0; flagDoOver = 0; } // Fade function void doFade1() { if(val1 >= 70) { upDown1 = -1; } if(val1 <= 0) { upDown1 = 0; } if(val1 == 30) { flag1 = 1; } val1 = val1 + ( 1 * upDown1); analogWrite(pwm1, val1); if(flag1) { if(val2 >= 70) { upDown2 = -1; } if(val2 <= 0) { upDown2 = 0; } if(val2 == 30) { flag2 = 1; } val2 = val2 + ( 1 * upDown2); analogWrite(pwm2, val2); } if(flag2) { if(val3 >= 70) { upDown3 = -1; } if(val3 <= 0) { upDown3 = 0; } if(val3 == 30) { flag3 = 1; } val3 = val3 + ( 1 * upDown3); analogWrite(pwm3, val3); } if(flag3) { if(val4 >= 70) { upDown4 = -1; } if(val4 <= 0) { upDown4 = 0; } if(val4 == 30) { flag4 = 1; } val4 = val4 + ( 1 * upDown4); Serial.println(val4); analogWrite(pwm4, val4); } if(flag4) { if(val5 >= 70) { upDown5 = -1; } if(val5 <= 0) { upDown5 = 0; } if(val5 == 30) { flag5 = 1; } val5 = val5 + ( 1 * upDown5); analogWrite(pwm5, val5); } if(flag5) { if(val6 >= 70) { upDown6 = -1; } if(val6 <= 0) { upDown6 = 0; flagDoOver = 1; } val6 = val6 + ( 1 * upDown6); analogWrite(pwm6, val6); } }