Last active
May 3, 2018 02:56
-
-
Save kenny-lee-1992/75ef6f62e56fe99795db493866a4ed54 to your computer and use it in GitHub Desktop.
Chuông Đố Vui Giáo Lý
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ===== CHUÔNG THI ĐỐ VUI ===== | |
// Khi người dùng nhấn nút thì tín hiệu đèn led tương ứng với nút nhấn sẽ sáng | |
// + Đèn sẽ sáng trong 5 giây sau đó tắt | |
// + Trong lúc đèn sáng thì những nút khác sẽ không thể nhấn trừ nút RESET | |
// + Nếu chưa hết 5s, nút RESET có thể được nhấn để reset lại trạng thái ban đầu | |
int LED1 = 2; | |
int LED2 = 3; | |
int LED3 = 4; | |
int LED4 = 5; | |
int LED5 = 6; | |
int BUT1 = 8; | |
int BUT2 = 9; | |
int BUT3 = 10; | |
int BUT4 = 11; | |
int BUT5 = 12; | |
int BUT_RESET = 13; | |
int flagBUT = 0; // Cờ: Nút nào đang được nhấn | |
unsigned long lastChangedTime = 0; // Thời điểm cuối cùng nút nhấn đươc nhấn | |
unsigned long waitTime = 5000; // 5 giây | |
void setup() { | |
Serial.begin(9600); //Bật Serial để debug | |
Serial.println("Start"); | |
pinMode(BUT_RESET, INPUT); // Reset lại trạng thái flagBUT = 0 | |
pinMode(BUT1, INPUT); // Nút nhấn 1 | |
pinMode(BUT2, INPUT); // Nút nhấn 2 | |
pinMode(BUT3, INPUT); // Nút nhấn 3 | |
pinMode(BUT4, INPUT); // Nút nhấn 4 | |
pinMode(BUT5, INPUT); // Nút nhấn 5 | |
pinMode(LED1, OUTPUT); // Đèn led tương ứng 1 | |
pinMode(LED2, OUTPUT); // Đèn led tương ứng 2 | |
pinMode(LED3, OUTPUT); // Đèn led tương ứng 3 | |
pinMode(LED4, OUTPUT); // Đèn led tương ứng 4 | |
pinMode(LED5, OUTPUT); // Đèn led tương ứng 5 | |
} | |
void loop() { | |
// Đọc tín hiệu Reset | |
int resetSignal = digitalRead(BUT_RESET); | |
if (flagBUT) { | |
if (resetSignal || maxWaiter()) { | |
resetSystem(); | |
} | |
else { | |
// Tiếp tục loop mới cho đến khi flagBUT được reset | |
return; | |
} | |
} | |
// Đọc tín hiệu từ các nút nhấn | |
flagBUT = readBUT(); | |
if(!flagBUT) { | |
// Tiếp tục loop mới cho đến khi có nút được nhấn | |
return; | |
} | |
// Cập nhật lần cuối nút nhấn đươc nhấn để so sánh 5s | |
lastChangedTime = millis(); | |
// Hiển thị LED tương ứng | |
showLed(flagBUT, HIGH); | |
} | |
void showLed(int ledNUM, int status) { | |
switch(flagBUT) { | |
case 1: | |
digitalWrite(LED1, status); | |
break; | |
case 2: | |
digitalWrite(LED2, status); | |
break; | |
case 3: | |
digitalWrite(LED3, status); | |
break; | |
case 4: | |
digitalWrite(LED4, status); | |
break; | |
case 5: | |
digitalWrite(LED5, status); | |
break; | |
} | |
} | |
int readBUT() { | |
if(digitalRead(BUT1)) | |
return 1; | |
if(digitalRead(BUT2)) | |
return 2; | |
if(digitalRead(BUT3)) | |
return 3; | |
if(digitalRead(BUT4)) | |
return 4; | |
if(digitalRead(BUT5)) | |
return 5; | |
// Không có nút nào đang được nhấn | |
return 0; | |
} | |
boolean maxWaiter() { | |
return (millis() - lastChangedTime) > waitTime; | |
} | |
void resetSystem() { | |
showLed(flagBUT, LOW); | |
flagBUT = 0; | |
lastChangedTime = 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment