// Delay-Free Timing 03 // // In this case, we will set up a bunch of independent timers // And, we'll use only one function instead of 6! // Set variables // Set up three timers, each with a different offset to check against. long timer1 = 0; int timer1offset = 1000; long timer2 = 0; int timer2offset = 900; long timer3 = 0; int timer3offset = 800; long timer4 = 0; int timer4offset = 700; long timer5 = 0; int timer5offset = 600; long timer6 = 0; int timer6offset = 500; // Setup pins int ledPin1 = 11; // Note: needed to change the number of the pins int ledPin2 = 10; // from Delay-Free Timing 02, but the idea is the same. int ledPin3 = 9; int ledPin4 = 6; int ledPin5 = 5; int ledPin6 = 3; void setup() { // The standard stuff... Serial.begin(9600); // Setup the serial communications so we can debug // Save some vertical space by combining lines pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); pinMode(ledPin5, OUTPUT); pinMode(ledPin6, OUTPUT); timer1 = millis(); timer2 = millis(); timer3 = millis(); timer4 = millis(); timer5 = millis(); timer6 = millis(); // Start with all pins on digitalWrite(ledPin1,HIGH); digitalWrite(ledPin2,HIGH); digitalWrite(ledPin3,HIGH); digitalWrite(ledPin4,HIGH); digitalWrite(ledPin5,HIGH); digitalWrite(ledPin6,HIGH); } // Das Loop... void loop() { if((timer1 + timer1offset) < millis() ) { //Timer 1 doLED(ledPin1); timer1 = millis(); } if((timer2 + timer2offset) < millis() ) { //Timer 2 doLED(ledPin2); timer2 = millis(); } if((timer3 + timer3offset) < millis() ) { //Timer 3 doLED(ledPin3); timer3 = millis(); } if((timer4 + timer4offset) < millis() ) { //Timer 4 doLED(ledPin4); timer4 = millis(); } if((timer5 + timer5offset) < millis() ) { //Timer 5 doLED(ledPin5); timer5 = millis(); } if((timer6 + timer6offset) < millis() ) { //Timer 6 doLED(ledPin6); timer6 = millis(); } } // The doLED functions void doLED(int whichLED) { Serial.print("LED");Serial.print(whichLED);Serial.print(": "); Serial.println(!digitalRead(whichLED)); digitalWrite(whichLED,!digitalRead(whichLED)); }