Re: M62446
У меня все работает
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Аудиопроцессоры → M62446
У меня все работает
в скетче поменял подключение дисплея с i2c на обычное,и появляется no matching function for call to 'LiquidCrystal::init()'
Не все функции относящиеся к LCD1602_I2C удалены или заменены
что еще необходимо сделать?
Опубликуйте измененный код
// M62446
#define LATCH 2
#define DATA 3
#define CLOCK 4
// ENCODER
#define ENC_DT 9
#define ENC_CLK 8
#define ENC_SW 10
// BUTTON
#define ATT A0
#define MUTE A1
#define STANDBY A2
// выход упр. STANDBY
#define ST_OUT 13
// коды кнопок ИК пульта
#define MENU 0x2FDB24D // button encoder
#define UP 0x2FDD02F // >>>
#define DW 0x2FD32CD // <<<
#define POWER_IR 0x2FD00FF // POWER
#define MUTE_IR 0x2FDB04F // MUTE
#define ATT_IR 0x2FDF00F // ATT
// ИК датчик
#define IR 12
#include <Wire.h>
#include <LiquidCrystal.h> // http://forum.rcl-radio.ru/misc.php?acti … download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/ … ncoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <boarddefs.h> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/ … remote.zip
LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7; // Устанавливаем дисплей
IRrecv irrecv(IR); // указываем вывод модуля IR приемника
Encoder myEnc(ENC_DT, ENC_CLK);
decode_results ir;
byte v1[8] = {0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111};
byte v2[8] = {0b00111,0b00111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
byte v3[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v4[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v5[8] = {0b11100,0b11100,0b00000,0b00000,0b00000,0b00000,0b11100,0b11100};
byte v6[8] = {0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100};
byte v7[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00111,0b00111};
byte v8[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
long times,oldPosition = -999,newPosition;
int vol,bass,treb,att_l,att_r,att_c,att_sw,att_sl,att_sr,mute,power;
int menu,treb_print,bass_print,menu0=100;
bool gr1,gr2;
byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,w,w2,x;
void setup() {
irrecv.enableIRIn();lcd.init();lcd.backlight();Serial.begin(9600);
MsTimer2::set(3, to_Timer);MsTimer2::start();
pinMode(ENC_SW,INPUT);
pinMode(LATCH, OUTPUT);digitalWrite(LATCH, LOW);
pinMode(DATA, OUTPUT);digitalWrite(DATA, LOW);
pinMode(CLOCK, OUTPUT);digitalWrite(CLOCK, LOW);
pinMode(ATT,INPUT_PULLUP); // КНОПКА ATT
pinMode(MUTE,INPUT_PULLUP); // КНОПКА MUTE
pinMode(STANDBY,INPUT_PULLUP); // КНОПКА STANDBY
pinMode(ST_OUT,OUTPUT);
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
lcd.setCursor(0,0);lcd.print("Sound Processor");lcd.setCursor(5,1);lcd.print("M62446"); delay(2000);lcd.clear();
vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;
att_l = EEPROM.read(3);att_r = EEPROM.read(4);att_c = EEPROM.read(5);att_sw = EEPROM.read(6);att_sl = EEPROM.read(7);att_sr = EEPROM.read(8);
audio();
}
void loop() {
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
if(power==0){
if(digitalRead(ENC_SW)==LOW||ir.value==MENU){menu++;menu0=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu>2){menu=0;}}
if(digitalRead(ATT)==LOW||ir.value==ATT_IR){menu0++;menu=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu0>5){menu0=0;}}
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==0){mute=1;menu=100;menu0=100;cl();lcd.setCursor(6,0);lcd.print("MUTE");audio_mute();delay(300);}// mute on
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==1){mute=0;cl();times=millis();menu=0;myEnc.write(0);audio();}// mute off
}
// power
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==0){power=1;cl();audio_mute();lcd.setCursor(3,0);lcd.print("POWER OFF");menu=100;menu0=100;delay(3000);lcd.noBacklight();digitalWrite(ST_OUT,HIGH);}// power off
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==1){power=0;lcd.backlight();cl();lcd.setCursor(3,0);lcd.print("POWER ON ");myEnc.write(0);digitalWrite(ST_OUT,LOW);delay(3000);audio();menu=0;cl();}// power on
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if(menu==0){
if(ir.value==DW){vol++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==UP){vol--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
vol=vol-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
a[0]= (50-vol)/10;a[1]=(50-vol)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
if(mute==0){lcd.setCursor(0,0);lcd.print("VOLUME");}else{lcd.setCursor(0,0);lcd.print("MUTE");}
lcd.setCursor(0,1);lcd.print("CONTROL");
}
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if(menu==1){
if(ir.value==UP){treb++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >
if(ir.value==DW){treb--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_func();audio();}
if(treb<0){treb_print = abs(treb)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{treb_print = treb*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= treb_print/10;a[1]=treb_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("TREBLE");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// BASS ///////////////////////////////////////////////////////////////////
if(menu==2){
if(ir.value==UP){bass++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >
if(ir.value==DW){bass--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bass_func();audio();}
if(bass<0){bass_print = abs(bass)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{bass_print = bass*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= bass_print/10;a[1]=bass_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("BASS");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if(menu0==0){menu=100;
if(ir.value==UP){att_l++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_l++;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_l--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_l--;gr1=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_l=att_l+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_l_func();audio();}
a[0]= (att_l)/10;a[1]=(att_l)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("LEFT");
}
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if(menu0==1){menu=100;
if(ir.value==UP){att_r++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_r++;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_r--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_r--;gr1=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_r=att_r+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_r_func();audio();}
a[0]= (att_r)/10;a[1]=(att_r)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("RIGHT");
}
////////////// ATT_C ///////////////////////////////////////////////////////////////////
if(menu0==2){menu=100;
if(ir.value==UP){att_c++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_c++;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_c--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_c--;gr1=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_c=att_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_c_func();audio();}
a[0]= (att_c)/10;a[1]=(att_c)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("CENTER");
}
////////////// ATT_SW ///////////////////////////////////////////////////////////////////
if(menu0==3){menu=100;
if(ir.value==UP){att_sw++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sw++;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sw--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sw--;gr1=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sw=att_sw+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sw_func();audio();}
a[0]= (att_sw)/10;a[1]=(att_sw)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUBWOOFER");
}
////////////// ATT_SL ///////////////////////////////////////////////////////////////////
if(menu0==4){menu=100;
if(ir.value==UP){att_sl++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sl++;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sl--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sl--;gr1=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sl=att_sl+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sl_func();audio();}
a[0]= (att_sl)/10;a[1]=(att_sl)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. LEFT");
}
////////////// ATT_SR ///////////////////////////////////////////////////////////////////
if(menu0==5){menu=100;
if(ir.value==UP){att_sr++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sr++;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sr--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sr--;gr1=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sr=att_sr+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sr_func();audio();}
a[0]= (att_sr)/10;a[1]=(att_sr)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. RIGHT");
}
if(millis()-times>10000&&w==1&&mute==0&&power==0){
menu=0;menu0=100;w=0;cl();
EEPROM.update(0,vol);EEPROM.update(1,bass+7);EEPROM.update(2,treb+7);
EEPROM.update(3,att_l);EEPROM.update(4,att_r);EEPROM.update(5,att_c);
EEPROM.update(6,att_sw);EEPROM.update(7,att_sl);EEPROM.update(8,att_sr);
}
}
void vol_func(){if(vol>50){vol=50;}if(vol<0){vol=0;}}
void treb_func(){if(treb<-7){treb=-7;}if(treb>7){treb=7;}}
void bass_func(){if(bass<-7){bass=-7;}if(bass>7){bass=7;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}
void att_l_func(){if(att_l>19){att_l=19;}if(att_l<0){att_l=0;}}
void att_r_func(){if(att_r>19){att_r=19;}if(att_r<0){att_r=0;}}
void att_c_func(){if(att_c>19){att_c=19;}if(att_c<0){att_c=0;}}
void att_sw_func(){if(att_sw>19){att_sw=19;}if(att_sw<0){att_sw=0;}}
void att_sr_func(){if(att_sr>19){att_sr=19;}if(att_sr<0){att_sr=0;}}
void att_sl_func(){if(att_sl>19){att_sl=19;}if(att_sl<0){att_sl=0;}}
void digit(){switch(a[x]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
byte_1(treb,0b0000,bass,0);// treb -7...7, port 0b0000, bass -7...7, bypass = 0
byte_2(vol+att_l,vol+att_r);// 0...95 = 0...-95 dB mute = 111
byte_3(vol+att_c,vol+att_sw);// 0...95 = 0...-95 dB mute = 111
byte_4(vol+att_sl,vol+att_sr);// 0...95 = 0...-95 dB mute = 111
}
void audio_mute(){
byte_2(111,111);
byte_3(111,111);
byte_4(111,111);
}
void byte_1(int treb, byte port, int bass, bool by_pass){
// treb int -7...+7 === -14...+14 dB
// bass int -7...+7 === -14...+14 dB
// byte port 0b0000....0b1111
// by_pass === 0 TONE | 1 BYPASS
switch(treb){
case -7: treb = 0b1111;break;
case -6: treb = 0b1101;break;
case -5: treb = 0b1110;break;
case -4: treb = 0b1100;break;
case -3: treb = 0b1011;break;
case -2: treb = 0b1010;break;
case -1: treb = 0b1001;break;
case 0: treb = 0b0000;break;
case 1: treb = 0b0001;break;
case 2: treb = 0b0010;break;
case 3: treb = 0b0011;break;
case 4: treb = 0b0100;break;
case 5: treb = 0b0110;break;
case 6: treb = 0b0101;break;
case 7: treb = 0b0111;break;
}
switch(bass){
case -7: bass = 0b1111;break;
case -6: bass = 0b1101;break;
case -5: bass = 0b1110;break;
case -4: bass = 0b1100;break;
case -3: bass = 0b1011;break;
case -2: bass = 0b1010;break;
case -1: bass = 0b1001;break;
case 0: bass = 0b0000;break;
case 1: bass = 0b0001;break;
case 2: bass = 0b0010;break;
case 3: bass = 0b0011;break;
case 4: bass = 0b0100;break;
case 5: bass = 0b0110;break;
case 6: bass = 0b0101;break;
case 7: bass = 0b0111;break;
}
unsigned int data_byte = (treb<<12)|(port<<8)|(bass<<4)|(by_pass<<2)|0b00;
writeByte(data_byte);
}
void byte_2(int vol_l, int vol_r){
// int vol 0...95 === 0...-95 dB mute=111
if(vol_l>79){vol_l=vol_l+16;}
if(vol_r>79){vol_r=vol_r+16;}
unsigned int data_byte = (vol_l<<9)|(vol_r<<2)|0b01;
writeByte(data_byte);
}
void byte_3(int vol_c, int vol_sw){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_c>79){vol_c=vol_c+16;}
if(vol_sw>79){vol_sw=vol_sw+16;}
unsigned int data_byte = (vol_c<<9)|(vol_sw<<2)|0b10;
writeByte(data_byte);
}
void byte_4(int vol_sl, int vol_sr){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_sl>79){vol_sl=vol_sl+16;}
if(vol_sr>79){vol_sr=vol_sr+16;}
unsigned int data_byte = (vol_sl<<9)|(vol_sr<<2)|0b11;
writeByte(data_byte);
}
void writeByte(uint16_t data){
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
for (int i = 15; i >= 0; i--) {
digitalWrite(DATA, (data >> i) & 1); delayMicroseconds(3);
digitalWrite(CLOCK, HIGH); delayMicroseconds(3);
digitalWrite(CLOCK, LOW); delayMicroseconds(3);
}
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
}
Компиляция проходит, но у Вас пересекаются выводы lcd и M62446
// M62446
#define LATCH 2
#define DATA 3
#define CLOCK 4
// ENCODER
#define ENC_DT 9
#define ENC_CLK 8
#define ENC_SW 10
// BUTTON
#define ATT A0
#define MUTE A1
#define STANDBY A2
// выход упр. STANDBY
#define ST_OUT 13
// коды кнопок ИК пульта
#define MENU 0x2FDB24D // button encoder
#define UP 0x2FDD02F // >>>
#define DW 0x2FD32CD // <<<
#define POWER_IR 0x2FD00FF // POWER
#define MUTE_IR 0x2FDB04F // MUTE
#define ATT_IR 0x2FDF00F // ATT
// ИК датчик
#define IR 12
#include <Wire.h>
#include <LiquidCrystal.h> // http://forum.rcl-radio.ru/misc.php?acti … download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/ … ncoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <boarddefs.h> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/ … remote.zip
LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7; // Устанавливаем дисплей
IRrecv irrecv(IR); // указываем вывод модуля IR приемника
Encoder myEnc(ENC_DT, ENC_CLK);
decode_results ir;
byte v1[8] = {0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111};
byte v2[8] = {0b00111,0b00111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
byte v3[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v4[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v5[8] = {0b11100,0b11100,0b00000,0b00000,0b00000,0b00000,0b11100,0b11100};
byte v6[8] = {0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100};
byte v7[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00111,0b00111};
byte v8[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
long times,oldPosition = -999,newPosition;
int vol,bass,treb,att_l,att_r,att_c,att_sw,att_sl,att_sr,mute,power;
int menu,treb_print,bass_print,menu0=100;
bool gr1,gr2;
byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,w,w2,x;
void setup() {
irrecv.enableIRIn();lcd.begin(16, 2); Serial.begin(9600);
MsTimer2::set(3, to_Timer);MsTimer2::start();
pinMode(ENC_SW,INPUT);
pinMode(LATCH, OUTPUT);digitalWrite(LATCH, LOW);
pinMode(DATA, OUTPUT);digitalWrite(DATA, LOW);
pinMode(CLOCK, OUTPUT);digitalWrite(CLOCK, LOW);
pinMode(ATT,INPUT_PULLUP); // КНОПКА ATT
pinMode(MUTE,INPUT_PULLUP); // КНОПКА MUTE
pinMode(STANDBY,INPUT_PULLUP); // КНОПКА STANDBY
pinMode(ST_OUT,OUTPUT);
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
lcd.setCursor(0,0);lcd.print("Sound Processor");lcd.setCursor(5,1);lcd.print("M62446"); delay(2000);lcd.clear();
vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;
att_l = EEPROM.read(3);att_r = EEPROM.read(4);att_c = EEPROM.read(5);att_sw = EEPROM.read(6);att_sl = EEPROM.read(7);att_sr = EEPROM.read(8);
audio();
}
void loop() {
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
if(power==0){
if(digitalRead(ENC_SW)==LOW||ir.value==MENU){menu++;menu0=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu>2){menu=0;}}
if(digitalRead(ATT)==LOW||ir.value==ATT_IR){menu0++;menu=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu0>5){menu0=0;}}
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==0){mute=1;menu=100;menu0=100;cl();lcd.setCursor(6,0);lcd.print("MUTE");audio_mute();delay(300);}// mute on
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==1){mute=0;cl();times=millis();menu=0;myEnc.write(0);audio();}// mute off
}
// power
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==0){power=1;cl();audio_mute();lcd.setCursor(3,0);lcd.print("POWER OFF");menu=100;menu0=100;delay(3000);digitalWrite(ST_OUT,HIGH);}// power off
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==1){power=0;cl();lcd.setCursor(3,0);lcd.print("POWER ON ");myEnc.write(0);digitalWrite(ST_OUT,LOW);delay(3000);audio();menu=0;cl();}// power on
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if(menu==0){
if(ir.value==DW){vol++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==UP){vol--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
vol=vol-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
a[0]= (50-vol)/10;a[1]=(50-vol)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
if(mute==0){lcd.setCursor(0,0);lcd.print("VOLUME");}else{lcd.setCursor(0,0);lcd.print("MUTE");}
lcd.setCursor(0,1);lcd.print("CONTROL");
}
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if(menu==1){
if(ir.value==UP){treb++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >
if(ir.value==DW){treb--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_func();audio();}
if(treb<0){treb_print = abs(treb)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{treb_print = treb*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= treb_print/10;a[1]=treb_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("TREBLE");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// BASS ///////////////////////////////////////////////////////////////////
if(menu==2){
if(ir.value==UP){bass++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >
if(ir.value==DW){bass--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bass_func();audio();}
if(bass<0){bass_print = abs(bass)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{bass_print = bass*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= bass_print/10;a[1]=bass_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("BASS");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if(menu0==0){menu=100;
if(ir.value==UP){att_l++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_l++;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_l--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_l--;gr1=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_l=att_l+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_l_func();audio();}
a[0]= (att_l)/10;a[1]=(att_l)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("LEFT");
}
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if(menu0==1){menu=100;
if(ir.value==UP){att_r++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_r++;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_r--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_r--;gr1=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_r=att_r+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_r_func();audio();}
a[0]= (att_r)/10;a[1]=(att_r)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("RIGHT");
}
////////////// ATT_C ///////////////////////////////////////////////////////////////////
if(menu0==2){menu=100;
if(ir.value==UP){att_c++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_c++;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_c--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_c--;gr1=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_c=att_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_c_func();audio();}
a[0]= (att_c)/10;a[1]=(att_c)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("CENTER");
}
////////////// ATT_SW ///////////////////////////////////////////////////////////////////
if(menu0==3){menu=100;
if(ir.value==UP){att_sw++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sw++;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sw--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sw--;gr1=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sw=att_sw+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sw_func();audio();}
a[0]= (att_sw)/10;a[1]=(att_sw)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUBWOOFER");
}
////////////// ATT_SL ///////////////////////////////////////////////////////////////////
if(menu0==4){menu=100;
if(ir.value==UP){att_sl++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sl++;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sl--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sl--;gr1=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sl=att_sl+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sl_func();audio();}
a[0]= (att_sl)/10;a[1]=(att_sl)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. LEFT");
}
////////////// ATT_SR ///////////////////////////////////////////////////////////////////
if(menu0==5){menu=100;
if(ir.value==UP){att_sr++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sr++;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sr--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sr--;gr1=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sr=att_sr+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sr_func();audio();}
a[0]= (att_sr)/10;a[1]=(att_sr)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. RIGHT");
}
if(millis()-times>10000&&w==1&&mute==0&&power==0){
menu=0;menu0=100;w=0;cl();
EEPROM.update(0,vol);EEPROM.update(1,bass+7);EEPROM.update(2,treb+7);
EEPROM.update(3,att_l);EEPROM.update(4,att_r);EEPROM.update(5,att_c);
EEPROM.update(6,att_sw);EEPROM.update(7,att_sl);EEPROM.update(8,att_sr);
}
}
void vol_func(){if(vol>50){vol=50;}if(vol<0){vol=0;}}
void treb_func(){if(treb<-7){treb=-7;}if(treb>7){treb=7;}}
void bass_func(){if(bass<-7){bass=-7;}if(bass>7){bass=7;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}
void att_l_func(){if(att_l>19){att_l=19;}if(att_l<0){att_l=0;}}
void att_r_func(){if(att_r>19){att_r=19;}if(att_r<0){att_r=0;}}
void att_c_func(){if(att_c>19){att_c=19;}if(att_c<0){att_c=0;}}
void att_sw_func(){if(att_sw>19){att_sw=19;}if(att_sw<0){att_sw=0;}}
void att_sr_func(){if(att_sr>19){att_sr=19;}if(att_sr<0){att_sr=0;}}
void att_sl_func(){if(att_sl>19){att_sl=19;}if(att_sl<0){att_sl=0;}}
void digit(){switch(a[x]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
byte_1(treb,0b0000,bass,0);// treb -7...7, port 0b0000, bass -7...7, bypass = 0
byte_2(vol+att_l,vol+att_r);// 0...95 = 0...-95 dB mute = 111
byte_3(vol+att_c,vol+att_sw);// 0...95 = 0...-95 dB mute = 111
byte_4(vol+att_sl,vol+att_sr);// 0...95 = 0...-95 dB mute = 111
}
void audio_mute(){
byte_2(111,111);
byte_3(111,111);
byte_4(111,111);
}
void byte_1(int treb, byte port, int bass, bool by_pass){
// treb int -7...+7 === -14...+14 dB
// bass int -7...+7 === -14...+14 dB
// byte port 0b0000....0b1111
// by_pass === 0 TONE | 1 BYPASS
switch(treb){
case -7: treb = 0b1111;break;
case -6: treb = 0b1101;break;
case -5: treb = 0b1110;break;
case -4: treb = 0b1100;break;
case -3: treb = 0b1011;break;
case -2: treb = 0b1010;break;
case -1: treb = 0b1001;break;
case 0: treb = 0b0000;break;
case 1: treb = 0b0001;break;
case 2: treb = 0b0010;break;
case 3: treb = 0b0011;break;
case 4: treb = 0b0100;break;
case 5: treb = 0b0110;break;
case 6: treb = 0b0101;break;
case 7: treb = 0b0111;break;
}
switch(bass){
case -7: bass = 0b1111;break;
case -6: bass = 0b1101;break;
case -5: bass = 0b1110;break;
case -4: bass = 0b1100;break;
case -3: bass = 0b1011;break;
case -2: bass = 0b1010;break;
case -1: bass = 0b1001;break;
case 0: bass = 0b0000;break;
case 1: bass = 0b0001;break;
case 2: bass = 0b0010;break;
case 3: bass = 0b0011;break;
case 4: bass = 0b0100;break;
case 5: bass = 0b0110;break;
case 6: bass = 0b0101;break;
case 7: bass = 0b0111;break;
}
unsigned int data_byte = (treb<<12)|(port<<8)|(bass<<4)|(by_pass<<2)|0b00;
writeByte(data_byte);
}
void byte_2(int vol_l, int vol_r){
// int vol 0...95 === 0...-95 dB mute=111
if(vol_l>79){vol_l=vol_l+16;}
if(vol_r>79){vol_r=vol_r+16;}
unsigned int data_byte = (vol_l<<9)|(vol_r<<2)|0b01;
writeByte(data_byte);
}
void byte_3(int vol_c, int vol_sw){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_c>79){vol_c=vol_c+16;}
if(vol_sw>79){vol_sw=vol_sw+16;}
unsigned int data_byte = (vol_c<<9)|(vol_sw<<2)|0b10;
writeByte(data_byte);
}
void byte_4(int vol_sl, int vol_sr){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_sl>79){vol_sl=vol_sl+16;}
if(vol_sr>79){vol_sr=vol_sr+16;}
unsigned int data_byte = (vol_sl<<9)|(vol_sr<<2)|0b11;
writeByte(data_byte);
}
void writeByte(uint16_t data){
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
for (int i = 15; i >= 0; i--) {
digitalWrite(DATA, (data >> i) & 1); delayMicroseconds(3);
digitalWrite(CLOCK, HIGH); delayMicroseconds(3);
digitalWrite(CLOCK, LOW); delayMicroseconds(3);
}
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
}Огромное спасибо! всё заработало. осталось два вопроса: можно ли дописать регулировку нч/вч с пульта отдельными кнопками? и сделать переключение входов с пульта и с кнопки (кусок схемы на CD4053 я присылал чуть ранее на форум), может задействовать какой-то пин ардуинки?

Тестируйте, перед загрузкой добавьте коды кнопок пульта
переключение входов с пульта и с кнопки (кусок схемы на CD4053 я присылал чуть ранее на форум
- мне нужен алгоритм работы управляющих сигналов
// M62446
#define LATCH 2
#define DATA 3
#define CLOCK 4
// ENCODER
#define ENC_DT 9
#define ENC_CLK 8
#define ENC_SW 10
// BUTTON
#define ATT A0
#define MUTE A1
#define STANDBY A2
// выход упр. STANDBY
#define ST_OUT 13
// коды кнопок ИК пульта
#define MENU 0x2FDB24D // button encoder
#define UP 0x2FDD02F // >>>
#define DW 0x2FD32CD // <<<
#define POWER_IR 0x2FD00FF // POWER
#define MUTE_IR 0x2FDB04F // MUTE
#define ATT_IR 0x2FDF00F // ATT
#define BASS_UP_IR 0x2FDF00F // bassUP
#define BASS_DW_IR 0x2FDF00F // bassDW
#define TREB_UP_IR 0x2FDF00F // trebUP
#define TREB_DW_IR 0x2FDF00F // trebDW
// ИК датчик
#define IR 12
#include <Wire.h>
#include <LiquidCrystal.h> // http://forum.rcl-radio.ru/misc.php?acti … download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/ … ncoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <boarddefs.h> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/ … remote.zip
LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7; // Устанавливаем дисплей
IRrecv irrecv(IR); // указываем вывод модуля IR приемника
Encoder myEnc(ENC_DT, ENC_CLK);
decode_results ir;
byte v1[8] = {0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111};
byte v2[8] = {0b00111,0b00111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
byte v3[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v4[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v5[8] = {0b11100,0b11100,0b00000,0b00000,0b00000,0b00000,0b11100,0b11100};
byte v6[8] = {0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100};
byte v7[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00111,0b00111};
byte v8[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
long times,oldPosition = -999,newPosition;
int vol,bass,treb,att_l,att_r,att_c,att_sw,att_sl,att_sr,mute,power;
int menu,treb_print,bass_print,menu0=100;
bool gr1,gr2;
byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,w,w2,x;
void setup() {
irrecv.enableIRIn();lcd.begin(16, 2); Serial.begin(9600);
MsTimer2::set(3, to_Timer);MsTimer2::start();
pinMode(ENC_SW,INPUT);
pinMode(LATCH, OUTPUT);digitalWrite(LATCH, LOW);
pinMode(DATA, OUTPUT);digitalWrite(DATA, LOW);
pinMode(CLOCK, OUTPUT);digitalWrite(CLOCK, LOW);
pinMode(ATT,INPUT_PULLUP); // КНОПКА ATT
pinMode(MUTE,INPUT_PULLUP); // КНОПКА MUTE
pinMode(STANDBY,INPUT_PULLUP); // КНОПКА STANDBY
pinMode(ST_OUT,OUTPUT);
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
lcd.setCursor(0,0);lcd.print("Sound Processor");lcd.setCursor(5,1);lcd.print("M62446"); delay(2000);lcd.clear();
vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;
att_l = EEPROM.read(3);att_r = EEPROM.read(4);att_c = EEPROM.read(5);att_sw = EEPROM.read(6);att_sl = EEPROM.read(7);att_sr = EEPROM.read(8);
audio();
}
void loop() {
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
if(power==0){
if(digitalRead(ENC_SW)==LOW||ir.value==MENU){menu++;menu0=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu>2){menu=0;}}
if(digitalRead(ATT)==LOW||ir.value==ATT_IR){menu0++;menu=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu0>5){menu0=0;}}
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==0){mute=1;menu=100;menu0=100;cl();lcd.setCursor(6,0);lcd.print("MUTE");audio_mute();delay(300);}// mute on
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==1){mute=0;cl();times=millis();menu=0;myEnc.write(0);audio();}// mute off
if(ir.value==BASS_UP_IR){menu=2;bass++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// bassUP
if(ir.value==BASS_DW_IR){menu=2;bass--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;bass_func();audio();}// bassDW
if(ir.value==TREB_UP_IR){menu=1;treb++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// trebUP
if(ir.value==TREB_DW_IR){menu=1;treb--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;treb_func();audio();}// trebDW
}
// power
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==0){power=1;cl();audio_mute();lcd.setCursor(3,0);lcd.print("POWER OFF");menu=100;menu0=100;delay(3000);digitalWrite(ST_OUT,HIGH);}// power off
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==1){power=0;cl();lcd.setCursor(3,0);lcd.print("POWER ON ");myEnc.write(0);digitalWrite(ST_OUT,LOW);delay(3000);audio();menu=0;cl();}// power on
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if(menu==0){
if(ir.value==DW){vol++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==UP){vol--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
vol=vol-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
a[0]= (50-vol)/10;a[1]=(50-vol)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
if(mute==0){lcd.setCursor(0,0);lcd.print("VOLUME");}else{lcd.setCursor(0,0);lcd.print("MUTE");}
lcd.setCursor(0,1);lcd.print("CONTROL");
}
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if(menu==1){
if(ir.value==UP){treb++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >
if(ir.value==DW){treb--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_func();audio();}
if(treb<0){treb_print = abs(treb)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{treb_print = treb*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= treb_print/10;a[1]=treb_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("TREBLE");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// BASS ///////////////////////////////////////////////////////////////////
if(menu==2){
if(ir.value==UP){bass++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >
if(ir.value==DW){bass--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bass_func();audio();}
if(bass<0){bass_print = abs(bass)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{bass_print = bass*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= bass_print/10;a[1]=bass_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("BASS");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if(menu0==0){menu=100;
if(ir.value==UP){att_l++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_l++;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_l--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_l--;gr1=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_l=att_l+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_l_func();audio();}
a[0]= (att_l)/10;a[1]=(att_l)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("LEFT");
}
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if(menu0==1){menu=100;
if(ir.value==UP){att_r++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_r++;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_r--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_r--;gr1=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_r=att_r+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_r_func();audio();}
a[0]= (att_r)/10;a[1]=(att_r)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("RIGHT");
}
////////////// ATT_C ///////////////////////////////////////////////////////////////////
if(menu0==2){menu=100;
if(ir.value==UP){att_c++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_c++;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_c--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_c--;gr1=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_c=att_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_c_func();audio();}
a[0]= (att_c)/10;a[1]=(att_c)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("CENTER");
}
////////////// ATT_SW ///////////////////////////////////////////////////////////////////
if(menu0==3){menu=100;
if(ir.value==UP){att_sw++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sw++;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sw--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sw--;gr1=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sw=att_sw+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sw_func();audio();}
a[0]= (att_sw)/10;a[1]=(att_sw)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUBWOOFER");
}
////////////// ATT_SL ///////////////////////////////////////////////////////////////////
if(menu0==4){menu=100;
if(ir.value==UP){att_sl++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sl++;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sl--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sl--;gr1=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sl=att_sl+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sl_func();audio();}
a[0]= (att_sl)/10;a[1]=(att_sl)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. LEFT");
}
////////////// ATT_SR ///////////////////////////////////////////////////////////////////
if(menu0==5){menu=100;
if(ir.value==UP){att_sr++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sr++;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sr--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sr--;gr1=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sr=att_sr+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sr_func();audio();}
a[0]= (att_sr)/10;a[1]=(att_sr)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. RIGHT");
}
if(millis()-times>10000&&w==1&&mute==0&&power==0){
menu=0;menu0=100;w=0;cl();
EEPROM.update(0,vol);EEPROM.update(1,bass+7);EEPROM.update(2,treb+7);
EEPROM.update(3,att_l);EEPROM.update(4,att_r);EEPROM.update(5,att_c);
EEPROM.update(6,att_sw);EEPROM.update(7,att_sl);EEPROM.update(8,att_sr);
}
}
void vol_func(){if(vol>50){vol=50;}if(vol<0){vol=0;}}
void treb_func(){if(treb<-7){treb=-7;}if(treb>7){treb=7;}}
void bass_func(){if(bass<-7){bass=-7;}if(bass>7){bass=7;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}
void att_l_func(){if(att_l>19){att_l=19;}if(att_l<0){att_l=0;}}
void att_r_func(){if(att_r>19){att_r=19;}if(att_r<0){att_r=0;}}
void att_c_func(){if(att_c>19){att_c=19;}if(att_c<0){att_c=0;}}
void att_sw_func(){if(att_sw>19){att_sw=19;}if(att_sw<0){att_sw=0;}}
void att_sr_func(){if(att_sr>19){att_sr=19;}if(att_sr<0){att_sr=0;}}
void att_sl_func(){if(att_sl>19){att_sl=19;}if(att_sl<0){att_sl=0;}}
void digit(){switch(a[x]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
byte_1(treb,0b0000,bass,0);// treb -7...7, port 0b0000, bass -7...7, bypass = 0
byte_2(vol+att_l,vol+att_r);// 0...95 = 0...-95 dB mute = 111
byte_3(vol+att_c,vol+att_sw);// 0...95 = 0...-95 dB mute = 111
byte_4(vol+att_sl,vol+att_sr);// 0...95 = 0...-95 dB mute = 111
}
void audio_mute(){
byte_2(111,111);
byte_3(111,111);
byte_4(111,111);
}
void byte_1(int treb, byte port, int bass, bool by_pass){
// treb int -7...+7 === -14...+14 dB
// bass int -7...+7 === -14...+14 dB
// byte port 0b0000....0b1111
// by_pass === 0 TONE | 1 BYPASS
switch(treb){
case -7: treb = 0b1111;break;
case -6: treb = 0b1101;break;
case -5: treb = 0b1110;break;
case -4: treb = 0b1100;break;
case -3: treb = 0b1011;break;
case -2: treb = 0b1010;break;
case -1: treb = 0b1001;break;
case 0: treb = 0b0000;break;
case 1: treb = 0b0001;break;
case 2: treb = 0b0010;break;
case 3: treb = 0b0011;break;
case 4: treb = 0b0100;break;
case 5: treb = 0b0110;break;
case 6: treb = 0b0101;break;
case 7: treb = 0b0111;break;
}
switch(bass){
case -7: bass = 0b1111;break;
case -6: bass = 0b1101;break;
case -5: bass = 0b1110;break;
case -4: bass = 0b1100;break;
case -3: bass = 0b1011;break;
case -2: bass = 0b1010;break;
case -1: bass = 0b1001;break;
case 0: bass = 0b0000;break;
case 1: bass = 0b0001;break;
case 2: bass = 0b0010;break;
case 3: bass = 0b0011;break;
case 4: bass = 0b0100;break;
case 5: bass = 0b0110;break;
case 6: bass = 0b0101;break;
case 7: bass = 0b0111;break;
}
unsigned int data_byte = (treb<<12)|(port<<8)|(bass<<4)|(by_pass<<2)|0b00;
writeByte(data_byte);
}
void byte_2(int vol_l, int vol_r){
// int vol 0...95 === 0...-95 dB mute=111
if(vol_l>79){vol_l=vol_l+16;}
if(vol_r>79){vol_r=vol_r+16;}
unsigned int data_byte = (vol_l<<9)|(vol_r<<2)|0b01;
writeByte(data_byte);
}
void byte_3(int vol_c, int vol_sw){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_c>79){vol_c=vol_c+16;}
if(vol_sw>79){vol_sw=vol_sw+16;}
unsigned int data_byte = (vol_c<<9)|(vol_sw<<2)|0b10;
writeByte(data_byte);
}
void byte_4(int vol_sl, int vol_sr){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_sl>79){vol_sl=vol_sl+16;}
if(vol_sr>79){vol_sr=vol_sr+16;}
unsigned int data_byte = (vol_sl<<9)|(vol_sr<<2)|0b11;
writeByte(data_byte);
}
void writeByte(uint16_t data){
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
for (int i = 15; i >= 0; i--) {
digitalWrite(DATA, (data >> i) & 1); delayMicroseconds(3);
digitalWrite(CLOCK, HIGH); delayMicroseconds(3);
digitalWrite(CLOCK, LOW); delayMicroseconds(3);
}
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
}Определитесь с пинами, у Вас есть общие пины для двух уст-в
у меня акустика XORO HS511,могу прислать схему,для общего понимания

Мне нужно что подавать (отмечено красным), чтобы переключать режимы входов

Микросхема имеет 6 каналов коммутации (аналоговых ключей), объединённых в три группы по два ключа в каждом. Сигналы A, B и C задают номера включёнённых каналов, а INH даёт общее разрешение работы (активный уровень — низкий). Три канала (по одному из каждой группы) включаются одновременно

АС-3,это АВС
разобрался. 6-на массу, а на выводы ABC-если 2.0 вход-LOW, ЕСЛИ 5.1, -HIGH
ок. Завтра постараюсь сделать.
Нужно выделить пины под коммутатор входов 2 шт, напишите их, управление IR
Спасибо. Переключение входов на пульте,кнопка in, и кнопка отдельная на лицевой панели,может А3 задействовать?
НАШЁЛ дисплей i2c, можно всё сделать под него?
// M62446
#define LATCH 2
#define DATA 3
#define CLOCK 4
// ENCODER
#define ENC_DT 9
#define ENC_CLK 8
#define ENC_SW 10
// BUTTON
#define ATT A0
#define MUTE A1
#define STANDBY A2
#define IN A3
// выход упр. STANDBY
#define ST_OUT 13
// коды кнопок ИК пульта
#define MENU 0x2FDB24D // button encoder
#define UP 0x2FDD02F // >>>
#define DW 0x2FD32CD // <<<
#define POWER_IR 0x2FD00FF // POWER
#define MUTE_IR 0x2FDB04F // MUTE
#define ATT_IR 0x2FDF00F // ATT
#define IN_IR 0x2FD807F // INPUT
#define BASS_UP_IR 0x2FD629D // bassUP
#define BASS_DW_IR 0x2FDA25D // bassDW
#define TREB_UP_IR 0x2FD22DD // trebUP
#define TREB_DW_IR 0x2FDE01F // trebDW
// ИК датчик
#define IR 12
// управление входами
#define OUT_PIN1 5
#define OUT_PIN2 6
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
IRrecv irrecv(IR); // указываем вывод модуля IR приемника
Encoder myEnc(ENC_DT, ENC_CLK);
decode_results ir;
byte v1[8] = {0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111};
byte v2[8] = {0b00111,0b00111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
byte v3[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v4[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v5[8] = {0b11100,0b11100,0b00000,0b00000,0b00000,0b00000,0b11100,0b11100};
byte v6[8] = {0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100};
byte v7[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00111,0b00111};
byte v8[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
long times,oldPosition = -999,newPosition;
int vol,bass,treb,att_l,att_r,att_c,att_sw,att_sl,att_sr,mute,power;
int menu,treb_print,bass_print,menu0=100,in;
bool gr1,gr2;
byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,w,w2,x;
void setup() {
irrecv.enableIRIn();lcd.init();lcd.backlight();Serial.begin(9600);
MsTimer2::set(3, to_Timer);MsTimer2::start();
pinMode(ENC_SW,INPUT);
pinMode(LATCH, OUTPUT);digitalWrite(LATCH, LOW);
pinMode(DATA, OUTPUT);digitalWrite(DATA, LOW);
pinMode(CLOCK, OUTPUT);digitalWrite(CLOCK, LOW);
pinMode(ATT,INPUT_PULLUP); // КНОПКА ATT
pinMode(MUTE,INPUT_PULLUP); // КНОПКА MUTE
pinMode(STANDBY,INPUT_PULLUP); // КНОПКА STANDBY
pinMode(IN,INPUT_PULLUP); // КНОПКА INPUT
pinMode(ST_OUT,OUTPUT);
pinMode(OUT_PIN1,OUTPUT);
pinMode(OUT_PIN2,OUTPUT);
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
lcd.setCursor(0,0);lcd.print("Sound Processor");lcd.setCursor(5,1);lcd.print("M62446"); delay(2000);lcd.clear();
vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;
att_l = EEPROM.read(3);att_r = EEPROM.read(4);att_c = EEPROM.read(5);att_sw = EEPROM.read(6);att_sl = EEPROM.read(7);att_sr = EEPROM.read(8);
in = EEPROM.read(9);
audio();
}
void loop() {
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
if(power==0){
if(digitalRead(ENC_SW)==LOW||ir.value==MENU){menu++;menu0=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu>2){menu=0;}}
if(digitalRead(ATT)==LOW||ir.value==ATT_IR){menu0++;menu=100;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu0>5){menu0=0;}}
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==0){mute=1;menu=100;menu0=100;cl();lcd.setCursor(6,0);lcd.print("MUTE");audio_mute();delay(300);}// mute on
if((ir.value==MUTE_IR||digitalRead(MUTE)==LOW)&&mute==1){mute=0;cl();times=millis();menu=0;myEnc.write(0);audio();}// mute off
if(ir.value==BASS_UP_IR && menu!=2){menu=2;bass++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;bass_func();audio();}// bassUP
if(ir.value==BASS_DW_IR && menu!=2){menu=2;bass--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;bass_func();audio();}// bassDW
if(ir.value==TREB_UP_IR && menu!=1){menu=1;treb++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;treb_func();audio();}// trebUP
if(ir.value==TREB_DW_IR && menu!=1){menu=1;treb--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;treb_func();audio();}// trebDW
if(digitalRead(IN)==LOW||ir.value==IN_IR){in++;menu=100;cl();times=millis();w=1;w2=1;if(in>1){in=0;}
if(in==0){lcd.setCursor(3,0);lcd.print("INPUT 2CH");digitalWrite(OUT_PIN1,LOW);digitalWrite(OUT_PIN2,LOW);delay(1000);menu=0;cl();}
if(in==1){lcd.setCursor(3,0);lcd.print("INPUT 6CH");digitalWrite(OUT_PIN1,LOW);digitalWrite(OUT_PIN2,HIGH);delay(1000);menu=0;cl();}
}
}
// power
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==0){power=1;cl();audio_mute();lcd.setCursor(3,0);lcd.print("POWER OFF");menu=100;menu0=100;delay(3000);lcd.noBacklight();digitalWrite(ST_OUT,HIGH);}// power off
if((ir.value==POWER_IR||digitalRead(STANDBY)==LOW)&&power==1){power=0;lcd.backlight();cl();lcd.setCursor(3,0);lcd.print("POWER ON ");myEnc.write(0);digitalWrite(ST_OUT,LOW);delay(3000);audio();menu=0;cl();}// power on
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if(menu==0){
if(ir.value==DW){vol++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==UP){vol--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
vol=vol-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
a[0]= (50-vol)/10;a[1]=(50-vol)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
if(mute==0){lcd.setCursor(0,0);lcd.print("VOLUME");}else{lcd.setCursor(0,0);lcd.print("MUTE");}
lcd.setCursor(0,1);lcd.print("CONTROL");
}
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if(menu==1){
if(ir.value==UP||ir.value==TREB_UP_IR){treb++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >
if(ir.value==DW||ir.value==TREB_DW_IR){treb--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_func();audio();}
if(treb<0){treb_print = abs(treb)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{treb_print = treb*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= treb_print/10;a[1]=treb_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("TREBLE");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// BASS ///////////////////////////////////////////////////////////////////
if(menu==2){
if(ir.value==UP||ir.value==BASS_UP_IR){bass++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >
if(ir.value==DW||ir.value==BASS_DW_IR){bass--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bass_func();audio();}
if(bass<0){bass_print = abs(bass)*2;lcd.setCursor(7,0);lcd.write((uint8_t)3);}else{bass_print = bass*2;lcd.setCursor(7,0);lcd.print(" ");}
a[0]= bass_print/10;a[1]=bass_print%10;
for(x=0;x<2;x++){switch(x){case 0: e1=8,e2=9,e3=10;break;case 1: e1=11,e2=12,e3=13;break;}digit();}
lcd.setCursor(0,0);lcd.print("BASS");lcd.setCursor(0,1);lcd.print("CONTROL");lcd.setCursor(14,0);lcd.print("dB");
}
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if(menu0==0){menu=100;
if(ir.value==UP){att_l++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_l++;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_l--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_l--;gr1=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_l=att_l+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_l_func();audio();}
a[0]= (att_l)/10;a[1]=(att_l)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("LEFT");
}
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if(menu0==1){menu=100;
if(ir.value==UP){att_r++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_r++;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_r--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_r--;gr1=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_r=att_r+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_r_func();audio();}
a[0]= (att_r)/10;a[1]=(att_r)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("RIGHT");
}
////////////// ATT_C ///////////////////////////////////////////////////////////////////
if(menu0==2){menu=100;
if(ir.value==UP){att_c++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_c++;gr2=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_c--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_c--;gr1=0;cl1();times=millis();w=1;w2=1;att_c_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_c=att_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_c_func();audio();}
a[0]= (att_c)/10;a[1]=(att_c)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("CENTER");
}
////////////// ATT_SW ///////////////////////////////////////////////////////////////////
if(menu0==3){menu=100;
if(ir.value==UP){att_sw++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sw++;gr2=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sw--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sw--;gr1=0;cl1();times=millis();w=1;w2=1;att_sw_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sw=att_sw+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sw_func();audio();}
a[0]= (att_sw)/10;a[1]=(att_sw)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUBWOOFER");
}
////////////// ATT_SL ///////////////////////////////////////////////////////////////////
if(menu0==4){menu=100;
if(ir.value==UP){att_sl++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sl++;gr2=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sl--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sl--;gr1=0;cl1();times=millis();w=1;w2=1;att_sl_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sl=att_sl+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sl_func();audio();}
a[0]= (att_sl)/10;a[1]=(att_sl)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. LEFT");
}
////////////// ATT_SR ///////////////////////////////////////////////////////////////////
if(menu0==5){menu=100;
if(ir.value==UP){att_sr++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_sr++;gr2=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка >>>>>>
if(ir.value==DW){att_sr--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_sr--;gr1=0;cl1();times=millis();w=1;w2=1;att_sr_func();audio();}// кнопка <<<<<<
if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
att_sr=att_sr+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_sr_func();audio();}
a[0]= (att_sr)/10;a[1]=(att_sr)%10;
for(x=0;x<2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATTENUATOR");lcd.setCursor(0,1);lcd.print("SUR. RIGHT");
}
if(millis()-times>10000&&w==1&&mute==0&&power==0){
menu=0;menu0=100;w=0;cl();
EEPROM.update(0,vol);EEPROM.update(1,bass+7);EEPROM.update(2,treb+7);
EEPROM.update(3,att_l);EEPROM.update(4,att_r);EEPROM.update(5,att_c);
EEPROM.update(6,att_sw);EEPROM.update(7,att_sl);EEPROM.update(8,att_sr);
EEPROM.update(9,in);
}
}
void vol_func(){if(vol>50){vol=50;}if(vol<0){vol=0;}}
void treb_func(){if(treb<-7){treb=-7;}if(treb>7){treb=7;}}
void bass_func(){if(bass<-7){bass=-7;}if(bass>7){bass=7;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}
void att_l_func(){if(att_l>19){att_l=19;}if(att_l<0){att_l=0;}}
void att_r_func(){if(att_r>19){att_r=19;}if(att_r<0){att_r=0;}}
void att_c_func(){if(att_c>19){att_c=19;}if(att_c<0){att_c=0;}}
void att_sw_func(){if(att_sw>19){att_sw=19;}if(att_sw<0){att_sw=0;}}
void att_sr_func(){if(att_sr>19){att_sr=19;}if(att_sr<0){att_sr=0;}}
void att_sl_func(){if(att_sl>19){att_sl=19;}if(att_sl<0){att_sl=0;}}
void digit(){switch(a[x]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
byte_1(treb,0b0000,bass,0);// treb -7...7, port 0b0000, bass -7...7, bypass = 0
byte_2(vol+att_l,vol+att_r);// 0...95 = 0...-95 dB mute = 111
byte_3(vol+att_c,vol+att_sw);// 0...95 = 0...-95 dB mute = 111
byte_4(vol+att_sl,vol+att_sr);// 0...95 = 0...-95 dB mute = 111
}
void audio_mute(){
byte_2(111,111);
byte_3(111,111);
byte_4(111,111);
}
void byte_1(int treb, byte port, int bass, bool by_pass){
// treb int -7...+7 === -14...+14 dB
// bass int -7...+7 === -14...+14 dB
// byte port 0b0000....0b1111
// by_pass === 0 TONE | 1 BYPASS
switch(treb){
case -7: treb = 0b1111;break;
case -6: treb = 0b1101;break;
case -5: treb = 0b1110;break;
case -4: treb = 0b1100;break;
case -3: treb = 0b1011;break;
case -2: treb = 0b1010;break;
case -1: treb = 0b1001;break;
case 0: treb = 0b0000;break;
case 1: treb = 0b0001;break;
case 2: treb = 0b0010;break;
case 3: treb = 0b0011;break;
case 4: treb = 0b0100;break;
case 5: treb = 0b0110;break;
case 6: treb = 0b0101;break;
case 7: treb = 0b0111;break;
}
switch(bass){
case -7: bass = 0b1111;break;
case -6: bass = 0b1101;break;
case -5: bass = 0b1110;break;
case -4: bass = 0b1100;break;
case -3: bass = 0b1011;break;
case -2: bass = 0b1010;break;
case -1: bass = 0b1001;break;
case 0: bass = 0b0000;break;
case 1: bass = 0b0001;break;
case 2: bass = 0b0010;break;
case 3: bass = 0b0011;break;
case 4: bass = 0b0100;break;
case 5: bass = 0b0110;break;
case 6: bass = 0b0101;break;
case 7: bass = 0b0111;break;
}
unsigned int data_byte = (treb<<12)|(port<<8)|(bass<<4)|(by_pass<<2)|0b00;
writeByte(data_byte);
}
void byte_2(int vol_l, int vol_r){
// int vol 0...95 === 0...-95 dB mute=111
if(vol_l>79){vol_l=vol_l+16;}
if(vol_r>79){vol_r=vol_r+16;}
unsigned int data_byte = (vol_l<<9)|(vol_r<<2)|0b01;
writeByte(data_byte);
}
void byte_3(int vol_c, int vol_sw){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_c>79){vol_c=vol_c+16;}
if(vol_sw>79){vol_sw=vol_sw+16;}
unsigned int data_byte = (vol_c<<9)|(vol_sw<<2)|0b10;
writeByte(data_byte);
}
void byte_4(int vol_sl, int vol_sr){
// int vol 0...95 === 0...-95 dB mute=112
if(vol_sl>79){vol_sl=vol_sl+16;}
if(vol_sr>79){vol_sr=vol_sr+16;}
unsigned int data_byte = (vol_sl<<9)|(vol_sr<<2)|0b11;
writeByte(data_byte);
}
void writeByte(uint16_t data){
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
for (int i = 15; i >= 0; i--) {
digitalWrite(DATA, (data >> i) & 1); delayMicroseconds(3);
digitalWrite(CLOCK, HIGH); delayMicroseconds(3);
digitalWrite(CLOCK, LOW); delayMicroseconds(3);
}
digitalWrite(LATCH, HIGH); delayMicroseconds(1);
digitalWrite(LATCH, LOW); delayMicroseconds(3);
}Александр,спасибо! буду тестировать. Вопрос-управление входами -5 и 6,это что и как ? просто на обоих микросхемах АВС соеденены между собой в пучек,т.е нужен один пин управления на всё. проследил по печатке
я сделал через два пина, один всегда LOW, другой меняет состояние, на всякий случай
Но можете использовать только 6
низкий уровень для 2,0 и высокий для 5,1
forum.rcl-radio.ru → Аудиопроцессоры → M62446
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|
|