<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; BD3491FS]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=89&amp;type=atom" />
	<updated>2021-07-03T13:14:31Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=89</id>
		<entry>
			<title type="html"><![CDATA[Re: BD3491FS]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=4328#p4328" />
			<content type="html"><![CDATA[<p>Предустановленный выбор тембра (pop, classic,rock)</p><div class="codebox"><pre><code>#define IR_1 0x807F926D // Up button
#define IR_2 0x807FB04F // Down button
#define IR_3 0x807F32CD // Button&gt;
#define IR_4 0x807F728D // Button &lt;
#define IR_5 0x807FB24D // IN button


#include &lt;Wire.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;
#include &lt;BD3491FS.h&gt;
#include &lt;Encoder.h&gt;
#include &lt;EEPROM.h&gt;
#include &lt;MsTimer2.h&gt;
#include &lt;boarddefs.h&gt;
#include &lt;IRremote.h&gt;
BD3491FS bd;
LiquidCrystal_I2C lcd (0x27,16,2); // Set up the display
IRrecv irrecv (12); // specify the output of the IR receiver module
Encoder myEnc (8, 9); // CLK, DT
decode_results ir;
byte a1 [8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
byte a2 [8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
byte a3 [8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
unsigned long time, oldPosition = -999, newPosition;
int menu, w, w2, vol, vol_d, gr1, gr2, z, z0, z1, treb, treb_d, bass, bass_d, in, www, gain1, gain2, gain3, gain4, gain5, gain6, gain0, gain_d, sur ;
int tembr;

void setup () {
irrecv.enableIRIn();lcd.init();lcd.backlight();
  lcd.setCursor(0,0);lcd.print(&quot;    BD3491FS    &quot;);delay(2000);cl();
  Serial.begin(9600); lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
  pinMode(10,INPUT);  // МЕНЮ КНОПКА SW энкодера
  pinMode(11, INPUT_PULLUP); // Tone mode selection button
  pinMode(2, INPUT_PULLUP); // Input button

  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-87;treb = EEPROM.read(1)-7;bass = EEPROM.read(2)-7;
   in = EEPROM.read(3);sur = EEPROM.read(10);
   gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);
   gain4 = EEPROM.read(7);gain5 = EEPROM.read(8);gain6 = EEPROM.read(9);
   audio();
}

void loop(){
if(digitalRead(11)==LOW){tembr++;cl();time=millis();w=1;w2=1;if(tembr&gt;2){tembr=0;}
switch(tembr){
    case 0: bass=8;treb=0;cl();lcd.setCursor(0,0);lcd.print(&quot;      ROCK     &quot;); audio();break;
    case 1: bass=0;treb=0;cl();lcd.setCursor(0,0);lcd.print(&quot;      POP      &quot;); audio();break;
    case 2: bass=2;treb=4;cl();lcd.setCursor(0,0);lcd.print(&quot;    CLASSIC    &quot;); audio();break;
}delay(2000);menu=0;}
if(digitalRead(10) == LOW){menu++;cl();time = millis();w = 1;w2 = 1;if(menu&gt; 4){menu = 0;}} // menu
if(digitalRead(2) == LOW){in++;cl();time = millis(); w = 1; w2 = 1; www = 1; if(in&gt; 5){in = 0;}; lcd.setCursor(0,0); lcd.print(&quot;INPUT&quot;); lcd.print(in + 1); audio(); delay(2000);} // INPUT SELECTOR BUTTON I

////////////////////// IR /////////////////////////// //////////////////////
if(irrecv.decode( &amp;ir )){Serial.print(&quot;0x&quot;);Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
  if(ir.value==IR_1){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu&gt;4){menu=0;}}// меню кнопка вверх 
  if(ir.value==IR_2){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu&lt;0){menu=4;}}// меню кнопка вниз
  if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;www=1;if(in&gt;5){in=0;};lcd.setCursor(0,0);lcd.print(&quot;    INPUT &quot;);lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN
   
/////////////////////////////// VOLUME -87 ... +0 dB | step 1 dB ///////////////////////////////////////////// /
if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func;audio();} 
     lcd.setCursor(0,0);lcd.print(&quot;VOLUME   &quot;);
     lcd.print(&quot; &quot;);lcd.print(87+vol);lcd.print(&quot; &quot;);lcd.setCursor(13,0);lcd.print(&quot;dB&quot;);vol_d=vol+48;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=vol_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}  
///////////////////////// TREBLE +/- 14 dB | step 2 dB ///////////////////////////////////////////// //////////
if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();} 
   lcd.setCursor(0,0);lcd.print(&quot;TREBLE  &quot;);
   lcd.print(&quot; &quot;);lcd.print(treb*2);lcd.print(&quot; &quot;);lcd.setCursor(13,0);lcd.print(&quot;dB&quot;);treb_d=treb*2+14;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=treb_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}   
  
/////////////////////// BASS +/- 14 dB | step 2 dB ///////////////////////////////////////////// ////////////
if(menu==2){
     if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;  
    
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();} 
   lcd.setCursor(0,0);lcd.print(&quot;BASS    &quot;);
   lcd.print(&quot; &quot;);lcd.print(bass*2);lcd.print(&quot; &quot;);lcd.setCursor(13,0);lcd.print(&quot;dB&quot;);bass_d=bass*2+14;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=bass_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}} 


