Skip to content

Instantly share code, notes, and snippets.

@minhlong
Last active May 3, 2018 02:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save minhlong/75ef6f62e56fe99795db493866a4ed54 to your computer and use it in GitHub Desktop.
Save minhlong/75ef6f62e56fe99795db493866a4ed54 to your computer and use it in GitHub Desktop.
Chuông Đố Vui Giáo Lý
// ===== 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