const int button = 0; const int led = 16; int buttonState = false; int ledState = HIGH; int buttonDownTime = 0; bool buttonDownBit = false; unsigned long currentTime = 0; unsigned long previousTime = 0; unsigned long delayTime = 100; void setup() { pinMode(button, INPUT); pinMode(led, OUTPUT); } void loop() { getDelay(); blink(); delay(1); } void getDelay() { // get buttonDownTim buttonState = digitalRead(button); // buttonState LOW means button is pressed if ((buttonState == LOW) && (buttonDownBit == false)) { buttonDownTime = millis(); buttonDownBit = true; } if ((buttonState == HIGH) && (buttonDownBit == true)) { delayTime = millis() - buttonDownTime; buttonDownBit = false; } } void blink() { currentTime = millis(); if ((currentTime - previousTime) >= delayTime) { ledState = (ledState == LOW) ? HIGH : LOW; digitalWrite(led, ledState); previousTime = currentTime; } }