//////////////// IN + GAIN ///////////////////////////// //////////////////////////////
 if(menu==3){ 
       switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;
     case 3: gain0 = gain4;break;
     case 4: gain0 = gain5;break;
     case 5: gain0 = gain6;break;
     }
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();w2=1;gain_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();w2=1;gain_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;

    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;gain_func();audio();} 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;
     case 3: gain4 = gain0;break;
     case 4: gain5 = gain0;break;
     case 5: gain6 = gain0;break;
     } 
    if(www==1){audio();www=0;}
  lcd.setCursor(0,0);lcd.print(&quot;Gain IN &quot;);lcd.print(in+1);
      lcd.setCursor(10,0);lcd.print(&quot; &quot;);lcd.print(gain0*2);lcd.print(&quot; &quot;);lcd.setCursor(14,0);lcd.print(&quot;dB&quot;);gain_d=gain0*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=gain_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+6,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+6,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0+6,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+6,1);lcd.write((uint8_t)2);}}w2=0;}

////////////////////////////// Surround /////////////////// /////////////////////////////////
if(menu==4){  
     if(ir.value==IR_3){sur++;gr1=1;gr2=0;cl1();w2=1;sur_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){sur++;gr2=0;cl1();w2=1;sur_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){sur--;gr1=0;gr2=1;cl1();w2=1;sur_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){sur--;gr1=0;cl1();w2=1;sur_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt; 
  
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    sur=sur+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;sur_func();audio();} 

    lcd.setCursor(0,0);lcd.print(&quot;Surround Gain&quot;);
    lcd.setCursor(0,1);
      switch(sur){
         case 0: lcd.print(&quot;OFF   &quot;);break;
         case 1: lcd.print(&quot;LOW   &quot;);break;
         case 2: lcd.print(&quot;MIDDLE&quot;);break;
         case 3: lcd.print(&quot;HIGH  &quot;);break;}}  




///////////////////// EEPROM //////////////////////////// ///////////////////////////////////
if (millis() - time &gt; 10000 &amp;&amp; w == 1) {
EEPROM.update(0, vol + 87); EEPROM.update(1, treb + 7); EEPROM.update(2, bass + 7);
EEPROM.update(3, in); EEPROM.update(10, sur);
EEPROM.update(4, gain1); EEPROM.update(5, gain2); EEPROM.update(6, gain3);
EEPROM.update(7, gain4); EEPROM.update(8, gain5); EEPROM.update(9, gain6);
menu=0;w=0;w2=1;cl();}

} // loop

void sur_func(){if(sur&gt;3){sur=0;}if(sur &lt;0){sur=3;}}
void gain_func(){if(gain0&lt;0){gain0 = 0;}if(gain0&gt; 7){gain0 = 7;}}
void bass_func(){if(bass&gt; 7){bass = 7;}if(bass &lt;-7){bass = -7;}}
void treb_func(){if(treb&gt; 7) {treb = 7;}if(treb &lt;-7){treb = -7;}}
void vol_func(){if(vol &lt;-87) {vol = -87;}if(vol&gt; 0){vol = 0;}}
void cl(){ir.value = 0; delay(300); lcd.clear();}
void cl1(){ir.value = 0; delay(100);}
void to_Timer(){newPosition = myEnc.read()/4;}

