#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <TM1637Display.h>
#include <Servo.h>
Servo servo1;
Servo servo2;
LiquidCrystal_I2C lcd(0x27,16,2);
int CL = 2;
int DIO= 3;
TM1637Display display(CL, DIO);
int receiver =9;
int correctCode[4] = {1, 2, 3, 4};
int enteredCode[4]={};
int codeIndex = 0;
int currentAngle = 180;
bool systemOn = false;
bool codeValidated = false;
unsigned long lastActionTime = 0;
unsigned long lastIRTime = 0;
int movingDirection = 0;
void setup() {
// put your setup code here, to run once:
display.setBrightness(7);
servo1.attach(6);
servo2.attach(5);
//lcd.begin(16, 2);
lcd.init();
lcd.setCursor(0,0);
IrReceiver.begin(receiver, ENABLE_LED_FEEDBACK);
setDoorAngle(180);
updatePowerState();
}
void loop() {
// put your main code here, to run repeatedly:
if(IrReceiver.decode()){
int key = IrReceiver.decodedIRData.command;
IrReceiver.resume();
// POWER BUTTON (162)
if (key == 162 ) {
systemOn = !systemOn;
updatePowerState();
return;
}
}
}
void setDoorAngle(int angle){
servo1.write(angle);
servo2.write(180 - angle);
display.showNumberDec(angle);
}
void updatePowerState(){
if(systemOn==true){
lcd.backlight();
resetSystem();
}
else{
lcd.clear();
lcd.noBacklight();
display.clear();
codeValidated = false;
currentAngle = 180;
setDoorAngle(180);
}
}
void resetSystem(){
codeIndex = 0;
codeValidated = false;
movingDirection = 0;
for (int i = 0; i < 4; i++)
{
enteredCode[i] = 0;
}
lcd.clear();
lcd.print("Enter Code:");
uint8_t dashes[] = {0x40, 0x40, 0x40, 0x40};
display.setSegments(dashes);
}
servo1
servo2