#include <IRremote.h>
#include <Servo.h>
#include <U8glib.h>
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
Servo myservo;
const int pinR = 3;
const int pinG = 5;
const int pinB = 6;
const int Servo_Pin = 9;
const int Remote_Pin = 2;
IRrecv receiver(Remote_Pin);
int POWER_ON = 0;
int POWER_Status = 0;
int POWER = 0;
int PASS = 99;
int PASS_1,PASS_2,PASS_3,PASS_4 =99;
int PASS_Step_1,PASS_Step_2,PASS_Step_3,PASS_Step_4 =99;
int PASS_Step=0;
int SW_PUSH =0;
int SEND_PASS=0;
int PASS_COLLECT=0;
int MENU;
const byte PASSWORD [ ] = { 1 , 2 , 3 , 4 };
//const byte KEY_PASS [ ] = { PASS_1, PASS_2, PASS_3, PASS_4};
void setup() {
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
red();
myservo.write(0);
myservo.attach(Servo_Pin);
receiver.enableIRIn();
Serial.begin(9600);
u8g.begin();
}
void loop() {
if (receiver.decode()) {
remote();
receiver.resume();
}
power();
if(POWER==1){
screen();
if(SW_PUSH==1 && PASS_Step==0){
PASS_1=PASS;
Serial.print("PASS_1= ");
Serial.println(PASS_1);
PASS_Step=1;
SW_PUSH=0;
}
if(SW_PUSH==1 && PASS_Step==1){
PASS_2=PASS;
Serial.print("PASS_2= ");
Serial.println(PASS_2);
PASS_Step=2;
SW_PUSH=0;
}
if(SW_PUSH==1 && PASS_Step==2){
PASS_3=PASS;
Serial.print("PASS_3= ");
Serial.println(PASS_3);
PASS_Step=3;
SW_PUSH=0;
}
if(SW_PUSH==1 && PASS_Step==3){
PASS_4=PASS;
Serial.print("PASS_4= ");
Serial.println(PASS_4);
PASS_Step=4;
SW_PUSH=0;
}
if(SEND_PASS==1 && PASS_1==PASSWORD[0] && PASS_2==PASSWORD[1] && PASS_3==PASSWORD[2] && PASS_4==PASSWORD[3]){
myservo.write(90);
//Serial.println("PASSWORD COLLECT");
yellow();
}else if(SEND_PASS==1 && PASS_Step==4 && (PASS_1!=PASSWORD[0] || PASS_2!=PASSWORD[1] || PASS_3!=PASSWORD[2] || PASS_4!=PASSWORD[3])){
//Serial.println("PASSWORD NOT COLLECT");
delay(2000);
red();
}
}
}
void screen(){
u8g.firstPage();
do{
u8g.setFont(u8g_font_fixed_v0);
u8g.setPrintPos(25,30);
u8g.print(PASS_1);
u8g.setPrintPos(50,30);
u8g.print(PASS_2);
u8g.setPrintPos(75,30);
u8g.print(PASS_3);
u8g.setPrintPos(100,30);
u8g.print(PASS_4);
if(SEND_PASS==1 && PASS_1==PASSWORD[0] && PASS_2==PASSWORD[1] && PASS_3==PASSWORD[2] && PASS_4==PASSWORD[3]){
u8g.setPrintPos(0,50);
u8g.print("!!!PASSWORD COLLECT!!!");
}else if(SEND_PASS==1 && PASS_Step==4 && (PASS_1!=PASSWORD[0] || PASS_2!=PASSWORD[1] || PASS_3!=PASSWORD[2] || PASS_4!=PASSWORD[3])){
u8g.setPrintPos(0,50);
u8g.print("!PASSWORD NOT COLLECT!");
}
}while( u8g.nextPage());
}
void power(){
if(POWER_ON==0){
red();
u8g.nextPage();
}
if(POWER_ON==1 && SEND_PASS!=1){
green();
}
if(POWER_ON==2){
POWER_ON=0;
}
}
void reset(){
POWER_ON = 0;
POWER_Status = 0;
POWER = 0;
PASS = 99;
PASS_1 =0;
PASS_2 =0;
PASS_3 =0;
PASS_4 =0;
PASS_Step_1 =0;
PASS_Step_2 =0;
PASS_Step_3 =0;
PASS_Step_4 =0;
PASS_Step=0;
SW_PUSH =0;
SEND_PASS=0;
}
void red(){
analogWrite(pinR, 255);
analogWrite(pinG, 0);
analogWrite(pinB, 0);
myservo.write(0);
reset();
}
void green(){
analogWrite(pinR, 0);
analogWrite(pinG, 255);
analogWrite(pinB, 0);
POWER=1;
}
void yellow(){
analogWrite(pinR, 255);
analogWrite(pinG, 255);
analogWrite(pinB, 0);
}
void remote(){
switch (receiver.decodedIRData.command){
case 162:
POWER_ON=POWER_ON+1;
Serial.println("POWER");
break;
case 226:
red();
Serial.println("MENU");
break;
case 34:
Serial.println("TEST");
break;
case 2:
Serial.println("PLUS");
break;
case 194:
Serial.println("BACK");
break;
case 224:
Serial.println("PREV.");
break;
case 168:
Serial.println("PLAY");
break;
case 144:
Serial.println("NEXT");
break;
case 104:
PASS=0;
SW_PUSH=1;
Serial.println("num: 0");
Serial.print("SW_PUSH= ");Serial.println(SW_PUSH);
Serial.print("PASS= "); Serial.println(PASS);
break;
case 152:
Serial.println("MINUS");
break;
case 176:
SEND_PASS=1;
Serial.println("key: C");
break;
case 48:
PASS=1;
SW_PUSH=1;
Serial.println("num: 1");
Serial.print("SW_PUSH= ");Serial.println(SW_PUSH);
Serial.print("PASS= "); Serial.println(PASS);
break;
case 24:
PASS=2;
SW_PUSH=1;
Serial.println("num: 2");
Serial.print("SW_PUSH= ");Serial.println(SW_PUSH);
Serial.print("PASS= "); Serial.println(PASS);
break;
case 122:
PASS=3;
SW_PUSH=1;
Serial.println("num: 3");
Serial.print("SW_PUSH= ");Serial.println(SW_PUSH);
Serial.print("PASS= "); Serial.println(PASS);
break;
case 16:
PASS=4;
SW_PUSH=1;
Serial.println("num: 4");
Serial.print("SW_PUSH= ");Serial.println(SW_PUSH);
Serial.print("PASS= "); Serial.println(PASS);
break;
case 56:
PASS=5;
Serial.println("num: 5");
break;
case 90:
PASS=6;
Serial.println("num: 6");
break;
case 66:
PASS=7;
Serial.println("num: 7");
break;
case 74:
PASS=8;
Serial.println("num: 8");
break;
case 82:
PASS=9;
Serial.println("num: 9");
break;
default:
Serial.println(receiver.decodedIRData.command);
}
}