void audio () {
bd.setSelect(in); // int 0 ... 7 === ABCDEF INPUT_SHORT INPUT_MUTE
bd.setIn_gain(gain0); // int 0 ... 7 === 0 ... 14 dB
bd.setVol_1(abs(vol)); // int 0 ... 87 === 0 ...- 87 dB
bd.setVol_2(abs(vol)); // int 0 ... 87 === 0 ...- 87 dB
bd.setBass(bass); // int -7 ... 0 ... + 7 === -7 ... + 7 dB
bd.setTreb(treb); // int -7 ... 0 ... + 7 === -7 ... + 7 dB
bd.setSurround(sur); // int 0 ... 3 === OFF LOW MIDDLE HIGH
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-07-03T13:14:31Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=4328#p4328</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BD3491FS]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=761#p761" />
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/3059aa0a19c4420ae9f4d03c5d54fad3.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/3059aa0a19c4420ae9f4d03c5d54fad3.png" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/456d1f1b7d191600f69f763d675d5a54.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/456d1f1b7d191600f69f763d675d5a54.png" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/5ffd136e889d36cf2d63cb4937cf97c8.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/5ffd136e889d36cf2d63cb4937cf97c8.png" /></span> </p><br /><div class="codebox"><pre><code>#define IR_1 0x2FDD02F // Кнопка вверх
#define IR_2 0x2FD32CD // Кнопка вниз
#define IR_3 0x2FD906F // Кнопка &gt;
#define IR_4 0x2FDF20D // Кнопка &lt;
#define IR_5 0x2FD708F // Кнопка IN

#include &lt;Wire.h&gt; 
#include &lt;LiquidCrystal_I2C.h&gt;
#include &lt;BD3491FS.h&gt;
#include &lt;Encoder.h&gt;
#include &lt;EEPROM.h&gt;
#include &lt;MsTimer2.h&gt;
#include &lt;boarddefs.h&gt;
#include &lt;IRremote.h&gt;
  BD3491FS bd; 
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(8, 9);//  CLK, DT
  decode_results ir; 
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v2[8] = {31,31,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
   unsigned long time,oldPosition  = -999,newPosition; 
   int menu,w,w2,vol,vol_d,gr1,gr2,z,z0,z1,treb,treb_d,bass,bass_d,in,www,gain1,gain2,gain3,gain4,gain5,gain6,gain0,gain_d,sur; 
    byte a[2];
    byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;

void setup(){
  irrecv.enableIRIn();lcd.init();lcd.backlight();
  lcd.setCursor(0,0);lcd.print(&quot;    BD3491FS    &quot;);delay(2000);cl();
  Serial.begin(9600); lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(7, v7);
  pinMode(10,INPUT);  // МЕНЮ КНОПКА SW энкодера
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-87;treb = EEPROM.read(1)-7;bass = EEPROM.read(2)-7;
   in = EEPROM.read(3);sur = EEPROM.read(10);
   gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);
   gain4 = EEPROM.read(7);gain5 = EEPROM.read(8);gain6 = EEPROM.read(9);
   audio();
}

void loop(){
  if(digitalRead(10)==LOW){menu++;cl();time=millis();w=1;w2=1;if(menu&gt;4){menu=0;}}// меню
  if(digitalRead(2)==HIGH){in++;;cl();time=millis();w=1;w2=1;www=1;if(in&gt;5){in=0;};lcd.setCursor(0,0);lcd.print(&quot;    INPUT &quot;);lcd.print(in+1);audio();delay(2000);cl();}// КНОПКА ВЫБОРА ВХОДА I

 ////////////////////// IR /////////////////////////////////////////////////
  if ( irrecv.decode( &amp;ir )) {Serial.print(&quot;0x&quot;);Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
  if(ir.value==IR_1){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu&gt;4){menu=0;}}// меню кнопка вверх 
  if(ir.value==IR_2){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu&lt;0){menu=4;}}// меню кнопка вниз
  if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;www=1;if(in&gt;5){in=0;};lcd.setCursor(0,0);lcd.print(&quot;    INPUT &quot;);lcd.print(in+1);audio();delay(2000);cl();}// КНОПКА ВЫБОРА ВХОДА IN

