/* 1. giám sát các bị điện trong phòng họp (bật/tắt led xanh, hiển thị lên LCD);
tự động bật/tắt hệ thống đèn (LED xanh, dựa trên cảm biến chuyển động PIR);
2. điều khiển các thiết bị điện từ xa (dùng IR remote và IR receiver);
3. Điểm danh bằng dấu vân tay (dùng button)
4. giám sát, điều khiển thiết bị điện, bơm nước trong ký túc xá
(xem trạng thái và bật/tắt servo, led đỏ, hiển thị lên LCD) */
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <IRremote.h>
#define SENSOR_PIN 8
#define LED_YELLOW 13
#define LED_RED 12
#define LED_GREEN 11
#define SWITCH_LED 7
#define SWITCH_SERVO 5
#define SERVO_PIN 6
#define PIR_PIN 2
int receiver_pin = 3;
int btn_value = 0;
IRrecv receiver(receiver_pin);
LiquidCrystal_I2C lcd1(0x27, 20, 4); // LCD 20x4 (Hop, KTX)
Servo servo;
void setup() {
pinMode(SENSOR_PIN, INPUT_PULLUP);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(SWITCH_LED, INPUT_PULLUP);
pinMode(SWITCH_SERVO, INPUT_PULLUP);
pinMode(PIR_PIN, INPUT);
servo.attach(SERVO_PIN);
lcd1.init();
lcd1.backlight();
Serial.begin(9600); // khởi động serial
Serial.println("Welcome");
receiver.enableIRIn();
lcd1.setCursor(8,3);
lcd1.print("Fan: Off");
}
void loop() {
Sanh();
Hop();
KTX();
}
void Sanh() {
int cambienvantay = digitalRead(SENSOR_PIN);
if (cambienvantay == LOW) { // Nếu nhận được vân tay
digitalWrite(LED_YELLOW, HIGH); //quét thành công
Serial.println("Diem danh thanh cong");
delay(5000); // giữ trạng thái 5s
digitalWrite(LED_YELLOW, LOW);
Serial.println("Welcome");
}
delay(1000);
}
void Hop() {
lcd1.setCursor(0, 0);
lcd1.print("GS Hop: ");
lcd1.print("Den: ");
if (digitalRead(PIR_PIN) == HIGH) {
digitalWrite(LED_GREEN, HIGH); // Bật LED
lcd1.print("On ");
} else {
digitalWrite(LED_GREEN, LOW); // Tắt LED
lcd1.print("Off");
}
}
void KTX() {
lcd1.setCursor(0, 1);
lcd1.print("GS KTX: ");
lcd1.print("Den: ");
digitalWrite(LED_RED, digitalRead(SWITCH_LED));
if (digitalRead(SWITCH_LED)) {
lcd1.print("On ");
} else {
lcd1.print("Off");
}
lcd1.setCursor(8, 2);
lcd1.print("Bom: ");
if (digitalRead(SWITCH_SERVO)) {
servo.write(0);
lcd1.print("On ");
} else {
servo.write(90);
lcd1.print("Off");
}
if (receiver.decode()) {
translateIR();
receiver.resume();
}
}
int translateIR() {
btn_value = receiver.decodedIRData.command;
lcd1.setCursor(8,3);
if (btn_value == 162) { //nguồn
lcd1.print("Fan: Off");
}
if (btn_value == 34) { //test
lcd1.print("Fan: On ");
}
}