#define IR_1 0x2FDD02F // Кнопка VOL+
#define IR_2 0x2FD32CD // Кнопка VOL-
#define IR_3 0x2FD5566 // Кнопка MUTE
#define IR_4 0x2FD8888 // Кнопка STANDBY
#define IR_5 0x2FDD02F // Кнопка DVD
#define IR_6 0x2FD32CD // Кнопка TV
#define IR_7 0x2FD5566 // Кнопка GAME
#define IR_8 0x2FD8888 // Кнопка CD/MP3
#include <Wire.h>
#include <PT2323.h>
#include <PT2258.h>
#include <EEPROM.h>
#include <boarddefs.h>
#include <IRremote.h>
IRrecv irrecv(0); // указываем вывод модуля IR приемника (IR-IN)
decode_results ir;
PT2323 pt0;
PT2258 pt;
int vol,vol_old,in,mute,standby=1;
byte w,gr1,gr2,moto;
unsigned long time;
void setup() {
irrecv.enableIRIn();
Serial.begin(9600);
pinMode(A0,INPUT);// вход регулятора громкости 0...5 В
pinMode(A1,INPUT);// кнопка MUTE
pinMode(2,OUTPUT);// ВЫХОД УПР. MUTE
pinMode(A2,INPUT);// кнопка STANDBY
pinMode(3,OUTPUT);// ВЫХОД УПР. SRANDBY
//////// IN ////////////////////////////////
pinMode(4,INPUT); // in DVD
pinMode(5,INPUT); // in TV
pinMode(6,INPUT); // in GAME
pinMode(7,INPUT); // in CD/MP3
/////// LED OUTPUT /////////////////////////////
pinMode(8,OUTPUT); // in DVD
pinMode(9,OUTPUT); // in TV
pinMode(10,OUTPUT);// in GAME
pinMode(11,OUTPUT);// in CD/MP3
pinMode(12,OUTPUT);// MOUT+
pinMode(13,OUTPUT);// MOUT-
Wire.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
vol = EEPROM.read(0)-79;in = EEPROM.read(1);
audio1();
audio();
}
void loop() {
///////////////////// IR ////////////////////////////////////////////////////////////////////////////////////////
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();delay(100);time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
if(ir.value==IR_1){vol++;gr1=1;gr2=0;vol_func();audio1();audio();moto=1;}// кнопка VOL+
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;vol_func();audio1();audio();moto=1;}// кнопка >>>>>>
if(ir.value==IR_2){vol--;gr1=0;gr2=1;vol_func();audio1();audio();moto=1;}// кнопка VOL-
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;vol_func();audio1();audio();moto=1;}// кнопка <<<<<<
if(ir.value==IR_3&&mute==0){mute=1;audio1();audio();digitalWrite(2,HIGH);delay(300);}
if(ir.value==IR_3&&mute==1){mute=0;audio1();audio();digitalWrite(2,LOW);delay(300);}
if(ir.value==IR_4&&standby==1){standby=1;digitalWrite(3,HIGH);delay(300);}
if(ir.value==IR_4&&standby==0){standby=0;digitalWrite(3,LOW);delay(300);}
if(ir.value==IR_5){in=4;audio1();audio();delay(300);}
if(ir.value==IR_6){in=0;audio1();audio();delay(300);}
if(ir.value==IR_7){in=1;audio1();audio();delay(300);}
if(ir.value==IR_8){in=2;audio1();audio();delay(300);}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////// MUTE /////////////////////////////////////////////////////////////////////////////////////////
if(analogRead(A1)>900&&mute==0){mute=1;digitalWrite(2,HIGH);audio1();audio();delay(300);}
if(analogRead(A1)>900&&mute==1){mute=0;digitalWrite(2,LOW);audio1();audio();delay(300);}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////// STANDBY /////////////////////////////////////////////////////////////////////////////////////////
if(analogRead(A2)>900&&standby==1){standby=1;digitalWrite(3,HIGH);delay(300);} // усилитель вкл
if(analogRead(A2)>900&&standby==0){standby=0;digitalWrite(3,LOW);delay(300);} // усилитель выкл
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////// INPUT /////////////////////////////////////////////////////////////////////////////////////////////
if(digitalRead(4)==HIGH){in=4;audio1();audio();w=1;time=millis();delay(300);} // in DVD
if(digitalRead(5)==HIGH){in=0;audio1();audio();w=1;time=millis();delay(300);} // in TV
if(digitalRead(6)==HIGH){in=1;audio1();audio();w=1;time=millis();delay(300);} // in GAME
if(digitalRead(7)==HIGH){in=2;audio1();audio();w=1;time=millis();delay(300);} // in CD/MP3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
switch(in){
case 4: digitalWrite(8,HIGH);digitalWrite(9,LOW);digitalWrite(10,LOW);digitalWrite(11,LOW);break;
case 0: digitalWrite(8,LOW);digitalWrite(9,HIGH);digitalWrite(10,LOW);digitalWrite(11,LOW);break;
case 1: digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(10,HIGH);digitalWrite(11,LOW);break;
case 2: digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(10,LOW);digitalWrite(11,HIGH);break;
}
if(moto==1){
if(vol>map(analogRead(A0),0,1023,0,79)){digitalWrite(12,HIGH);digitalWrite(13,LOW);}
else if(vol<map(analogRead(A0),0,1023,0,79)){digitalWrite(12,LOW);digitalWrite(13,HIGH);}
else{digitalWrite(12,LOW);digitalWrite(13,LOW);moto=0;}
}
if(moto==0){
vol_old = vol;
vol = map(analogRead(A0),0,1023,0,79);
if(vol_old!=vol){audio1();audio();w=1;time=millis();}
}
////// EEPROM ///////////////////////////////////////////////
if(millis()-time>10000 && w==1){EEPROM.update(0,vol+79);EEPROM.update(1,in);}
}
void vol_func(){if(vol>79){vol=79;}if(vol<0){vol=0;}}
void audio1(){
pt0.setInput(in);
pt0.setMute(0,0,0,0,0,0,0);
pt0.setFeature(1,1);
}
void audio(){
pt.setVolume(vol); // int 0...79
// pt.setVol1(0); // int 0...79
// pt.setVol2(0); // int 0...79
// pt.setVol3(0); // int 0...79
// pt.setVol4(0); // int 0...79
// pt.setVol5(0); // int 0...79
// pt.setVol6(0); // int 0...79
pt.setMute(mute); // mute 0 - off / 1 - on
}