/////////////////////////////// VOLUME -87 ... +0 дБ | step 1 dB////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
   
  if (newPosition != oldPosition){oldPosition = newPosition;vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();}
    vol_d = 87-abs(vol);
    a[0]= vol_d/10;a[1]=vol_d%10;

    for(i=0;i&lt;2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;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);}
   //   if(vol&lt;0){lcd.setCursor(7,0);lcd.write((uint8_t)7);}else{lcd.setCursor(7,0);lcd.write((uint8_t)5);}
      lcd.setCursor(0,0);lcd.print(&quot;VOLUME&quot;);
      lcd.setCursor(0,1);lcd.print(&quot;IN &quot;);lcd.print(in+1);
  }

///////////////////////// TREBLE +/-14 dB | step 2 dB/////////////////////////////////////////////////////////
   if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
    
      if (newPosition != oldPosition) {
     oldPosition = newPosition;
treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();}

    treb_d = abs(treb*2);
    a[0]= treb_d/10;a[1]=treb_d%10;

    for(i=0;i&lt;2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;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);}

       if(treb&lt;0){lcd.setCursor(7,0);lcd.write((uint8_t)7);}else{lcd.setCursor(7,0);lcd.write((uint8_t)5);}
      lcd.setCursor(0,0);lcd.print(&quot;TREBLE&quot;);
      lcd.setCursor(0,1);lcd.print(&quot;10 kHz&quot;);
  }   
  
/////////////////////// BASS +/-14 dB | step 2 dB///////////////////////////////////////////////////////////
   if(menu==2){
     if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;  
    
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();} 
   
   bass_d = abs(bass*2);
    a[0]= bass_d/10;a[1]=bass_d%10;

    for(i=0;i&lt;2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;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);}

       if(bass&lt;0){lcd.setCursor(7,0);lcd.write((uint8_t)7);}else{lcd.setCursor(7,0);lcd.write((uint8_t)5);}
      lcd.setCursor(0,0);lcd.print(&quot;BASS  &quot;);
      lcd.setCursor(0,1);lcd.print(&quot;100 Hz&quot;);
  }   

   //////////////// IN + GAIN /////////////////////////////////////////////////////////////
   if(menu==3){ 
       switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;
     case 3: gain0 = gain4;break;
     case 4: gain0 = gain5;break;
     case 5: gain0 = gain6;break;
     }
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();w2=1;gain_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();w2=1;gain_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;

    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;gain_func();audio();} 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;
     case 3: gain4 = gain0;break;
     case 4: gain5 = gain0;break;
     case 5: gain6 = gain0;break;
     } 
    if(www==1){audio();www=0;}
  lcd.setCursor(0,0);lcd.print(&quot;Gain&quot;);
  lcd.setCursor(0,1);lcd.print(&quot;IN &quot;);lcd.print(in+1);
  
     gain0 = abs(gain0*2);
    a[0]= gain0/10;a[1]=gain0%10;

    for(i=0;i&lt;2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;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);}
   }

  ////////////////////////////// Surround ////////////////////////////////////////////////////
 if(menu==4){  
     if(ir.value==IR_3){sur++;gr1=1;gr2=0;cl1();w2=1;sur_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){sur++;gr2=0;cl1();w2=1;sur_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){sur--;gr1=0;gr2=1;cl1();w2=1;sur_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){sur--;gr1=0;cl1();w2=1;sur_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt; 
  
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    sur=sur+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;sur_func();audio();} 

    lcd.setCursor(0,0);lcd.print(&quot;Surround Gain&quot;);
    lcd.setCursor(0,1);
      switch(sur){
         case 0: lcd.print(&quot;OFF   &quot;);break;
         case 1: lcd.print(&quot;LOW   &quot;);break;
         case 2: lcd.print(&quot;MIDDLE&quot;);break;
         case 3: lcd.print(&quot;HIGH  &quot;);break;}}  
  


 ///////////////////// EEPROM ///////////////////////////////////////////////////////////////         
  if(millis()-time&gt;10000 &amp;&amp; w==1){
     EEPROM.update(0,vol+87);EEPROM.update(1,treb+7);EEPROM.update(2,bass+7);
     EEPROM.update(3,in);EEPROM.update(10,sur);
     EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
     EEPROM.update(7,gain4);EEPROM.update(8,gain5);EEPROM.update(9,gain6);
     menu=0;w=0;w2=1;cl();}
  
  }//loop

