enum SystemState {IDLE, PRESS}; SystemState state; int buttonState = 15; int ledPin = A14; int press_time; float press_start, press_end; float debounce_start; int debounce_time; int prevButton; int random_no; void setup() { // put your setup code here, to run once: pinMode(buttonState, INPUT_PULLUP); pinMode(ledPin, OUTPUT); press_time = 0; state = IDLE; prevButton = 1; random_no = 500; debounce_time = 30; digitalWrite(ledPin, LOW); SerialUSB.begin(0); } void loop() { // put your main code here, to run repeatedly: pwm_LED(); } void pwm_LED() { switch (state) { case IDLE: SerialUSB.println(press_time); SerialUSB.println(random_no); if (press_time > random_no) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } SerialUSB.println(digitalRead(ledPin)); if (debounce(buttonState, prevButton)) { press_start = millis(); prevButton = !prevButton; state = PRESS; } break; case PRESS: digitalWrite(ledPin, LOW); if (debounce(buttonState, prevButton)) { press_end = millis(); press_time = press_end - press_start; random_no = random(500); state = IDLE; prevButton = !prevButton; } break; } } int debounce(int button, int previous) { if (digitalRead(button) != previous) { debounce_start = millis(); } while (millis() - debounce_start < debounce_time) {}; return digitalRead(button) != previous; }