#include <IRremote.hpp>
#include <Servo.h>
Servo myservo;
int pos = 0;
const int Recv_Pin = 2;
int Ledpin[] = {3, 4, 5, 6};
int i;
unsigned long lastTime = millis(); // Lưu thời gian cuối cùng khi nhận tín hiệu từ Remote
void setup() {
Serial.begin(9600);
myservo.attach(12);
for (i = 0; i < 4; i++)
pinMode(Ledpin[i], OUTPUT);
for (i = 0; i < 4; i++)
digitalWrite(Ledpin[i], LOW);
//Khởi động bộ thu, Khi nhận tín hiệu Led chân 8 nhấp nháy
IrReceiver.begin(Recv_Pin, true, 8); // True cho phép led nối với chân 8 nhấp nháy
}
//uint32_t Là kiểu dữ liệu số 32 bit, giá trị không dấu từ 0 đến FFFFFFFF
void loop() {
if (IrReceiver.decode()) // Kiểm tra liên tục tín hiệu nhận từ Remote
{
uint32_t dataRemote = IrReceiver.decodedIRData.decodedRawData; // Lưu dữ liệu nhận được vào biến dataRemote
if (dataRemote > 0) // Kiểm tra dữ liệu hợp lệ phải > 0
{
Serial.println(dataRemote);
if (millis() - lastTime > 250)
{
switch (dataRemote)
{
case 3476094720: // Bấm phím số 1, điều khiển Led 1 sáng tắt
digitalWrite(Ledpin[0], !digitalRead(Ledpin[0]));
break;
case 3877175040: // Bấm phím số 2, điều khiển Led 2 sáng tắt
digitalWrite(Ledpin[1], !digitalRead(Ledpin[1]));
break;
case 2239430400: // Bấm phím số 3, điều khiển Led 3 sáng tắt
digitalWrite(Ledpin[2], !digitalRead(Ledpin[2]));
break;
case 4010868480: // Bấm phím số 4, điều khiển Led 4 sáng tắt
digitalWrite(Ledpin[3], !digitalRead(Ledpin[3]));
break;
case 1738080000: // Bấm phím CH-, tất cả các đèn đều tắt
for (i = 0; i < 4; i++)
digitalWrite(Ledpin[i], LOW);
break;
case 4244832000: // Bấm Phím số CH+, tất cả các đèn đều sáng
for (i = 0; i < 4; i++)
digitalWrite(Ledpin[i], HIGH);
break;
case 3342401280: // Bấm Phím số 5, cửa sổ mở
for (pos = 0; pos < 180; pos += 1) {
myservo.write(180);
delay(10);
}
break;
case 2774204160: // Bấm Phím số 6, cửa đóng
for (pos = 180; pos >= 1; pos -= 1) {
myservo.write(pos);
delay(10);
}
break;
}
}
}
lastTime = millis();//Reset biến lastTime
IrReceiver.resume(); // Cho phép nhận giá trị tiếp theo
}
}