void sur_func(){if(sur&gt;3){sur=0;}if(sur&lt;0){sur=3;}}
void gain_func(){if(gain0&lt;0){gain0=0;}if(gain0&gt;7){gain0=7;}}
void bass_func(){if(bass&gt;7){bass=7;}if(bass&lt;-7){bass=-7;}} 
void treb_func(){if(treb&gt;7){treb=7;}if(treb&lt;-7){treb=-7;}}
void vol_func(){if(vol&lt;-87){vol=-87;}if(vol&gt;0){vol=0;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void to_Timer(){newPosition = myEnc.read()/4;}  

void audio(){
    bd.setSelect(in);// int 0...7 === A B C D E F INPUT_SHORT INPUT_MUTE
    bd.setIn_gain(gain0); // int 0...7 === 0...14 dB    
    bd.setVol_1(abs(vol)); // int 0...87 === 0...-87 dB
    bd.setVol_2(abs(vol)); // int 0...87 === 0...-87 dB
    bd.setBass(bass); // int -7...0...+7 === -7...+7 dB
    bd.setTreb(treb); // int -7...0...+7 === -7...+7 dB
    bd.setSurround(sur); // int 0...3 === OFF LOW MIDDLE HIGH
  }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2020-01-21T03:35:32Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=761#p761</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BD3491FS]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=760#p760" />
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/12e7e9eb8996adfde8ce2db86449cc6d.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/12e7e9eb8996adfde8ce2db86449cc6d.png" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/d3f8fbafae476133b37ffd4d9f29b926.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/d3f8fbafae476133b37ffd4d9f29b926.png" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/ab06e5993010bbe28ee370fc34e2ae92.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/ab06e5993010bbe28ee370fc34e2ae92.png" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/9cd2d4ef49a79e62c6a0d5b6a89cf71f.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/9cd2d4ef49a79e62c6a0d5b6a89cf71f.png" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2020/01/0914720229ba0c41fd12d4af4ce26a2a.png" alt="http://forum.rcl-radio.ru/uploads/images/2020/01/0914720229ba0c41fd12d4af4ce26a2a.png" /></span> </p><br /><div class="codebox"><pre><code>#define IR_1 0x2FDD02F // Кнопка вверх
#define IR_2 0x2FD32CD // Кнопка вниз
#define IR_3 0x2FD906F // Кнопка &gt;
#define IR_4 0x2FDF20D // Кнопка &lt;
#define IR_5 0x2FD708F // Кнопка IN

#include &lt;Wire.h&gt; 
#include &lt;LiquidCrystal_I2C.h&gt;
#include &lt;BD3491FS.h&gt;
#include &lt;Encoder.h&gt;
#include &lt;EEPROM.h&gt;
#include &lt;MsTimer2.h&gt;
#include &lt;boarddefs.h&gt;
#include &lt;IRremote.h&gt;
  BD3491FS bd; 
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(8, 9);//  CLK, DT
  decode_results ir; 
   byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
   byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
   byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};  
   unsigned long time,oldPosition  = -999,newPosition; 
   int menu,w,w2,vol,vol_d,gr1,gr2,z,z0,z1,treb,treb_d,bass,bass_d,in,www,gain1,gain2,gain3,gain4,gain5,gain6,gain0,gain_d,sur; 

void setup(){
  irrecv.enableIRIn();lcd.init();lcd.backlight();
  lcd.setCursor(0,0);lcd.print(&quot;    BD3491FS    &quot;);delay(2000);cl();
  Serial.begin(9600); lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
  pinMode(10,INPUT);  // МЕНЮ КНОПКА SW энкодера
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-87;treb = EEPROM.read(1)-7;bass = EEPROM.read(2)-7;
   in = EEPROM.read(3);sur = EEPROM.read(10);
   gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);
   gain4 = EEPROM.read(7);gain5 = EEPROM.read(8);gain6 = EEPROM.read(9);
   audio();
}

void loop(){
  if(digitalRead(10)==LOW){menu++;cl();time=millis();w=1;w2=1;if(menu&gt;4){menu=0;}}// меню
  if(digitalRead(2)==HIGH){in++;;cl();time=millis();w=1;w2=1;www=1;if(in&gt;5){in=0;};lcd.setCursor(0,0);lcd.print(&quot;    INPUT &quot;);lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА I

 ////////////////////// IR /////////////////////////////////////////////////
  if ( irrecv.decode( &amp;ir )) {Serial.print(&quot;0x&quot;);Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
  if(ir.value==IR_1){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu&gt;4){menu=0;}}// меню кнопка вверх 
  if(ir.value==IR_2){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu&lt;0){menu=4;}}// меню кнопка вниз
  if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;www=1;if(in&gt;5){in=0;};lcd.setCursor(0,0);lcd.print(&quot;    INPUT &quot;);lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

/////////////////////////////// VOLUME -87 ... +0 дБ | step 1 dB////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();} 
     lcd.setCursor(0,0);lcd.print(&quot;VOLUME  &quot;);
     lcd.print(&quot; &quot;);lcd.print(vol);lcd.print(&quot; &quot;);lcd.setCursor(13,0);lcd.print(&quot;dB&quot;);vol_d=vol+48;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=vol_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}  

