// คู่มือการใช้งาน
// โค้ดนี้เป็นโปรแกรมสำหรับใช้ร่วมกับจอแสดงผล TM1637 และมีปุ่ม 3 ปุ่มสำหรับตั้งเวลาและเริ่มนับถอยหลัง รวมถึงการควบคุมรีเลย์และการแจ้งเตือนด้วยเสียงบัซเซอร์เมื่อเวลาหมด
// ฮาร์ดแวร์ที่ใช้
// จอแสดงผล TM1637
// ปุ่ม 3 ปุ่ม (Red, Green, Blue)
// รีเลย์
// บัซเซอร์
// ไมโครคอนโทรลเลอร์ (เช่น Arduino)
// การเชื่อมต่อฮาร์ดแวร์
// ปุ่ม Red ต่อที่ขา 8
// ปุ่ม Green ต่อที่ขา 9
// ปุ่ม Blue ต่อที่ขา 10
// รีเลย์ ต่อที่ขา 11
// บัซเซอร์ ต่อที่ขา 12
// ขา CLK ของ TM1637 ต่อที่ขา 2
// ขา DIO ของ TM1637 ต่อที่ขา 3
// อธิบายโค้ด
// การตั้งค่าขาเชื่อมต่อและตัวแปร:
// กำหนดขาที่เชื่อมต่อกับปุ่ม รีเลย์ และบัซเซอร์
// สร้างวัตถุ TM1637 สำหรับจอแสดงผลและตัวแปรสำหรับเก็บเวลาและสถานะการนับถอยหลัง
// ฟังก์ชัน setup():
// กำหนดโหมดของขาเชื่อมต่อและเริ่มต้นการทำงานของจอแสดงผล TM1637
// ตั้งค่าความสว่างของจอแสดงผลและอัพเดทการแสดงผลครั้งแรก
// ฟังก์ชัน loop():
// ตรวจสอบการกดปุ่มต่างๆ เพื่อเพิ่มหรือลดเวลา หรือเริ่มนับถอยหลัง
// เมื่อเริ่มนับถอยหลังจะมีการตรวจสอบเวลาและลดเวลาทุกๆ 1 วินาที
// เมื่อเวลาหมด จะเรียกใช้ฟังก์ชัน triggerAlarm() เพื่อแจ้งเตือน
// ฟังก์ชัน updateDisplay():
// อัพเดทจอแสดงผล TM1637 ให้แสดงเวลาที่เหลือในรูปแบบนาทีและวินาที
// ฟังก์ชัน triggerAlarm():
// เล่นเสียงบัซเซอร์เพื่อแจ้งเตือนเมื่อเวลาหมด โดยเล่นเสียงและหยุดเสียงสลับกันทุก 200 มิลลิวินาทีเป็นเวลา 5 รอบ
// [][][][] [][][][] [] [] [][] [][][][]
// [] [] [] [] [] [] [] [] []
// [] [][] [] [] [] [] [] [] [] []
// [] [] [] [][][][] [][][][] [][][][] []
// [] [][] [] [] [] [] [] [] []
// [] [] [] [] [] [] [] []
// [][][][] [] [] [] [] [] []
#include <TM1637.h>
// กำหนดขาเชื่อมต่อของปุ่มและอุปกรณ์ต่างๆ
const int red_bt = 8;
const int green_bt = 9;
const int blue_bt = 10;
const int relay_pin = 11;
const int buzzer_pin = 12;
int clk = 2;
int dio = 3;
// สร้างวัตถุ TM1637 สำหรับจอแสดงผล
TM1637 tm(clk, dio);
// ตัวแปรสำหรับเก็บเวลาที่เหลือ และสถานะการนับถอยหลัง
int timeLeft = 0;
bool countingDown = false;
unsigned long lastUpdateTime = 0;
void setup() {
// กำหนดโหมดขาเชื่อมต่อ
pinMode(red_bt, INPUT_PULLUP);
pinMode(green_bt, INPUT_PULLUP);
pinMode(blue_bt, INPUT_PULLUP);
pinMode(relay_pin, OUTPUT);
pinMode(buzzer_pin, OUTPUT);
// เริ่มต้นการทำงานของจอแสดงผล TM1637
tm.init();
tm.set(5); // กำหนดความสว่าง
updateDisplay();
}
void loop() {
// ตรวจสอบการกดปุ่ม Red เพื่อเพิ่มเวลา
if (digitalRead(red_bt) == LOW) {
delay(200); // ดีเลย์เพื่อป้องกันการกดซ้ำ
timeLeft++;
updateDisplay();
}
// ตรวจสอบการกดปุ่ม Green เพื่อลดเวลา
if (digitalRead(green_bt) == LOW) {
delay(200); // ดีเลย์เพื่อป้องกันการกดซ้ำ
if (timeLeft > 0) timeLeft--;
updateDisplay();
}
// ตรวจสอบการกดปุ่ม Blue เพื่อเริ่มนับถอยหลัง
if (digitalRead(blue_bt) == LOW) {
delay(200); // ดีเลย์เพื่อป้องกันการกดซ้ำ
if (!countingDown) {
countingDown = true;
lastUpdateTime = millis();
digitalWrite(relay_pin, HIGH);
}
}
// ถ้ามีการนับถอยหลัง
if (countingDown) {
unsigned long currentTime = millis();
// ตรวจสอบทุกๆ 1 วินาที
if (currentTime - lastUpdateTime >= 1000) {
lastUpdateTime = currentTime;
if (timeLeft > 0) {
timeLeft--;
updateDisplay();
}
if (timeLeft == 0) {
countingDown = false;
triggerAlarm();
}
}
}
}
// ฟังก์ชันสำหรับอัพเดทจอแสดงผล
void updateDisplay() {
int minutes = timeLeft / 60;
int seconds = timeLeft % 60;
tm.display(0, minutes / 10);
tm.display(1, minutes % 10);
tm.point(1);
tm.display(2, seconds / 10);
tm.display(3, seconds % 10);
}
// ฟังก์ชันสำหรับแจ้งเตือนเมื่อเวลาหมด
void triggerAlarm() {
for (int i = 0; i < 5; i++) {
digitalWrite(relay_pin, LOW);
tone(buzzer_pin, 1000); // เล่นเสียงบัซเซอร์ที่ความถี่ 1000Hz
delay(200);
noTone(buzzer_pin); // ปิดเสียงบัซเซอร์
delay(200);
}
}