#define button A7 #define relay A5 #define time_hold 6000 int val = 0; int i = 0; long previousMillis; long previousMillis2; bool relay_stt = false; bool relay_stt2 = false; bool hold = true; String input; void setup() { Serial.begin(9600); pinMode(button, INPUT_PULLUP); pinMode(relay, OUTPUT); relay_stt = false; } void read_button() { val = analogRead(button); //Serial.println(val); if (val > 1010) { i++; } else if (val < 1010) { i = 0; } if (i > 500) { digitalWrite(relay, HIGH); relay_stt = true; relay_stt2 = true; previousMillis = millis(); if (i == 503) { Serial.println("open"); } } } void serial_read() { while (Serial.available() > 0) { input = Serial.readStringUntil('\r'); Serial.println(input); if (input == "1") { digitalWrite(relay, HIGH); relay_stt = true; previousMillis = millis(); Serial.println("open"); } } } void loop() { //unsigned long currentMillis = millis(); read_button(); serial_read(); if ((millis() - previousMillis > time_hold) && relay_stt == true && val <1010) { relay_stt = false; digitalWrite(relay, LOW); Serial.println("close"); previousMillis = millis(); } // if ((millis() - previousMillis2 > time_hold) && relay_stt2 == true) // { // relay_stt2 = false; // digitalWrite(relay, LOW); // Serial.println("Close door by usb"); // previousMillis2 = millis(); // } }