///////////////////////// TREBLE +/-14 dB | step 2 dB/////////////////////////////////////////////////////////
   if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();} 
   lcd.setCursor(0,0);lcd.print(&quot;TREBLE  &quot;);
   lcd.print(&quot; &quot;);lcd.print(treb*2);lcd.print(&quot; &quot;);lcd.setCursor(13,0);lcd.print(&quot;dB&quot;);treb_d=treb*2+14;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=treb_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}   
  
/////////////////////// BASS +/-14 dB | step 2 dB///////////////////////////////////////////////////////////
   if(menu==2){
     if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;  
    
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();} 
   lcd.setCursor(0,0);lcd.print(&quot;BASS    &quot;);
   lcd.print(&quot; &quot;);lcd.print(bass*2);lcd.print(&quot; &quot;);lcd.setCursor(13,0);lcd.print(&quot;dB&quot;);bass_d=bass*2+14;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=bass_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}} 

   //////////////// IN + GAIN /////////////////////////////////////////////////////////////
   if(menu==3){ 
       switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;
     case 3: gain0 = gain4;break;
     case 4: gain0 = gain5;break;
     case 5: gain0 = gain6;break;
     }
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();w2=1;gain_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();w2=1;gain_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;

    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;gain_func();audio();} 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;
     case 3: gain4 = gain0;break;
     case 4: gain5 = gain0;break;
     case 5: gain6 = gain0;break;
     } 
    if(www==1){audio();www=0;}
  lcd.setCursor(0,0);lcd.print(&quot;Gain IN &quot;);lcd.print(in+1);
      lcd.setCursor(10,0);lcd.print(&quot; &quot;);lcd.print(gain0*2);lcd.print(&quot; &quot;);lcd.setCursor(14,0);lcd.print(&quot;dB&quot;);gain_d=gain0*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=gain_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+6,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+6,1);lcd.print(&quot;   &quot;);}}
   if(z1==3){lcd.setCursor(z0+6,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+6,1);lcd.write((uint8_t)2);}}w2=0;}

  ////////////////////////////// Surround ////////////////////////////////////////////////////
 if(menu==4){  
     if(ir.value==IR_3){sur++;gr1=1;gr2=0;cl1();w2=1;sur_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){sur++;gr2=0;cl1();w2=1;sur_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){sur--;gr1=0;gr2=1;cl1();w2=1;sur_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){sur--;gr1=0;cl1();w2=1;sur_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt; 
  
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    sur=sur+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;sur_func();audio();} 

    lcd.setCursor(0,0);lcd.print(&quot;Surround Gain&quot;);
    lcd.setCursor(0,1);
      switch(sur){
         case 0: lcd.print(&quot;OFF   &quot;);break;
         case 1: lcd.print(&quot;LOW   &quot;);break;
         case 2: lcd.print(&quot;MIDDLE&quot;);break;
         case 3: lcd.print(&quot;HIGH  &quot;);break;}}  
  


 ///////////////////// EEPROM ///////////////////////////////////////////////////////////////         
  if(millis()-time&gt;10000 &amp;&amp; w==1){
     EEPROM.update(0,vol+87);EEPROM.update(1,treb+7);EEPROM.update(2,bass+7);
     EEPROM.update(3,in);EEPROM.update(10,sur);
     EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
     EEPROM.update(7,gain4);EEPROM.update(8,gain5);EEPROM.update(9,gain6);
     menu=0;w=0;w2=1;cl();}
  
  }//loop

