#include <IRremote.h>
#include <LiquidCrystal.h>
int quet ; // hàng
int cot ; // cột
int lap;
byte led[][2] =
{
0b00000110,0b00000000,
0b00001111,0b00000000,
0b00011111,0b10000000,
0b00111111,0b11000000,
0b01111111,0b11100000,
0b11111111,0b11110000, // giữa ra 2 bên
};
boolean a = 1; // biến hiệu ứng 1 - trái sang phải
boolean b = 1; // biến hiệu ứng 2 - phải sang trái
boolean c = 0; // biến hiệu ứng 3 - dưới lên trên
boolean d = 0; // biến hiệu ứng 4 - trên xuống dưới
boolean e = 1; // biến hiệu ứng 5 - giữa ra
boolean f = 1; // biến hiệu ứng 6 - ngoài vào giữa
boolean g = 0; // biến hiệu ứng 7 - random
boolean h = 1; // biến hiệu ứng 8 - nháy 2 bảng
boolean i = 1;
boolean k = 1;
boolean che_do=1;
boolean gr = 1; // biến màu
int y = 100; // độ trễ
boolean z = 1; // bật tắt độ trễ
int x; // quét ic
#define PIN_RECEIVER 2 // Signal Pin of IR receiver
IRrecv receiver(PIN_RECEIVER);
LiquidCrystal lcd(13, 12, 11, 10, 8, A5);
//-------------------------------------------
int hang[4] = {3, 5, 6, 9};
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
lcd.begin(16, 2);
receiver.enableIRIn(); // Start the receiver
pinMode(A4, OUTPUT);
pinMode(4, OUTPUT);
pinMode(7, OUTPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(A2, OUTPUT);
attachInterrupt(0, ngat,RISING);
lcd.setCursor(0,0);
lcd.print("1111111111111111");
lcd.setCursor(12,1);
}
void ngat()
{
digitalWrite(A2, HIGH);
che_do=0;
z = 0 ;
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
digitalWrite(7, 1);
}
//-------------------------------------------
void xanh() // bật hết cột xanh
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
shiftOut(A4, 4, LSBFIRST, 0b11110000);
shiftOut(A4, 4, LSBFIRST, 0b11111111);
digitalWrite(7, 1);
}
void rehang()
{
for(x=0;x<4;x++)
{
digitalWrite(hang[x],0);
}
}
//-------------------------------------------
void hu1() // xanh trái sang phải một cột
{
for (x = 0; x < 8; x++)
{
digitalWrite(7, 0);
shiftOut(A4 ,4, LSBFIRST, 0b00000000);
shiftOut(A4, 4, LSBFIRST, 0b10000000 >> x);
digitalWrite(7, 1);
delay(y*z);
} //
for(x=0;x<4;x++)
{
digitalWrite(7, 0);
shiftOut(A4 ,4, LSBFIRST, 0b10000000>>x);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
digitalWrite(7, 1);
delay(y*z);
}
}
//-------------------------------------------
void hu2() // xanh - phải sang trái một cột
{
for (x = 0; x < 4; x++)
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b00010000 << x);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
digitalWrite(7, 1);
delay(y*z);
}
for (x = 0; x < 8; x++)
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
shiftOut(A4, 4, LSBFIRST, 0b00000001 << x);
digitalWrite(7, 1);
delay(y*z);
digitalWrite(7, 0);
}
}
//-------------------------------------------
void hu3() // xanh - dưới lên
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b11110000);
shiftOut(A4, 4, LSBFIRST, 0b11111111);
digitalWrite(7, 1);
for(quet = 0 ; quet < 4 ; quet++ )
{
for(x=0;x<4;x++)
{
digitalWrite(hang[x],1);
}
digitalWrite(hang[quet],0);
delay(y*z);
}
for(x=0;x<4;x++)
{
digitalWrite(hang[x],0);
}
}
//-------------------------------------------
void hu4() // xanh - trên xuống
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b11110000);
shiftOut(A4, 4, LSBFIRST, 0b11111111);
digitalWrite(7, 1);
for(quet = 4 ; quet >= 0 ; quet-- )
{
for(x=0;x<4;x++)
{
digitalWrite(hang[x],1);
}
digitalWrite(hang[quet],0);
delay(y*z);
}
for(x=0;x<4;x++)
{
digitalWrite(hang[x],0);
}
}
//-------------------------------------------
void hu5() // xanh - giữa ra
{
for (x=0;x<6;x++)
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, led[x][1]);
shiftOut(A4, 4, LSBFIRST, led[x][0]);
digitalWrite(7, 1);
delay(y*z);
}
}
//-------------------------------------------
void hu6() // xanh ngoài vào giữa
{
for (x=5;x>=0;x--)
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, led[x][1]);
shiftOut(A4, 4, LSBFIRST, led[x][0]);
digitalWrite(7, 1);
delay(y*z);
}
}
//-------------------------------------------
void hu8() // xanh nháy 2 bảng
{
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
shiftOut(A4, 4, LSBFIRST, 0b00000000);
digitalWrite(7, 1);
delay(y*z);
digitalWrite(7, 0);
shiftOut(A4, 4, LSBFIRST, 0b11111111);
shiftOut(A4, 4, LSBFIRST, 0b11111111);
digitalWrite(7, 1);
delay(y*z);
}
void translateIR()
{
switch (receiver.decodedIRData.command)
{
//--------------------------------------------------
case 168: // nút play ( chạy )
che_do=1;
break;
//--------------------------------------------------
case 48: // 1
if(a==0)
{
a = 1 ;
lcd.setCursor(0,0);
lcd.print("1");
}
else
{
a = 0 ;
lcd.setCursor(0,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("trai->phai ");
break;
//--------------------------------------------------
case 24: // 2
if(b==0)
{
b = 1 ;
lcd.setCursor(1,0);
lcd.print("1");
}
else
{
b = 0 ;
lcd.setCursor(1,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("phai<-trai");
break;
//--------------------------------------------------
case 122: // 3
if(c==0)
{
c = 1 ;
lcd.setCursor(2,0);
lcd.print("1");
}
else
{
c = 0 ;
lcd.setCursor(2,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("duoi->tren");
break;
//--------------------------------------------------
case 16: // 4
if(d==0)
{
d = 1 ;
lcd.setCursor(3,0);
lcd.print("1");
}
else
{
d = 0 ;
lcd.setCursor(3,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("tren->duoi");
break;
//--------------------------------------------------
case 56: // 5 giữa ra
if(e==0)
{
e = 1 ;
lcd.setCursor(4,0);
lcd.print("1");
}
else
{
e = 0 ;
lcd.setCursor(4,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("<-giua-> ");
break;
//--------------------------------------------------
case 90: // 6 giữa vào
if(f==0)
{
f = 1 ;
lcd.setCursor(5,0);
lcd.print("1");
}
else
{
f = 0 ;
lcd.setCursor(5,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("->giua<- ");
break;
//--------------------------------------------------
case 66: // 7 random
if(g==0)
{
g = 1 ;
lcd.setCursor(6,0);
lcd.print("1");
}
else
{
g = 0 ;
lcd.setCursor(6,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("random ");
break;
//--------------------------------------------------
case 74: // 8 nháy 2 bảng
if(h==0)
{
h = 1 ;
lcd.setCursor(7,0);
lcd.print("1");
}
else
{
h = 0 ;
lcd.setCursor(7,0);
lcd.print("0");
}
lcd.setCursor(0,1);
lcd.print("nhay 2 bang");
break;
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------
case 162: // nút nguồn ( reset )
a=0;
b=0;
c=0;
d=0;
e=0;
f=0;
g=0;
h=0;
lcd.setCursor(0,0);
lcd.print("0000000000000000");
break;
//--------------------------------------------------
case 194: // nút 5
y = y + 20;
lcd.setCursor(0,1);
lcd.print("toc do:");
lcd.setCursor(7,1);
lcd.println(y);
break;
//--------------------------------------------------
case 34: // nút 3
y = y - 20;
lcd.setCursor(0,1);
lcd.print("toc do:");
lcd.setCursor(7,1);
lcd.println(y);
break;
//------------------------------------------------
}
}
void loop()
{
z = 1 ;
digitalWrite(A2,0);
if ( che_do==0 )
{
if (receiver.decode())
{
translateIR();
receiver.resume(); // tiếp tục nhận tín hiệu
}
}
//---------------------------------------------------
if (( a== 1 ) && (che_do == 1 )) // trái sang phải
{
lcd.setCursor(0, 1);
lcd.print("trai->phai ");
hu1();
}
//--------------------------------------------------------
if (( b== 1 ) && (che_do == 1 )) // phải sang trái
{
lcd.setCursor(0, 1);
lcd.print("trai<-phai "); // 12 ( 0 - 11 )
hu2();
}
//--------------------------------------------------------
if (( c== 1 ) && (che_do == 1 )) // dưới lên trên
{
lcd.setCursor(0, 1);
lcd.print("duoi->len ");
hu3();
}
//--------------------------------------------------------
if (( d== 1 ) && (che_do == 1 )) // trên xuống dưới
{
lcd.setCursor(0, 1);
lcd.print("tren->xuong");
hu4();
}
//--------------------------------------------------------
if (( e== 1 ) && (che_do == 1 )) // giữa ra
{
lcd.setCursor(0, 1);
lcd.print("<-giua-> ");
hu5();
//--------------------------------------------------------
}
if (( f== 1 ) && (che_do == 1 )) // ngoài vào giữa
{
lcd.setCursor(0, 1);
lcd.print("->giua<- ");
hu6();
}
//--------------------------------------------------------
if (( h== 1 ) && (che_do == 1 )) // ngoài vào giữa
{
lcd.setCursor(0, 1);
lcd.print("->giua<- ");
hu8();
}
}