ช่วยผมด้วยยยยยยย^^

ใส่delay แล้วทำให้กดปุ่ม ไม่ค่อยเปลี่ยนโหมด มีวิธีไหนที่ทำให้กดปุ่มง่ายๆไหมครับ หรือต้องแก้ตรงไหนครับ (ขอบคุณครับ)

โค๊ดนี้ครับ

#define led1 2
#define led2  4
#define led3  6
#define relay 8
#define ledON4 11
#define sw  5
unsigned int cnt = 0;
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(ledON4, OUTPUT);
  pinMode(relay, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  digitalWrite(ledON`Preformatted text`4, 64);
}

void loop() {

  if (digitalRead(sw) == 0) {
    delay(250);
    cnt++;
    if (cnt > 3)cnt = 0;
  }
  switch (cnt) {
    case 0: fn0(); break;
    case 1: fn1(); break;
    case 2: fn2(); break;
    case 3: fn3(); break;

  }

}
void fn0() {
  digitalWrite(led1, LOW); //LOWไฟติด
  digitalWrite(led2, LOW); //HIGHไฟดับ
  digitalWrite(led3, LOW);
  digitalWrite(relay, HIGH);

}
void fn1() {
  digitalWrite(relay, HIGH);
  delay(50);
  digitalWrite(relay, LOW);
  delay(50);
  digitalWrite(led3, HIGH);

}
void fn2() {
  digitalWrite(relay, LOW);
  delay(175);
  digitalWrite(relay, HIGH);
  delay(175);
  digitalWrite(led3, LOW);
  digitalWrite(led2, HIGH);
}
void fn3() {
  digitalWrite(relay, LOW);
  delay(300);
  digitalWrite(relay, HIGH);
  delay(300);
  digitalWrite(led2, LOW);
  digitalWrite(led1, HIGH);

}

ปุ่มใช้แบบ กดติดปล่อยดับรึ

ใช่ครับพี่

แล้วเวลาใช้งานเรากดยังไง ต้องการให้กดค้างจนกว่าจะทำงานหรือกดแล้วปล่อยแล้วรอให้มันทำงานเอง

กดแล้วปล่อยให้มันทำงานครับ
แต่บางloopผมตั้งdelay (200);
เวลากดปุ่มเปลี่ยนโหมดบางครั้งกดแล้วมันไม่เปลี่ยนโหมดให้ครับต้องกดย้ำอีกที ถึงจะเปลี่ยนให้ครับ

คำตอบและคำอธิบายอยู่ในกระทู้นี้ครับ