const int ledPin1 = 5; // Chân kết nối LED 1 const int ledPin2 = 6; // Chân kết nối LED 2 const int buttonPin1 = 7; // Chân kết nối nút nhấn 1 const int buttonPin2 = 8; // Chân kết nối nút nhấn 2 bool ledState1 = false; // Trạng thái của LED 1 bool ledState2 = false; // Trạng thái của LED 2 #define Light A1 // Led tro sang camera unsigned long previousMillis1 = 0; // Thời điểm lưu trữ cho LED 1 unsigned long previousMillis2 = 0; // Thời điểm lưu trữ cho LED 2 int timedelay= 5000; void setup() { pinMode(ledPin1, OUTPUT); // Thiết lập chân là OUTPUT cho LED 1 pinMode(ledPin2, OUTPUT); // Thiết lập chân là OUTPUT cho LED 2 pinMode(buttonPin1, INPUT_PULLUP); // Thiết lập chân là INPUT_PULLUP cho nút nhấn 1 pinMode(buttonPin2, INPUT_PULLUP); // Thiết lập chân là INPUT_PULLUP cho nút nhấn 2 digitalWrite(ledPin1, HIGH); // Make sure door is locked digitalWrite(ledPin2, HIGH); // Make sure door is locked digitalWrite(Light, LOW); Serial.begin(9600); // Bắt đầu kết nối Serial } void loop() { checkserial(); readbutton(); checkrelay(); } void readbutton(){ // Kiểm tra nếu nút nhấn 1 được nhấn if (digitalRead(buttonPin1) == LOW) { // Bật LED 1 và ghi lại thời điểm hiện tại digitalWrite(ledPin1, LOW); ledState1 = true; previousMillis1 = millis(); } // Kiểm tra nếu nút nhấn 2 được nhấn if (digitalRead(buttonPin2) == LOW) { // Bật LED 2 và ghi lại thời điểm hiện tại digitalWrite(ledPin2, LOW); ledState2 = true; previousMillis2 = millis(); } } void checkserial(){ if (Serial.available() > 0) { String input = Serial.readStringUntil('\n'); // Đọc từ Serial cho đến khi gặp ký tự xuống dòng input.trim(); // Loại bỏ các khoảng trắng và ký tự xuống dòng từ đầu và cuối chuỗi if (input == "1") { // Bật LED 1 và ghi lại thời điểm hiện tại digitalWrite(ledPin1, LOW); Serial.println("open_1"); ledState1 = true; previousMillis1 = millis(); } else if (input == "2") { // Bật LED 2 và ghi lại thời điểm hiện tại digitalWrite(ledPin2, LOW); Serial.println("open_2"); ledState2 = true; previousMillis2 = millis(); }else if (input == "3"){ digitalWrite(Light, HIGH); Serial.println("open_3"); }else if (input == "4"){ digitalWrite(Light, LOW); Serial.println("open_4"); }else if (input.indexOf("tdoor")!= -1){ int t = input.substring(5,7).toInt(); Serial.println(t); if (t !=0 && t <=30){ timedelay = t*1000; } } } } void checkrelay(){ // Kiểm tra nếu LED 1 đã được bật và thời gian đã trôi qua 1000 ms (1 giây) if (ledState1 && (millis() - previousMillis1 >= timedelay)) { digitalWrite(ledPin1, HIGH); // Tắt LED 1 ledState1 = false; // Đặt trạng thái LED 1 về false } // Kiểm tra nếu LED 2 đã được bật và thời gian đã trôi qua 1000 ms (1 giây) if (ledState2 && (millis() - previousMillis2 >= timedelay)) { digitalWrite(ledPin2, HIGH); // Tắt LED 2 ledState2 = false; // Đặt trạng thái LED 2 về false } }