void setup() { pinMode(14, INPUT); digitalWrite(14, HIGH); pinMode(10, OUTPUT); digitalWrite(10, LOW); pinMode(6, OUTPUT); digitalWrite(6, LOW); pinMode(7, OUTPUT); pinMode(9, OUTPUT); digitalWrite(7, HIGH); digitalWrite(9, LOW); } unsigned long finishTime = 0; #define DEFAULT_WAIT 10 #define MAX_WAIT 2500 int waitTime = DEFAULT_WAIT; unsigned long nextChange = 0; int index = 0; byte control[][3] = {{1,1,1}, {0,1,0}, {1,0,1}, {0,0,0}, {1,0,0}, {0,1,0}, {0,0,1}, {0,1,0}, {1,0,0}, {0,0,0}, {1,0,0}, {1,1,0}, {0,1,1}, {0,0,1}, {0,0,0}, {1,0,0}, {0,1,0}, {0,0,1}, {0,1,0}, {1,0,1}, {0,0,0}, {1,1,1}, {0,0,0}, {1,1,1}, {0,0,0}, {1,1,1}, {0,0,0}, }; void loop() { if ((digitalRead(14) == LOW) && (millis() > finishTime)) { //digitalWrite(10, !digitalRead(10)); waitTime = waitTime * 2; if (waitTime > MAX_WAIT) { waitTime = DEFAULT_WAIT; } finishTime = millis() + 100; nextChange = millis() - 1; } if (millis() > nextChange) { digitalWrite(6, control[index][0]); digitalWrite(9, !control[index][1]); digitalWrite(10, control[index][2]); index = (index + 1) % (sizeof(control)/3); nextChange = millis() + waitTime; } }