#define Serial1 Serial
#include <IRremote.hpp>
#define IR_PIN 15
#define buzzer 9
#define led 5
#define fan 1
#define bat 26
bool status = false;
int timer = 1;
int timeCounter = 0;
int totalTime;
unsigned long timeNow;
void setup() {
Serial.begin(115200);
analogReadResolution(12);
Serial.println("Initiate...");
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(bat, INPUT);
}
void loop() {
if (IrReceiver.decode()) {
uint16_t data = IrReceiver.decodedIRData.command;
Serial.println(data);
// btn ON
if (data == 162) {
Serial.println("Timer : ON");
status = true;
}
// btn OFF
if (data == 226) {
Serial.println("Timer : OFF");
status = false;
digitalWrite(fan, 0);
}
// btn 1
if (data == 48) {
Serial.println("Timer : 1");
timer = 1;
status = true;
}
// btn 2
if (data == 24) {
Serial.println("Timer : 2");
timer = 2;
status = true;
}
// btn 3
if (data == 122) {
Serial.println("Timer : 3");
timer = 3;
status = true;
}
// btn 4
if (data == 16) {
Serial.println("Timer : 4");
timer = 4;
status = true;
}
// reset timer
timeCounter = 0;
totalTime = timer * 3600;
// the buzzer will buzz to indicate a button on the remote was pressed
digitalWrite(buzzer, 1);
delay(100);
digitalWrite(buzzer, 0);
IrReceiver.resume();
}
if (millis() - timeNow >= 1000) {
timeNow = millis();
// read battery voltage
float vbat = 3 * analogRead(bat) * (3.3 / 4095.0);
Serial.print("Battery(v) : ");
Serial.println(vbat);
// led turn on when the battery voltage is low
if (vbat > 5.5 && vbat < 6.3) {
digitalWrite(led, 1);
Serial.println("Battery Low.");
}
if (status) {
// start the timer
timeCounter++;
// The fan will turn on and run for 30 seconds
if (timeCounter < 30) {
digitalWrite(fan, 1);
} else {
digitalWrite(fan, 0);
}
// when timer finished
if (timeCounter >= totalTime) {
status = false;
Serial.println("Timer ended.");
}
}
}
}