ขอสอบถามการค้างสถานะการทำงานของโปรแกรม และ Reset โดยไม่ต้อง delay ของ arduino ครับ

สวัสดีครับ ผมเพิ่งเริ่มหัดใช้งาน arduino ซึ่งผมต้องการทำโปรแกรมแข่งกดสวิตช์ เพื่อแย่งตอบปัญญา ใครกดสวิตช์ได้ก่อนไฟประจำหมายเลขนั้นจะติดค้าง และคนอื่น ๆ ที่กดสวิตช์ช้ากว่าจะไม่มีผลอะไร จนกว่าจะกดปุ่ม Reset ถึงจะเริ่มต้นให้แข่งขันกดได้ใหม่อีกครั้ง  ผมได้ต่อ arduino uno เข้ากับ Relay Module และสวิตช์ 4 ตัว (ผู้แข่งขัน 3  และ Reset 1)  ปัญหาของผมก็คือ
1. เมื่อผู้แข่งขันกดสวิทช์ได้แล้ว จะหน่วง Delay ตามเวลาที่กำหนด จากนั้นก็จะกลับมากดสวิทช์ให้ไฟติดได้อีกครั้ง ซึ่งผมต้องการให้มันค้างสถานะเอาไว้ จนกว่าจะทำการกดสวิตช์ Reset ถึงจะเริ่มทำการกดสวิตช์ได้
2. ในการที่จะ Reset ก็ต้องรอ Delay ก่อน ซึ่งผมอยากจะให้สามารถกด Reset ได้ตลอดเวลาโดยไม่ต้องรอ Delay ครับ

Code ที่ผมเขียนแบบงูๆปลาๆ จากตัวอย่างต่าง ๆ นำมาประติดประต่อ จนได้ผลตามที่ต้องการในระดับหนึ่งครับ แต่ยังติดปัญหา 2 ข้อที่กล่าวมา ช่วยกรุณาชี้แนะด้วยครับ

int Relay1 = 8; // ต่อกับขา in8 ของบอร์ดรีเลย์
int Relay2 = 9; // ต่อกับขา in9 ของบอร์ดรีเลย์
int Relay3 = 10; //ต่อกับขา in10 ของบอร์ดรีเลย์
int Switch1 = 2; // ปุ่ม 1
int Switch2 = 3; // ปุ่ม 2
int Switch3 = 4; // ปุ่ม 3
int Switch4 = 7; //ปุ่ม Reset
int sw1State = 0;
int sw2State = 0;
int sw3State = 0;
int sw4State = 0;

void setup() {                
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  sw1State = digitalRead(Switch1);
  sw2State = digitalRead(Switch2);
  sw3State = digitalRead(Switch3);
  sw4State = digitalRead(Switch4);
  
if(sw1State == LOW)//กดปุ่ม 1
  {
    sw2State = 1;
    sw3State = 1;
    digitalWrite(Relay1, 1);   // เปิดรีเลย์ 1
    Serial.println("Player 1 WIN");
    digitalWrite(Relay2, 0);   // ปิดรีเลย์ 2
    digitalWrite(Relay3, 0);   // ปิดรีเลย์ 3
    delay(5000);
  }

if(sw2State == LOW)//กดปุ่ม 2
  {
    sw1State = 1;
    sw3State = 1;    
    digitalWrite(Relay1, 0);   // ปิดรีเลย์ 1
    digitalWrite(Relay2, 1);   // เปิดรีเลย์ 2
    Serial.println("Player 2 WIN");
    digitalWrite(Relay3, 0);   // ปิดรีเลย์ 3
    delay(5000);
  }

if(sw3State == LOW)//กดปุ่ม 3
  {
    sw1State = 1;
    sw2State = 1;    
    digitalWrite(Relay1, 0);   // เปิดรีเลย์ 1
    digitalWrite(Relay2, 0);   // ปิดรีเลย์ 2
    digitalWrite(Relay3, 1);   // เปิดรีเลย์ 3
    Serial.println("Player 3 WIN");
    delay(5000);
  }

if(sw4State == LOW)//กดปุ่ม Reset
  {
    sw1State = 1;
    sw2State = 1;
    sw3State = 1;
    digitalWrite(Relay1, 0);   // ปิดรีเลย์ 1
    digitalWrite(Relay2, 0);   // ปิดรีเลย์ 2
    digitalWrite(Relay3, 0);   // ปิดรีเลย์ 3
    Serial.println("RESET");
    delay(1000);
  }  
  
}
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่