void sur_func(){if(sur&gt;3){sur=0;}if(sur&lt;0){sur=3;}}
void gain_func(){if(gain0&lt;0){gain0=0;}if(gain0&gt;7){gain0=7;}}
void bass_func(){if(bass&gt;7){bass=7;}if(bass&lt;-7){bass=-7;}} 
void treb_func(){if(treb&gt;7){treb=7;}if(treb&lt;-7){treb=-7;}}
void vol_func(){if(vol&lt;-87){vol=-87;}if(vol&gt;0){vol=0;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void to_Timer(){newPosition = myEnc.read()/4;}  

void audio(){
    bd.setSelect(in);// int 0...7 === A B C D E F INPUT_SHORT INPUT_MUTE
    bd.setIn_gain(gain0); // int 0...7 === 0...14 dB    
    bd.setVol_1(abs(vol)); // int 0...87 === 0...-87 dB
    bd.setVol_2(abs(vol)); // int 0...87 === 0...-87 dB
    bd.setBass(bass); // int -7...0...+7 === -7...+7 dB
    bd.setTreb(treb); // int -7...0...+7 === -7...+7 dB
    bd.setSurround(sur); // int 0...3 === OFF LOW MIDDLE HIGH
  }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2020-01-20T15:35:00Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=760#p760</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BD3491FS]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=451#p451" />
			<content type="html"><![CDATA[<p><a href="https://github.com/liman324/BD3491FS.git">https://github.com/liman324/BD3491FS.git</a></p><p>BD3491FS.h</p><div class="codebox"><pre><code>// ALEXSANDER LIMAN
// liman324@yandex.ru
// rcl-radio.ru
// 08.11.2019

#ifndef BD3491FS_H
#define BD3491FS_H

#define BD3491FS_address 0b1000001 

#define INPUT_SELECT        0x04
#define INPUT_GAIN          0x06
#define VOLUME_GAIN_1       0x21
#define VOLUME_GAIN_2       0x22
#define BASS_GAIN           0x51
#define TREBLE_GAIN         0x57
#define SURROUND            0x78

#include &lt;Arduino.h&gt;
class BD3491FS
{
  public:
    BD3491FS();
    void setSelect(int in);// int 0...7 === A B C D E F INPUT_SHORT INPUT_MUTE
    void setIn_gain(int in_gain); // int 0...7 === 0...20 dB    
    void setVol_1(int vol_1); // int 0...87 === 0...-87 dB
    void setVol_2(int vol_2); // int 0...87 === 0...-87 dB
    void setBass(int bass); // int -7...0...+7 === -7...+7 dB
    void setTreb(int treb); // int -7...0...+7 === -7...+7 dB
    void setSurround(int sur); // int 0...3 === OFF LOW MIDDLE HIGH
    
  private:
    void writeWire(char a, char b);
};
    
#endif //BD3491FS_H</code></pre></div><p>BD3491FS.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;Wire.h&gt;
#include &quot;BD3491FS.h&quot;

BD3491FS::BD3491FS(){
    Wire.begin();
}

void BD3491FS::setSelect(int in){
     writeWire(INPUT_SELECT, in); 
}

void BD3491FS::setIn_gain(int in_gain){
     switch(in_gain){
       case 0: in_gain = 0b00000000;break;
       case 1: in_gain = 0b00000010;break;
       case 2: in_gain = 0b00000100;break;
       case 3: in_gain = 0b00000110;break;
       case 4: in_gain = 0b00001000;break;
       case 5: in_gain = 0b00001100;break;
       case 6: in_gain = 0b00010000;break;
       case 7: in_gain = 0b00010100;break;
}
     writeWire(INPUT_GAIN, in_gain); 
}

void BD3491FS::setVol_1(int vol_1){
     writeWire(VOLUME_GAIN_1, vol_1 + 0b10000000); 
}

void BD3491FS::setVol_2(int vol_2){
     writeWire(VOLUME_GAIN_2, vol_2 + 0b10000000); 
}

void BD3491FS::setBass(int bass){
     switch(bass){
       case 0: bass = 0b00000000;break;
       case 1: bass = 0b00000010;break;
       case 2: bass = 0b00000100;break;
       case 3: bass = 0b00000110;break;
       case 4: bass = 0b00001000;break;
       case 5: bass = 0b00001010;break;
       case 6: bass = 0b00001100;break;
       case 7: bass = 0b00001110;break;
       case -1: bass = 0b10000010;break;
       case -2: bass = 0b10000100;break;
       case -3: bass = 0b10000110;break;
       case -4: bass = 0b10001000;break;
       case -5: bass = 0b10001010;break;
       case -6: bass = 0b10001100;break;
       case -7: bass = 0b10001110;break;
}
     writeWire(BASS_GAIN, bass); 
}

void BD3491FS::setTreb(int treb){
     switch(treb){
       case 0: treb = 0b00000000;break;
       case 1: treb = 0b00000010;break;
       case 2: treb = 0b00000100;break;
       case 3: treb = 0b00000110;break;
       case 4: treb = 0b00001000;break;
       case 5: treb = 0b00001010;break;
       case 6: treb = 0b00001100;break;
       case 7: treb = 0b00001110;break;
       case -1: treb = 0b10000010;break;
       case -2: treb = 0b10000100;break;
       case -3: treb = 0b10000110;break;
       case -4: treb = 0b10001000;break;
       case -5: treb = 0b10001010;break;
       case -6: treb = 0b10001100;break;
       case -7: treb = 0b10001110;break;
}
     writeWire(TREBLE_GAIN, treb); 
}

void BD3491FS::setSurround(int sur){
     switch(sur){
       case 0: sur = 0b10000000;break;
       case 1: sur = 0b10000101;break;
       case 2: sur = 0b10001010;break;
       case 3: sur = 0b10001111;break;
}
     writeWire(SURROUND, sur); 
}

void BD3491FS::writeWire(char a, char b){
  Wire.beginTransmission(BD3491FS_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}</code></pre></div><p>BD3491.ino</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt; 
#include &lt;BD3491FS.h&gt;
BD3491FS bd; 

void setup(){
   Wire.begin();
   audio();
}

void loop(){}

void audio(){
    bd.setSelect(0);// int 0...7 === A B C D E F INPUT_SHORT INPUT_MUTE
    bd.setIn_gain(0); // int 0...7 === 0...20 dB    
    bd.setVol_1(0); // int 0...87 === 0...-87 dB
    bd.setVol_2(0); // int 0...87 === 0...-87 dB
    bd.setBass(0); // int -7...0...+7 === -7...+7 dB
    bd.setTreb(0); // int -7...0...+7 === -7...+7 dB
    bd.setSurround(1); // int 0...3 === OFF LOW MIDDLE HIGH
  }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2019-12-12T12:27:40Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=451#p451</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[BD3491FS]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=323#p323" />
			<content type="html"><![CDATA[<p><strong>Sound Processor with Built-in Surround Sound Function </strong></p><p>General Description<br />Built in stereo 6 input selectors and volume that there is<br />not an impedance change of a volume terminal. And this<br />is sound processor can realize 2-band equalizer<br />(Bass/Treble, Gain±14dB / 2dB_step) and BassBoost,<br />Output gain, Surround by external components.</p><p>Features<br /> Equipped with 6 single ended stereo input<br />selectors<br /> Built-in input gain controller suitable for mobile audio.<br /> Volume input terminal can be used as a microphone<br />input terminal since its impedance remains constant<br />even if volume setting is changed.<br /> Bi-CMOS process is suitable for the design of low<br />current and low energy. It also provides more quality<br />for Bi-CMOS small scale regulator and heat in a set.<br /> The package of this IC is SSOP-A32. Sound input<br />terminals and output terminals arrangement is<br />optimized for easy and fast layout of PCB pattern. At<br />the same time, it minimizes PCB area.</p><p>Applications<br /> Suitable for mini-components or micro components.<br />Used for audio equipment of TV, DVD, etc. </p><p>Key Specification<br /> Current upon no signal: 7mA(typ)<br /> Total Harmonic Distortion: 0.002%(typ)<br /> Maximum Input Voltage: 2.4Vrms(typ)<br /> Crosstalk between Selectors: 100dB(typ)<br /> Volume Control Range: 0dB to -87dB<br /> Output Noise Voltage: 5µVrms(typ)<br /> Residual Output Noise Voltage: 5µVrms(typ)<br /> Operating Temperature Range: -40℃ to +85℃</p><p><span class="attention-yellow"></span> </p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2019/11/66d0cebfd780026eb9dce79659c77725.png" alt="http://forum.rcl-radio.ru/uploads/images/2019/11/66d0cebfd780026eb9dce79659c77725.png" /></span> </p><p><a href="https://github.com/liman324/BD3491FS.git">https://github.com/liman324/BD3491FS.git</a></p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2019-11-08T16:23:59Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=323#p323</id>
		</entry>
</feed>
