สวัสดีครับ ผมเพิ่งเริ่มหัดใช้งาน 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);
}
}
ขอสอบถามการค้างสถานะการทำงานของโปรแกรม และ Reset โดยไม่ต้อง delay ของ arduino ครับ
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);
}
}