#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include "PT2322.h"
PT2322 pt2322;
#define LcdBacklight A1 // Anoda LCD
#define outrelay A2 // out
#define Mode_Select 0
#define In_Select 1
#define In_OP1 2
#define In_OP2 3
#define In_AUX 4
#define btn_delay 10
IRrecv irrecv(A0);
//decode_results results;
byte pilih_char[8][8]={
{ B00111, B01111, B11111, B11111, B11111, B11111, B11111, B11111 },
{ B11111, B11111, B11111, B00000, B00000, B00000, B00000, B00000 },
{ B11100, B11110, B11111, B11111, B11111, B11111, B11111, B11111 },
{ B11111, B11111, B11111, B11111, B11111, B11111, B01111, B00111 },
{ B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111 },
{ B11111, B11111, B11111, B11111, B11111, B11111, B11110, B11100 },
{ B11111, B11111, B11111, B00000, B00000, B00000, B11111, B11111 },
{ B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }
};
const int digit_width=3;
// 0 1 2 3 4 5 6 7 8 9 n f
const char custom_num_top[12][3]={0,1,2, 1,2,32, 1,1,2, 6,6,2, 7, 4,7, 7,6,6, 0,6,6, 1,6, 5, 0,6,2, 0,1,2, 7, 1,2, 0, 6, 1};
const char custom_num_bot[12][3]={3,4,5, 4,7,4 , 0,6,6, 4,4,5, 32,32,7, 4,4,5, 3,4,5, 32,7,32, 3,4,5, 6,6,5, 7,32,7, 7,32,32};
const char stanby_top[5][3]={0,1,1, 4,2,4, 7, 1,2, 7,32,32, 3,4,7};
const char stanby_bot[5][3]={6,6,5, 32,3,4, 7,32,7, 7, 6, 5, 4,4,5};
LiquidCrystal lcd(10, 9, 5, 6, 7, 8); // RS,E,D4,D5,D6,D7
unsigned long time;
int power,inp,volume,a,b,vol_2;
int bass,bass_1,mid,mid_1,treb,treb_1;
int fl,fr,cn,rl,rr,sub,flm,frm,cnm,rlm,rrm,subm;
int tonc,equ,trimvol,func,mute,d3,tonec,smode;
int menu, subMenu,subMenuValue,tampil,teschannel,vol_on,return_d,channel;
boolean ir_on=false;
//=====================================
#include "TimerOne.h"
//#include <ClickEncoder.h>
#include "ClickEncoder.h"
ClickEncoder *encoder;
int16_t last, value;
boolean up=false;
boolean down=false;
boolean tombol=false;
boolean reset=false;
void timerIsr() {
encoder->service();
}
void setup() {
Wire.begin();
Serial.begin(9600);
lcd.begin(16, 2);
encoder=new ClickEncoder(11, 12, 13);
encoder->setAccelerationEnabled(false);
last=encoder->getValue();
Timer1.initialize(500);
Timer1.attachInterrupt(timerIsr);
irrecv.enableIRIn();
pinMode(LcdBacklight, OUTPUT); // Anoda LCD
digitalWrite(LcdBacklight, HIGH);
pinMode(outrelay, OUTPUT);
digitalWrite(outrelay, HIGH);
pinMode(In_OP1, INPUT);
pinMode(In_OP2, INPUT);
pinMode(In_AUX, INPUT);
pinMode(In_Select, OUTPUT);
digitalWrite(In_Select, HIGH);
pt2322.clearRegister();
pt2322.activateInSW();
created_shape();
power=0;
eeprom_read();
delay(100);
power_up();
}
void loop(){
// if (millis()-time>60000 && power==0){ digitalWrite(LcdBacklight, LOW); }
updateLCD();
readButton();
updateButton();
readRotary();
updateRotary();
if (irrecv.decode()){
updateIR();
irrecv.resume();
}
}
void power_up(){
if (power==1){
digitalWrite(LcdBacklight, HIGH);
digitalWrite(outrelay, HIGH);
mute=smode=1; d3=tonec=0;
setFunc();
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print(F(" A2T TECHNO "));
delay(500);
lcd.setCursor(0, 1);
lcd.print(F("5.1 Audio System"));
delay(2000);
lcd.clear();
setInput();
setEqu();
setSmode();
setTone(0,bass);
setTone(1,mid);
setTone(2,treb);
setTrim(0,fl);
setTrim(1,fr);
setTrim(2,cn);
setTrim(3,rl);
setTrim(4,rr);
setTrim(5,sub);
mute=d3=tonec=0;
setFunc();
delay(300);
//=============
subMenu=0;
subMenuValue=0;
tampil=0;
//=============
ir_on=true;
menu=0;
vol_2=volume;
if (vol_2>60) vol_2=60;
volume=0;
for (int i=29; i < vol_2; i++){
volume++;
setVolume();
custom_num_top();
updateLCD();
delay(100);
}
}
else
{
digitalWrite(outrelay, LOW);
mute=1; d3=tonec=0;
setFunc();
delay(100);
menu=100;
ir_on=false;
}
}
void created_shape(){
for(int i=0; i < 8; i++)
lcd.createChar(i, pilih_char[i]);
}
void bigNumer(int aValue, int lokasi){
int x=aValue;
b=x % 10;
a=(x - b) / 10;
lcd.setCursor(lokasi, 0); for(int i=0; i < digit_width; i++) lcd.write(custom_num_top[a][i]);
lcd.setCursor(lokasi, 1); for(int i=0; i < digit_width; i++) lcd.write(custom_num_bot[a][i]);
lcd.setCursor(lokasi+4, 0); for(int i=0; i < digit_width; i++) lcd.write(custom_num_top[b][i]);
lcd.setCursor(lokasi+4, 1); for(int i=0; i < digit_width; i++) lcd.write(custom_num_bot[b][i]);
}
void bigFont(int aValue, int lokasi){
lcd.setCursor(lokasi, 0); for(int i=0; i < digit_width; i++) lcd.write(custom_num_top[0][i]);
lcd.setCursor(lokasi, 1); for(int i=0; i < digit_width; i++) lcd.write(custom_num_bot[0][i]);
if (aValue==0){
lcd.setCursor(lokasi+4, 0); for(int i=0; i < digit_width; i++) lcd.write(custom_num_top[10][i]);
lcd.setCursor(lokasi+4, 1); for(int i=0; i < digit_width; i++) lcd.write(custom_num_bot[10][i]);
} else {
lcd.setCursor(lokasi+4, 0); for(int i=0; i < digit_width; i++) lcd.write(custom_num_top[11][i]);
lcd.setCursor(lokasi+4, 1); for(int i=0; i < digit_width; i++) lcd.write(custom_num_bot[11][i]);
}
}
/*
void stanby(){
int x=0;
for (int j=0; j<5; j++){
lcd.setCursor(x, 0); for(int i=0; i < digit_width; i++) lcd.write(stanby_top[j][i]);
lcd.setCursor(x, 1); for(int i=0; i < digit_width; i++) lcd.write(stanby_bot[j][i]);
x+=3;
}
}*/
void updateLCD(){
switch(menu){
case 0:
//volume --------------------------------------------//
//input ------------
input(inp);
//equalizer---------
equa(equ);
//speaker mode------
spmode(smode);
//volume-----------
lcd.setCursor(0,1);
switch (mute){
case 0: lcd.print(F("VOL>")); bigNumer(volume-29,5);
break;
case 1: lcd.print(F("MUT<")); bigNumer(0,5);
break;
}
lcd.setCursor(3,0); lcd.print(F(" "));
lcd.setCursor(12,0); lcd.print(F(" "));
lcd.setCursor(12,1); lcd.print(F(" "));
break;
case 1:
//input --------------------------------------------//
subMenu=inp;
input(subMenu);
lcd.setCursor(3,0); lcd.print(F("<"));
lcd.setCursor(3,1); lcd.print(F(" "));
lcd.setCursor(12,0); lcd.print(F(" "));
lcd.setCursor(12,1); lcd.print(F(" "));
break;
case 2:
//sound mode --------------------------------------//
subMenu=equ;
equa(subMenu);
lcd.setCursor(3,0); lcd.print(F(" "));
lcd.setCursor(3,1); lcd.print(F(" "));
lcd.setCursor(12,0); lcd.print(F(">"));
lcd.setCursor(12,1); lcd.print(F(" "));
break;
case 3:
//speaker mode -----------------------------------//
subMenu=smode;
spmode(subMenu);
lcd.setCursor(3,0); lcd.print(F(" "));
lcd.setCursor(3,1); lcd.print(F(" "));
lcd.setCursor(12,0); lcd.print(F(" "));
lcd.setCursor(12,1); lcd.print(F(">"));
break;
/*
case 4:
//tone control -------------------------//
subMenu=tonc;
lcd.setCursor(0,0);
lcd.print(F("TONE CTL"));
lcd.setCursor(7,1);
if (tampil==1){if (subMenu!=3) lcd.print(F("> "));}
else if (subMenu!=3) lcd.print(F("< "));
lcd.setCursor(0,1);
switch (subMenu){
case 0: lcd.print(F("Bass ")); bigNumer(bass,9); bass_1=bass; equ=0; break;
case 1: lcd.print(F("Middle ")); bigNumer(mid,9); mid_1=mid; equ=0; break;
case 2: lcd.print(F("Treble ")); bigNumer(treb,9); treb_1=treb; equ=0; break;
case 3:
lcd.print(F("Back "));
lcd.setCursor(9,0);
lcd.print(F(" "));
break;
}
break;
case 5:
subMenu=trimvol;
lcd.setCursor(0,0);
lcd.print(F("TRIM VOL"));
lcd.setCursor(8,1);
if (tampil==1){if (subMenu!=6) lcd.print(F(">"));}
else if (subMenu!=6) lcd.print(F("<"));
lcd.setCursor(0,1);
switch (subMenu){
case 0: lcd.print(F("Front L ")); bigNumer(fl,9); break;
case 1: lcd.print(F("Front R ")); bigNumer(fr,9); break;
case 2: lcd.print(F("Center ")); bigNumer(cn,9); break;
case 3: lcd.print(F("Rear L ")); bigNumer(rl,9); break;
case 4: lcd.print(F("Rear R ")); bigNumer(rr,9); break;
case 5: lcd.print(F("Subwofer")); bigNumer(sub,9); break;
case 6:
lcd.print(F("Back "));
lcd.setCursor(9,0);
lcd.print(F(" "));
break;
}
lcd.setCursor(12,0); lcd.print(F(" "));
lcd.setCursor(12,1); lcd.print(F(" "));
break;
*/
case 6:
subMenu=func;
lcd.setCursor(0,0);
lcd.print(F("FUNCTION "));
lcd.setCursor(8,1);
if (tampil==1){if (subMenu!=3) lcd.print(F(">"));}
else if (subMenu!=3) lcd.print(F("<"));
lcd.setCursor(0,1);
switch (subMenu){
case 0:
lcd.print(F("Surr 3D "));
subMenuValue=d3;
/*switch (subMenuValue){
case 0 ... 1: bigFont(subMenuValue,9); break;
}*/
bigFont(subMenuValue,9);
break;
case 1:
lcd.print(F("Tone Def"));
subMenuValue=tonec;
/*switch (subMenuValue){
case 0 ... 1: bigFont(!subMenuValue,9); break;
}*/
bigFont(!subMenuValue,9);
break;
case 2:
lcd.print(F("Mute "));
subMenuValue=mute;
/*switch (subMenuValue){
case 0 ... 1: bigFont(!subMenuValue,9); break;
}*/
bigFont(!subMenuValue,9);
break;
case 3:
lcd.print(F("Back "));
lcd.setCursor(9,0);
lcd.print(F(" "));
break;
}
break;
case 7:
subMenu=channel;
lcd.setCursor(0, 1); lcd.print(F(" L R C RR RL SW"));
lcd.setCursor(0, 0);
if (tampil==0){
switch (teschannel){
case 0: lcd.print(F("> TES CHANNEL ")); break;
case 1: lcd.print(F("< BACK ")); break;
}
} else if (tampil==1){
switch (subMenu){
case 0: lcd.print(F(" ")); lcd.write(2); lcd.print(F(" ")); break;
case 1: lcd.print(F(" ")); lcd.write(2); lcd.print(F(" ")); break;
case 2: lcd.print(F(" ")); lcd.write(2); lcd.print(F(" ")); break;
case 3: lcd.print(F(" ")); lcd.write(2); lcd.print(F(" ")); break;
case 4: lcd.print(F(" ")); lcd.write(2); lcd.print(F(" ")); break;
case 5: lcd.print(F(" ")); lcd.write(2); lcd.print(F(" ")); break;
case 6: tampil=0; break;
}
}
break;
case 100:
if (digitalRead(LcdBacklight)==LOW){
lcd.setCursor(0, 0); lcd.print(F(" "));
lcd.setCursor(0, 1); lcd.print(F(" "));
} else {
lcd.setCursor(0, 0); lcd.print(F(" S T A N B Y "));
lcd.setCursor(0, 1); lcd.print(F(" *********** "));
}
break;
}
if (power==1){eeprom_update(); eeprom_read();}
}
void readButton(){
ClickEncoder::Button b=encoder->getButton();
if (b != ClickEncoder::Open) {
switch (b) {
case ClickEncoder::Clicked:
tombol=true;
break;
case ClickEncoder::Held:
power=0; menu=100; power_up();
break;
}
}
}
void updateButton(){
if (tombol){
if (power==0){
power=1; power_up();
} else if (power==1){
if (menu==0){menu=1; updateLCD();}
else if (menu==1){menu=2; updateLCD();}
else if (menu==2){menu=3; updateLCD();}
else if (menu==3){lcd.clear(); menu=4; updateLCD();}
else if (menu==4){
if (tampil==0){if (tonc>=0 && tonc<=2) tampil=1;}
else if (tampil==1){
if (tonc>=0 && tonc<=2){menu=4; tampil=0; updateLCD();}
}
if (tonc==3){lcd.clear(); tonc=0; menu=5; updateLCD();}
}
else if (menu==5){
if (tampil==0){if (trimvol>=0 && trimvol<=5) tampil=1;}
else if (tampil==1){
if (trimvol>=0 && trimvol<=5){menu=5; tampil=0; updateLCD();}
}
if (trimvol==6){lcd.clear(); trimvol=0; menu=6; updateLCD();}
}
else if (menu==6){
if (tampil==0){
if (func>=0 && func<=2) tampil=1;
} else if (tampil==1){
if (func>=0 && func<=2) {
menu=6; tampil=0; updateLCD();
}
}
if (func==3){lcd.clear(); func=0; menu=7; updateLCD();}
}
else if (menu==7){
if (tampil==0){
if (teschannel==0) tampil=1;
} else if (tampil==1){
if (teschannel==0){
menu=7; tampil=0; updateLCD();
}
}
if (teschannel==1){lcd.clear(); teschannel=0; menu=0; updateLCD();}
}
btn_cl();
return_delay();
}
tombol=false;
}
else{
}
}
// Down - Up Rotary encoder
void readRotary(){
value += encoder->getValue();
if (value/2 > last) {
last=value/2;
down=true;
delay(100);
} else if (value/2 < last) {
last=value/2;
up=true;
delay(100);
}
}
void updateRotary(){
int aValue=0;
if (up){
if (menu==1){
lcd.setCursor(6, 0); lcd.print(F("MENU"));
lcd.setCursor(6, 1); lcd.print(menu);
lcd.setCursor(9, 1); lcd.print(F("L"));
digitalWrite(In_Select, LOW); delay(500);
digitalWrite(In_Select, HIGH);
lcd.setCursor(9, 1); lcd.print(F("H"));
}
up=false; aValue=1;
}
if (down){ down=false; aValue=-1; }
switch(menu){
case 0: volume += aValue; setVolume(); updateLCD();//Master Volume
break;
// case 1: inp += aValue; setInput(); input(inp);//input selected
case 1: setInput(); input(inp); //input selected
break;
case 2: equ += aValue; setEqu(); equa(equ);//set equaliser
break;
case 3: smode += aValue; setSmode(); spmode(smode);//set mode 2.1 / 5.1
break;
//menu=4, tampil=0, uvalue=0 .. 3
//menu=4, tampil=1, uvalue=-14 .. 14
case 4: //tone control select
if (tampil==0){
tonc += aValue;
if (tonc < 0) tonc = 0;
if (tonc > 3) tonc = 3;
}
lcd.setCursor(0,0);
lcd.print(F("TONE CTL"));
lcd.setCursor(7,1);
if (tampil==1){if (tonc!=3) lcd.print(F("> "));}
else if (tonc!=3) lcd.print(F("< "));
lcd.setCursor(0,1);
//selected tone control
if (tampil==1){
switch (tonc){
case 0: bass += aValue; setTone(tonc,bass); break;
case 1: mid += aValue; setTone(tonc,mid); break;
case 2: treb += aValue; setTone(tonc,treb); break;
case 3: tampil = 0;
lcd.print(F("Back "));
lcd.setCursor(9,0);
lcd.print(F(" "));
break;
}
//if (subMenu>=0 && subMenu<=2) updateLCD();
}
break;
case 5: //trim volume
if (tampil==0){
trimvol += aValue;
if (trimvol < 0) trimvol = 0;
if (trimvol > 6) trimvol = 6;
}
lcd.setCursor(0,0);
lcd.print(F("TRIM VOL"));
lcd.setCursor(8,1);
if (tampil==1){if (trimvol!=6) lcd.print(F(">"));}
else if (trimvol!=6) lcd.print(F("<"));
lcd.setCursor(0,1);
//selected tone control
if (tampil==1){
switch (trimvol){
case 0: fl+=aValue; setTrim(trimvol,fl); break;
case 1: fr+=aValue; setTrim(trimvol,fr); break;
case 2: cn+=aValue; setTrim(trimvol,cn); break;
case 3: rl+=aValue; setTrim(trimvol,rl); break;
case 4: rr+=aValue; setTrim(trimvol,rr); break;
case 5: sub+=aValue; setTrim(trimvol,sub); break;
case 6: tampil=0;
lcd.print(F("Back "));
lcd.setCursor(9,0);
lcd.print(F(" "));
break;
}
lcd.setCursor(12,0); lcd.print(F(" "));
lcd.setCursor(12,1); lcd.print(F(" "));
//if (subMenu>=0 && subMenu<=5) updateLCD();
}
break;
case 6:
if (tampil==0){
func += aValue;
if (func > 3) func=3;
if (func < 0) func=0;
}
if (tampil==1){
subMenu = func;
switch (subMenu){
case 0: d3+=aValue; break;
case 1: tonec+=aValue; break;
case 2: mute+=aValue; break;
case 3: tampil=0; break;
}
if (subMenu>=0 && subMenu<=2){setFunc(); updateLCD();}
}
break;
case 7:
if (tampil==0){
teschannel+=aValue;
if (teschannel > 1) teschannel=0;
if (teschannel < 0) teschannel=1;
}
if (tampil==1){
subMenu = teschannel;
switch (subMenu){
case 0: channel+=aValue; setChannel(); updateLCD(); break;
case 1: tampil=0; break;
}
}
break;
}
}
void input(int smenu){
lcd.setCursor(0,0);
switch (smenu){
case 0: lcd.print(F("OP1")); break;
case 1: lcd.print(F("OP2 ")); break;
case 2: lcd.print(F("AUX")); break;
}
}
void equa(int smenu){
lcd.setCursor(13,0);
switch (smenu){
case 0: lcd.print(F("CUS")); break;
case 1: lcd.print(F("POP")); break;
case 2: lcd.print(F("ROC")); break;
case 3: lcd.print(F("CLA")); break;
case 4: lcd.print(F("DEF")); break;
}
}
void spmode(int smenu){
lcd.setCursor(13,1);
switch (smenu){
case 0: lcd.print(F("2.1")); break;
case 1: lcd.print(F("5.1")); break;
}
}
//pt2322 set volume .......
void setVolume(){
if (volume > 79) volume=79;
if (volume < 29) volume=29;
if (volume==29) pt2322.setFunction(1,d3,tonec);
else pt2322.setFunction(mute,d3,tonec);
pt2322.setVolume(volume);
}
void setTrim(int i, int val){
if (val > 15) val=15;
if (val < 0) val=0;
if (menu==5){
switch (trimvol){
case 0: lcd.print(F("Front L ")); break;
case 1: lcd.print(F("Front R ")); break;
case 2: lcd.print(F("Center ")); break;
case 3: lcd.print(F("Rear L ")); break;
case 4: lcd.print(F("Rear R ")); break;
case 5: lcd.print(F("Subwofer")); break;
}
bigNumer(val,9);
}
switch (trimvol){
case 0: pt2322.setFrontLeft(val); break;
case 1: pt2322.setFrontRight(val); break;
case 2: pt2322.setCenter(val); break;
case 3: pt2322.setRearLeft(val); break;
case 4: pt2322.setRearRight(val); break;
case 5: pt2322.setSubwoofer(val); break;
}
bigNumer(val,9);
}
//pt2322 set function
void setFunc(){
if (d3 > 1) d3=1;
if (d3 < 0) d3=0;
if (tonec > 1) tonec=1;
if (tonec < 0) tonec=0;
if (mute > 1){ mute=1; }
if (mute < 0){ mute=0; }
pt2322.setFunction(mute,d3,tonec);
}
void setTone(int i, int val){
if (val > 15) val=15;
if (val < 0) val=0;
if (menu==4){
switch (tonc){
case 0: lcd.print(F("Bass ")); bass_1=val; equ=0; break;
case 1: lcd.print(F("Middle ")); mid_1=val; equ=0; break;
case 2: lcd.print(F("Treble ")); treb_1=val; equ=0; break;
}
bigNumer(val,9);
}
switch (tonc){
case 0: pt2322.setBass(val); break;
case 1: pt2322.setMiddle(val); break;
case 2: pt2322.setTreble(val); break;
}
}
//pt2323 setting ............
void setInput(){
if (digitalRead(In_OP1)==LOW && digitalRead(In_OP2)==HIGH && digitalRead(In_AUX)==HIGH) inp=0;
else if (digitalRead(In_OP1)==HIGH && digitalRead(In_OP2)==LOW && digitalRead(In_AUX)==HIGH) inp=1;
else if (digitalRead(In_OP1)==HIGH && digitalRead(In_OP2)==HIGH && digitalRead(In_AUX)==LOW) inp=2;
}
void setEqu(){
if (equ > 4) equ=4;
if (equ < 0) equ=0;
switch(equ) {
case 0: bass=bass_1; mid=mid_1; treb=treb_1; break; // custom
case 4: bass=7; mid=7; treb=7; break; // default
case 1: bass=4; mid=10; treb=5; break; // Pop
case 2: bass=11; mid=5; treb=12; break; // Rock
case 3: bass=7; mid=7; treb=5; break; // Classic
}
setTone(0,bass);
setTone(1,mid);
setTone(2,treb);
}
void setSmode(){
if (smode > 1) smode=1;
if (smode < 0) smode=0;
switch(smode){
case 0: // 2.1 (fl,fr,sub=on, cn,rl,rr=off)
flm=fl; frm=fr; rlm=0; rrm=0; cnm=0; subm=sub;
break;
case 1: // 5.1 (fl,fr,cn,rl,rr,sub=on)
flm=fl; frm=fr; rlm=rl; rrm=rr; cnm=cn; subm=sub;
break;
}
pt2322.setFrontLeft(flm);
pt2322.setFrontRight(frm);
pt2322.setRearLeft(rlm);
pt2322.setRearRight(rrm);
pt2322.setCenter(cnm);
pt2322.setSubwoofer(subm);
}
void setChannel(){
if (channel > 6) channel=6;
if (channel < 0) channel=0;
switch(channel){
case 0: // front left (fl=on, fr,sub,cn,rl,rr=off)
flm=fl; frm=0; rlm=0; rrm=0; cnm=0; subm=0;
break;;
case 1: // front right (fr=on, fl,cn,sub,rl,rr=off)
flm=0; frm=fr; rlm=0; rrm=0; cnm=0; subm=0;
break;
case 4: // rear right (rr=on, fl,fr,cn,rl,sub=off)
flm=0; frm=0; rlm=0; rrm=rr; cnm=0; subm=0;
break;
case 3: // rear left (rr=on, fl,fr,cn,rl,sub=off)
flm=0; frm=0; rlm=rl; rrm=0; cnm=0; subm=0;
break;
case 2: // center (cn=of, fl,fr,rl,rr,sub=off)
flm=0; frm=0; rlm=0; rrm=0; cnm=cn; subm=0;
break;
case 5: // subwoofer (sub=on, fl,fr,cn,rl,rr=off)
flm=0; frm=0; rlm=0; rrm=0; cnm=0; subm=sub;
break;
case 6: // All (sub,fl,fr,cn,rl,rr=on)
flm=fl; frm=fr; rlm=rl; rrm=rr; cnm=cn; subm=sub;
break;
}
pt2322.setFrontLeft(flm);
pt2322.setFrontRight(frm);
pt2322.setRearLeft(rlm);
pt2322.setRearRight(rrm);
pt2322.setCenter(cnm);
pt2322.setSubwoofer(subm);
}
//-------------- sub remote control
void updateIR(){
if (ir_on){
if (power=1){
switch (irrecv.decodedIRData.command){
//volume master up
case 72: menu=0; up=true; updateRotary();
//volume master down
case 73: menu=0; down=true; updateRotary();
case 19:
if (tampil==0){
//menu=0; up=true; updateRotary();
} else if (tampil==1){
switch(menu){
case 4: if (tonc>=0 && tonc<=2){up=true; updateRotary();} break;
case 5: if (trimvol>=0 && trimvol<=5){up=true; updateRotary();} break;
case 6: if (func>=0 && func<=2){up=true; updateRotary();} break;
}
}
break;
case 20:
if (tampil==0){
//menu=0; down=true; updateRotary();
} else if (tampil==1){
switch(menu){
case 4: if (tonc>=0 && tonc<=2){down=true; updateRotary();} break;
case 5: if (trimvol>=0 && trimvol<=5){down=true; updateRotary();} break;
case 6: if (func>=0 && func<=2){down=true; updateRotary();} break;
}
}
break;
//Bass nomer 1
case 2: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=4; tampil=1; tonc=0;
break;
//middle nomer 2
case 3: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=4; tampil=1; tonc=1;
break;
//treble nomer 3
case 4: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=4; tampil=1; tonc=2;
break;
//trim front left nomer 4
case 5: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=5; tampil=1; trimvol=0;
break;
//trim front right nomer 5
case 6: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=5; tampil=1; trimvol=1;
break;
//trim center nomer 6
case 7: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=5; tampil=1; trimvol=2;
break;
//trim rear left nomer 7
case 8: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=5; tampil=1; trimvol=3;
break;
//trim rear right nomer 8
case 9: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=5; tampil=1; trimvol=4;
break;
//trim subwoofer nomer 9
case 10: if (menu==7){lcd.clear(); channel=6; setChannel();}
menu=5; tampil=1; trimvol=5;
break;
//back/home
case 67: menu=0; tampil=0; lcd.clear(); break;
//menu
case 22:
menu++;
if (menu>=4 && menu<=8) {
lcd.clear(); if (menu>7) menu=0;
}
updateLCD();
break;
//<<
case 17: menu=7; tampil=1; teschannel=0; down=true; updateRotary(); break;
//>>
case 18: menu=7; tampil=1; teschannel=0; up=true; updateRotary(); break;
//power
case 0: if (power==1) power=0;
menu=100; power_up();
break;
}
ir_cl();
return_delay();
} else {
}
} else {
if (irrecv.decodedIRData.command==0){
power=1; power_up();
}
}
}
//eeprom --------------------------------------------------------------------------------//
void eeprom_update(){
EEPROM.update(0, volume);
EEPROM.update(1, inp);
EEPROM.update(2, equ);
EEPROM.update(3, smode);
EEPROM.update(4, bass);
EEPROM.update(5, mid);
EEPROM.update(6, treb);
EEPROM.update(7, fl);
EEPROM.update(8, fr);
EEPROM.update(9, cn);
EEPROM.update(10, rl);
EEPROM.update(11, rr);
EEPROM.update(12, sub);
EEPROM.update(13, d3);
EEPROM.update(14, tonec);
}
void eeprom_read(){
volume=EEPROM.read(0);
inp=EEPROM.read(1);
equ=EEPROM.read(11);
smode=EEPROM.read(12);
bass=EEPROM.read(2);
mid=EEPROM.read(3);
treb=EEPROM.read(4);
fl=EEPROM.read(5);
fr=EEPROM.read(6);
cn=EEPROM.read(7);
rl=EEPROM.read(8);
rr=EEPROM.read(9);
sub=EEPROM.read(10);
d3=EEPROM.read(11);
tonec=EEPROM.read(12);
}
//end code
/*
int uValue=0;
unsigned long currentMillis = 0;
boolean ret = false;
void updateValue(){
int aValue=0;
//subMenu = 0;
if (up){ up=false; aValue=1; }
if (down){ down=false; aValue=-1; }
/* buat ngetes .......
switch(menu){
//menu=0, tampil=0, uvalue=0 .. 79
case 0: volume += aValue; uValue = volume; //setVolume(); //Master Volume
break;
//menu=1, tampil=0, uvalue=0 .. 2
case 1: inp += aValue; uValue = inp; setInput(); //input selected
break;
//menu=2, tampil=0, uvalue=0 .. 4
case 2: equ += aValue; uValue = equ; setEqu(); //set equaliser
break;
//menu=3, tampil=0, uvalue=0 .. 1
case 3: smode += aValue; uValue = smode; setSmode(); //set mode 2.1 / 5.1
break;
//menu=4, tampil=0, uvalue=0 .. 3
//menu=4, tampil=1, uvalue=-14 .. 14
case 4: //tone control select
if (tampil==0){
tonc += aValue; uValue = tonc;
if (tonc < 0) tonc = 3;
if (tonc > 3) tonc = 0;
}
//selected tone control
if (tampil==1){
subMenu = tonc;
switch (subMenu){
case 0: bass += aValue; uValue = bass; setBass(); break;
case 1: mid += aValue; uValue = mid; setMiddle(); break;
case 2: treb += aValue; uValue = treb; setTreble(); break;
case 3: tampil = 0; break;
}
}
break;
case 5: //trim volume
if (tampil==0){
trimvol += aValue; uValue = trimvol;
if (trimvol < 0) trimvol = 6;
if (trimvol > 6) trimvol = 0;
}
//selected tone control
if (tampil==1){
subMenu = trimvol;
switch (subMenu){
case 0: fl+=aValue; uValue = fl; setFrontLeft(); break;
case 1: fr+=aValue; uValue = fr; setFrontRight(); break;
case 2: cn+=aValue; uValue = cn; setCenter(); break;
case 3: rl+=aValue; uValue = rl; setRearLeft(); break;
case 4: rr+=aValue; uValue = rr; setRearRight(); break;
case 5: sub+=aValue; uValue = sub; setSubwoofer(); break;
case 6: tampil=0; break;
}
}
break;
case 6:
if (tampil==0){
func += aValue; uValue = func;
if (func > 3) func=0;
if (func < 0) func=3;
}
if (tampil==1){
subMenu = func;
switch (subMenu){
case 0: d3+=aValue; uValue = d3; break;
case 1: tonec+=aValue; uValue = tonec; break;
case 2: mute+=aValue; uValue = mute; break;
case 3: tampil=0; break;
}
setFunc();
}
break;
case 7:
if (tampil==0){
teschannel+=aValue; uValue = teschannel;
if (teschannel > 1) teschannel=0;
if (teschannel < 0) teschannel=1;
}
if (tampil==1){
subMenu = teschannel;
switch (subMenu){
case 0: channel+=aValue; uValue = channel; setChannel(); break;
case 1: tampil=0; break;
}
break;
}
}
lcd.setCursor(0,0); lcd.print(F("Menu: "));
lcd.setCursor(5,0); lcd.print(menu);
lcd.setCursor(0,1); lcd.print(F("SMenu: "));
lcd.setCursor(6,1); lcd.print(subMenu);
lcd.setCursor(8,0); lcd.print(F("Tampil: "));
lcd.setCursor(15,0); lcd.print(tampil);
lcd.setCursor(8,1); lcd.print(F("Value: "));
lcd.setCursor(15,1); lcd.print(uValue);
*/
void btn_cl() {
delay(btn_delay);
time=millis();
return_d=1;
}
void ir_cl() {
time=millis();
return_d=1;
}
void return_delay() {
if (millis() - time > 10000 && return_d==1 && menu != 0 && mute==0) {
menu=0;
tampil=0;
subMenu=0;
return_d=0;
lcd.clear();
}
}
/*
TOMBOL
POWER Protocol=NEC Address=0xBF00 Command=0x0 Raw-Data=0xFE01BF00 32 bits LSB first 16580863 FD00FF
MUTE Protocol=NEC Address=0xBF00 Command=0x1 Raw-Data=0xFE01BF00 32 bits LSB first 16613503 FD807F
1 Protocol=NEC Address=0xBF00 Command=0x2 Raw-Data=0xFD02BF00 32 bits LSB first 16597183 FD40BF
2 Protocol=NEC Address=0xBF00 Command=0x3 Raw-Data=0xFC03BF00 32 bits LSB first 16629823 FDC03F
3 Protocol=NEC Address=0xBF00 Command=0x4 Raw-Data=0xFB04BF00 32 bits LSB first 16589023 FD20DF
4 Protocol=NEC Address=0xBF00 Command=0x5 Raw-Data=0xFA05BF00 32 bits LSB first 16621663 FDA05F
5 Protocol=NEC Address=0xBF00 Command=0x6 Raw-Data=0xF906BF00 32 bits LSB first 16605343 FD609F
6 Protocol=NEC Address=0xBF00 Command=0x7 Raw-Data=0xF807BF00 32 bits LSB first 16637983 FDE01F
7 Protocol=NEC Address=0xBF00 Command=0x8 Raw-Data=0xF708BF00 32 bits LSB first 16584943 FD10EF
8 Protocol=NEC Address=0xBF00 Command=0x9 Raw-Data=0xF609BF00 32 bits LSB first 16617583 FD906F
9 Protocol=NEC Address=0xBF00 Command=0xA Raw-Data=0xF50ABF00 32 bits LSB first 16601263 FD50AF
-/-- Protocol=NEC Address=0xBF00 Command=0xB Raw-Data=0xF40BBF00 32 bits LSB first 16633903 FDD02F
0 Protocol=NEC Address=0xBF00 Command=0xC Raw-Data=0xF30CBF00 32 bits LSB first 16593103 FD30CF
REPEAT Protocol=NEC Address=0xBF00 Command=0xD Raw-Data=0xF20DBF00 32 bits LSB first 16625743 FDB04F
P.MODE Protocol=NEC Address=0xBF00 Command=0x41 Raw-Data=0xBE41BF00 32 bits LSB first 16614013 FD827D
S.MODE Protocol=NEC Address=0xBF00 Command=0x42 Raw-Data=0xBD42BF00 32 bits LSB first 16597693 FD42BD
ZOOM Protocol=NEC Address=0xBF00 Command=0x44 Raw-Data=0xBB44BF00 32 bits LSB first 16589533 FD22DD
INFO Protocol=NEC Address=0xBF00 Command=0x40 Raw-Data=0xBF40BF00 32 bits LSB first 16581373 FD02FD
HOME Protocol=NEC Address=0xBF00 Command=0x43 Raw-Data=0xBC43BF00 32 bits LSB first 16630333 FDC23D
LEFT Protocol=NEC Address=0xBF00 Command=0x11 Raw-Data=0xEE11BF00 32 bits LSB first 16615543 FD8877
RIGHT Protocol=NEC Address=0xBF00 Command=0x12 Raw-Data=0xED12BF00 32 bits LSB first 16599223 FD48B7
UP Protocol=NEC Address=0xBF00 Command=0x13 Raw-Data=0xEC13BF00 32 bits LSB first 16631863 FDC837
ENTER Protocol=NEC Address=0xBF00 Command=0x10 Raw-Data=0xEF10BF00 32 bits LSB first 16582903 FD08F7
DOWN Protocol=NEC Address=0xBF00 Command=0x14 Raw-Data=0xEB14BF00 32 bits LSB first 16591063 FD28D7
MENU Protocol=NEC Address=0xBF00 Command=0x16 Raw-Data=0xE916BF00 32 bits LSB first 16607383 FD6897
EXIT Protocol=NEC Address=0xBF00 Command=0x15 Raw-Data=0xEA15BF00 32 bits LSB first 16623703 FDA857
VOL + Protocol=NEC Address=0xBF00 Command=0x48 Raw-Data=0xB748BF00 32 bits LSB first 16585453 FD12ED
VOL - Protocol=NEC Address=0xBF00 Command=0x49 Raw-Data=0xB649BF00 32 bits LSB first 16618093 FD926D
INPUT Protocol=NEC Address=0xBF00 Command=0xF Raw-Data=0xF00FBF00 32 bits LSB first 16642063 FDF00F
EPG Protocol=NEC Address=0xBF00 Command=0x62 Raw-Data=0x9D62BF00 32 bits LSB first 16598713 FD46B9
AUDIO Protocol=NEC Address=0xBF00 Command=0x61 Raw-Data=0x9E61BF00 32 bits LSB first 16615033 FD8679
CH + Protocol=NEC Address=0xBF00 Command=0x4A Raw-Data=0xB54ABF00 32 bits LSB first 16601773 FD52AD
CH - Protocol=NEC Address=0xBF00 Command=0x4B Raw-Data=0xB44BBF00 32 bits LSB first 16634413 FDD22D
*/