<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; PT2329]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=420&amp;type=atom" />
	<updated>2021-09-04T04:51:57Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=420</id>
		<entry>
			<title type="html"><![CDATA[Re: PT2329]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=4660#p4660" />
			<content type="html"><![CDATA[<p>Добавлена функция будильника</p><div class="codebox"><pre><code>#define UP    0x33B810EF
#define DOWN  0x33B8E01F
#define MENU  0x33B820DF
#define MUTE  0x33B8946B
#define IN    0x33B8C03F 
#define POWER 0x33B800FF

#define BRIG_L 50
#define BRIG_H 250

#include &lt;PT2329.h&gt;            // http://rcl-radio.ru/wp-content/uploads/2021/09/PT2329.zip
#include &lt;Wire.h&gt;              // Входит в состав Arduino IDE
#include &lt;Encoder.h&gt;           // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include &lt;MsTimer2.h&gt;          // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include &lt;EEPROM.h&gt;            // Входит в состав Arduino IDE
#include &lt;LiquidCrystal_I2C.h&gt; // http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1
#include &lt;boarddefs.h&gt;         // Входит в состав библиотеки IRremote
#include &lt;IRremote.h&gt;          // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip 
#include &lt;DS3231.h&gt;            // https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
 Encoder myEnc(9, 8);//CLK, DT подключение энкодера
 decode_results ir;
 IRrecv irrecv(12); // указываем вывод модуля IR приемника
 DS3231 clock;
 RTCDateTime DateTime;
 PT2329 pt;

 byte v1[8] = {0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07};
 byte v2[8] = {0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00};      
 byte v3[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F};
 byte v4[8] = {0x1F,0x1F,0x00,0x00,0x00,0x00,0x1F,0x1F};
 byte v5[8] = {0x1C,0x1C,0x00,0x00,0x00,0x00,0x1C,0x1C};
 byte v6[8] = {0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C};
 byte v7[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07};
 byte v8[8] = {0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00}; 
 byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3,w,w1,gr1,gr2,power=0;
 unsigned long time,oldPosition  = -999,newPosition,times_in;
 int a[6],menu,fun_d,vol,vol_old,in,bass,treb,mute,fun,ball,chl,chr,alarm_h,alarm_m,alarm,cl_l,start_power;
 int hour,secon,minut,x,z,z0,z1,www;
 byte sur_fun,mode_fun,in_x;
 int gain0, gain1,gain2,gain3,gain4,gain5;

void setup() {
  Wire.begin();Serial.begin(9600);irrecv.enableIRIn();
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  lcd.init();lcd.backlight();clock.begin(); 
  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);
  //  clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  pinMode(6,OUTPUT);        // PWM output
  analogWrite(6,BRIG_H);
  lcd.setCursor(5,0);lcd.print(&quot;PT2329&quot;);delay(1000);lcd.clear();// ЗАСТАВКА
  pinMode(10,INPUT);        // КНОПКА ЭНКОДЕРA
  pinMode(2,INPUT_PULLUP);  // INPUT
  pinMode(3,INPUT_PULLUP);  // MUTE
  pinMode(4,INPUT_PULLUP);  // POWER
  pinMode(5,INPUT_PULLUP);  // ALARM
  pinMode(13,OUTPUT);       // OUTPUT STANDBY
  vol = EEPROM.read(0);bass = EEPROM.read(1)-15;treb = EEPROM.read(2)-15;fun = EEPROM.read(3);in = EEPROM.read(4);
  gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);gain4 = EEPROM.read(8);gain5 = EEPROM.read(9);
  ball = EEPROM.read(10)-4;alarm = EEPROM.read(11);alarm_h = EEPROM.read(12);alarm_m = EEPROM.read(13);
  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;}
  audio();
}

void loop() {
 ////////// IR ////////////////////////////////////////////////////////////////////
 if ( irrecv.decode( &amp;ir )) {Serial.print(&quot;0x&quot;);Serial.println( ir.value,HEX);irrecv.resume();delay(50);}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
 if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта 
///////// BUTTON ///////////////////////////////////////////////////////////////////
 if(power==0){
 if(digitalRead(10)==LOW||ir.value==MENU){menu++;cl();myEnc.write(0);time=millis();in_x=0;w=1;w1=1;if(menu&gt;4){menu=0;}}// MENU
 if(digitalRead(2)==LOW||ir.value==IN){in++;cl();time=millis();times_in=millis();in_x=1;w=1;www=1;menu=100;if(in&gt;4){in=0;}}// IN
 if((digitalRead(3)==LOW||ir.value==MUTE)&amp;&amp;mute==0){mute=1;cl();vol_old=vol;vol=127+4;menu=100;myEnc.write(0);audio();lcd.setCursor(6,0);lcd.print(&quot;MUTE&quot;);}
 if((digitalRead(3)==LOW||ir.value==MUTE)&amp;&amp;mute==1){mute=0;cl();vol=vol_old;menu=0;w=1;myEnc.write(0);time=millis();audio();cl();}
 }else{menu=100;}
 // standby output
 if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}
 /// power ///
 if((digitalRead(4)==LOW||ir.value==POWER)&amp;&amp;power==0){power=1;menu=100;analogWrite(6,BRIG_L);cl();myEnc.write(0);vol_old=vol;vol=127+4;
  lcd.setCursor(4,0);lcd.print(&quot;POWER OFF&quot;);audio();delay(2000);cl();}
 if((digitalRead(4)==LOW||ir.value==POWER||start_power==1)&amp;&amp;power==1&amp;&amp;digitalRead(10)==HIGH&amp;&amp;digitalRead(5)==HIGH){
  start_power=0;power=0;menu=0;analogWrite(6,BRIG_H);cl();myEnc.write(0);vol=vol_old;w=1;
  lcd.setCursor(4,0);lcd.print(&quot;POWER  ON&quot;);audio();delay(2000);cl();}  
//////// VOLUME ////////////////////////////////////////////////////////////////  
 if(menu==0){ 
 if(ir.value==UP){vol--;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка &gt; 
 if(ir.value==0xFFFFFFFF and gr1==1){vol--;gr2=0;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
 if(ir.value==DOWN){vol++;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка &lt;
 if(ir.value==0xFFFFFFFF and gr2==1){vol++;gr1=0;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
 if (newPosition != oldPosition){oldPosition = newPosition;
 vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;vol_fun();audio();}
 lcd.setCursor(0,0);lcd.print(F(&quot;VOLUME &quot;));
 lcd.setCursor(0,1);lcd.print(F(&quot;IN_&quot;));lcd.print(in+1);
 switch(fun){
  case 0: lcd.setCursor(5,1);lcd.print(F(&quot;PB &quot;));break;
  case 1: lcd.setCursor(5,1);lcd.print(F(&quot;TN &quot;));break;
  case 2: lcd.setCursor(5,1);lcd.print(F(&quot;TSL&quot;));break;
  case 3: lcd.setCursor(5,1);lcd.print(F(&quot;TSH&quot;));break;
  }
 fun_d = 87-vol;if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}}
//////// BASS ////////////////////////////////////////////////////////////////  
 if(menu==1){ 
 if(ir.value==UP){bass++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка &gt; 
 if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
 if(ir.value==DOWN){bass--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка &lt;
 if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
 if (newPosition != oldPosition){oldPosition = newPosition;
 bass=bass-newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;bass_fun();audio();}
 lcd.setCursor(0,0);lcd.print(F(&quot;BASS &quot;));fun_d = bass;
 if(fun_d&lt;0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(&quot; &quot;);}
 if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} 
//////// TREBLE ////////////////////////////////////////////////////////////////  
 if(menu==2){ 
 if(ir.value==UP){treb++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка &gt; 
 if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
 if(ir.value==DOWN){treb--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка &lt;
 if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
 if (newPosition != oldPosition){oldPosition = newPosition;
 treb=treb-newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;treb_fun();audio();}
 lcd.setCursor(0,0);lcd.print(F(&quot;TREBLE &quot;));fun_d = treb;
 if(fun_d&lt;0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(&quot; &quot;);}
 if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} 
//////// BALANCE /////////////////////////////////////////////////////////////// 
 if(menu==3){ 
 if(ir.value==UP){ball++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;ball_fun();audio();}// кнопка &gt; 
 if(ir.value==DOWN){ball--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;ball_fun();audio();}// кнопка &lt;
 if (newPosition != oldPosition){oldPosition = newPosition;
 ball=ball-newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;ball_fun();audio();}
 lcd.setCursor(4,0);lcd.print(F(&quot;   &lt;&gt;   &quot;));lcd.setCursor(4,1);lcd.print(F(&quot;CHL  CHR&quot;));
 chl=(4+ball)-4;chr=(4-ball)-4;
 if(chl&lt;0){lcd.setCursor(12,0);chl=abs(chl);lcd.write((uint8_t)3);}else{lcd.setCursor(12,0);lcd.print(&quot; &quot;);}
 if(chr&lt;0){lcd.setCursor(0,0);chr=abs(chr);lcd.write((uint8_t)3);}else{lcd.setCursor(0,0);lcd.print(&quot; &quot;);}
 if(w==1){w=0;a[0]=chl;a[1]=chr;
 for(i=0;i&lt;2;i++){
      switch(i){
        case 0: e1=1,e2=2,e3=3;break;
        case 1: e1=13,e2=14,e3=15;break;
        }
      switch(a[i]){
        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);
 }}}
/////// TONE CONTROL ///////////////////////////////////////////////////////////
 if(menu==4){
 if(ir.value==UP){fun++;gr1=1;gr2=0;cl1();time=millis();www=1;w=1;w1=1;fun_fun();audio();}// кнопка &gt; 
 if(ir.value==DOWN){fun--;gr1=0;gr2=1;cl1();time=millis();www=1;w=1;w1=1;fun_fun();audio();}// кнопка &lt;   
 if (newPosition != oldPosition){oldPosition = newPosition;
 fun=fun-newPosition;myEnc.write(0);newPosition=0;time=millis();www=1;w=1;w1=1;fun_fun();}
 lcd.setCursor(2,0);lcd.print(F(&quot;TONE CONTROL&quot;));
 switch(fun){
  case 0: sur_fun=0;mode_fun=0;lcd.setCursor(0,1);lcd.print(&quot;     BYPASS     &quot;);break;// Bypass
  case 1: sur_fun=0;mode_fun=1;lcd.setCursor(0,1);lcd.print(&quot;      TONE      &quot;);break;// Tone
  case 2: sur_fun=0;mode_fun=2;lcd.setCursor(0,1);lcd.print(&quot; TONE&amp;SURR_LOW  &quot;);break;// Tone&amp;Sur/low
  case 3: sur_fun=1;mode_fun=2;lcd.setCursor(0,1);lcd.print(&quot; TONE&amp;SURR_HIGH &quot;);break;// Tone&amp;Sur/High
  }if(www==1){audio();www=0;}}

////////////////////////// GAIN IN /////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){ menu=100;
if(digitalRead(10)==LOW){menu=0;cl();myEnc.write(0);time=millis();in_x=0;w=1;w1=1;}// MENU
   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;}
    if(ir.value==UP){gain0++;gr1=1;gr2=0;cl1();times_in=millis();w=1;gain_func();www=1;}// кнопка &gt; 
    if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();times_in=millis();w=1;gain_func();www=1;}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
    if(ir.value==DOWN){gain0--;gr1=0;gr2=1;cl1();times_in=millis();w=1;gain_func();www=1;}// кнопка &lt; 
    if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();times_in=millis();w=1;gain_func();www=1;}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
    if (newPosition != oldPosition) {oldPosition = newPosition;
    gain0=gain0-newPosition;myEnc.write(0);newPosition=0;times_in=millis();www=1;w=1;gain_func();}   
   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;}
 if(www==1){audio();www=0;}
 lcd.setCursor(0,0);lcd.print(F(&quot;INPUT &quot;));lcd.print(in+1);fun_d = gain0;
 lcd.setCursor(0,1);lcd.print(F(&quot;GAIN &quot;));
 if(fun_d&lt;0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(&quot; &quot;);}
 if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}
 if(millis()-times_in&gt;3000){in_x=0;cl();menu=0;w=1;w1=1;time=millis();}} 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    

/////////////////// ЧАСЫ ///////////////////////////////////////////////////////////////////
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;   
if(power==1&amp;&amp;digitalRead(5)==HIGH){
  if(cl_l==1){cl();cl_l=0;}
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
     a[4]=DateTime.second/10;
     a[5]=DateTime.second%10;
   for(x=0;x&lt;4;x++){
    switch(x){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=3,e2=4,e3=5;break;
        case 2: e1=7,e2=8,e3=9;break;
        case 3: e1=10,e2=11,e3=12;break;
   }digit();}
 
   lcd.setCursor(6,0);lcd.print(&quot;.&quot;);lcd.setCursor(6,1);lcd.print(&quot;.&quot;);
   lcd.setCursor(14,1);lcd.print(a[4]);lcd.setCursor(15,1);lcd.print(a[5]);
   if(alarm==1){lcd.setCursor(14,0);lcd.print(&quot;**&quot;);}else{lcd.setCursor(14,0);lcd.print(&quot;  &quot;);}   
//// set time ////
  if(digitalRead(10)==LOW&amp;&amp;digitalRead(2)==LOW){hour++;if(hour&gt;23){hour=0;} clock.setDateTime(2021, 8, 28, hour, minut, secon);delay(100);}// input button HH++
  if(digitalRead(10)==LOW&amp;&amp;digitalRead(3)==LOW){minut++;if(minut&gt;59){minut=0;} clock.setDateTime(2021, 8, 28, hour, minut, secon);delay(100); }// mute MM++
  if(digitalRead(10)==LOW&amp;&amp;digitalRead(4)==LOW){secon=0; clock.setDateTime(2021, 8, 28, hour, minut, secon);delay(100); }//  power SS=0
}     

/////////////////// Будильник ///////////////////////////////////////////////////////////////////  
if(power==1&amp;&amp;digitalRead(5)==LOW){cl_l=1;
     a[0]=alarm_h/10;
     a[1]=alarm_h%10;
     a[2]=alarm_m/10;
     a[3]=alarm_m%10;
   for(x=0;x&lt;4;x++){
    switch(x){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=3,e2=4,e3=5;break;
        case 2: e1=7,e2=8,e3=9;break;
        case 3: e1=10,e2=11,e3=12;break;
   }digit();}
 
   lcd.setCursor(6,0);lcd.print(&quot;.&quot;);lcd.setCursor(6,1);lcd.print(&quot;.&quot;);
   lcd.setCursor(13,0);lcd.print(&quot;ALR&quot;);
   if(alarm==1){lcd.setCursor(13,1);lcd.print(&quot;ON &quot;);}else{lcd.setCursor(13,1);lcd.print(&quot;OFF&quot;);}   
//// set time ////
  if(digitalRead(2)==LOW){alarm_h++;if(alarm_h&gt;23){alarm_h=0;}delay(100);}// input button HH++
  if(digitalRead(3)==LOW){alarm_m++;if(alarm_m&gt;59){alarm_m=0;}delay(100); }// mute MM++
  if(digitalRead(4)==LOW&amp;&amp;alarm==0){alarm=1;delay(300);}
  if(digitalRead(4)==LOW&amp;&amp;alarm==1){alarm=0;delay(300);}
}  
if(alarm==1&amp;&amp;hour==alarm_h&amp;&amp;minut==alarm_m&amp;&amp;secon==0){start_power=1;}

 
/////// EEPROM //////////////////////////////////////////////////
 if(millis()-time&gt;10000 &amp;&amp; w1==1&amp;&amp;mute==0&amp;&amp;power==0){
     EEPROM.update(0,vol);EEPROM.update(1,bass+15);EEPROM.update(2,treb+15);EEPROM.update(3,fun);EEPROM.update(4,in);
     EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);EEPROM.update(8,gain4);EEPROM.update(9,gain5);
     EEPROM.update(10,ball+4);EEPROM.update(11,alarm);EEPROM.update(12,alarm_h);EEPROM.update(13,alarm_m);
     if(menu!=0){lcd.clear();}menu=0;w=1;w1=0;}
}// end loop

void ball_fun(){if(ball&gt;4){ball=4;}if(ball&lt;-4){ball=-4;}}
void fun_fun(){if(fun&gt;3){fun=0;}if(fun&lt;0){fun=3;}}
void gain_func(){if(gain0&lt;0){gain0=0;}if(gain0&gt;12){gain0=12;}}
void cl(){ir.value=0;delay(300);lcd.clear();}  
void cl1(){ir.value=0;delay(300);} 
void vol_fun(){if(vol&gt;87){vol=87;}if(vol&lt;8){vol=8;}}
void bass_fun(){if(bass&lt;-15){bass=-15;}if(bass&gt;15){bass=15;}}
void treb_fun(){if(treb&lt;-15){treb=-15;}if(treb&gt;15){treb=15;}}
void to_Timer(){newPosition = myEnc.read()/4;}
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 cif(){
  for(i=0;i&lt;2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=12,e2=13,e3=14;break;
        }
      switch(a[i]){
        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 audio(){
      pt.LCH_Volume(vol-4+ball); 
// l_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      pt.RCH_Volume(vol-4-ball); 
// r_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      pt.setBass(bass);
// set_bass &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      pt.setTreb(treb);
// set_treb &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      pt.setIn_gain(gain0);
// in_gain &gt;&gt;&gt; byte 0...12 === 0...12 dB step 1 dB
      pt.setIn_sel(in+1, 1, 0, sur_fun, mode_fun);
// in_sel &gt;&gt;&gt; byte 1..6 === in1...in6, int 0 === mute
// rec &gt;&gt;&gt; byte 0...1 === If A=0 means IN6 output OFF, than A=1 means IN6 output ON
// rec_gain &gt;&gt;&gt; byte 0 === -2 dB, 1 === 0 dB
// surr &gt;&gt;&gt; byte 0 === Surround Low, 1 === Surround High
// mode &gt;&gt;&gt; byte 0 === Bypass, 1 === Tone, 2 === Tone &amp; Sur
  }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-09-04T04:51:57Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=4660#p4660</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: PT2329]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=4659#p4659" />
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2021/09/070918e23e388859d9223ce4f958c480.png" alt="http://forum.rcl-radio.ru/uploads/images/2021/09/070918e23e388859d9223ce4f958c480.png" /></span></p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-09-02T17:04:29Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=4659#p4659</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[PT2329]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=4650#p4650" />
			<content type="html"><![CDATA[<p><span class="attention-yellow"></span> </p><p>PT2329.h</p><div class="codebox"><pre><code>// liman324@yandex.ru rcl-radio.ru


#ifndef PT2329_H
#define PT2329_H

#define PT2329_address 0b1000001

#define LCH_VOL      0b00000000
#define RCH_VOL      0b00000001
#define BASS         0b00000010
#define TREB         0b00000011
#define IN_GAIN      0b00000100
#define IN_SEL       0b00000101

#include &lt;Arduino.h&gt;
class PT2329
{
  public:
    PT2329();
      void LCH_Volume(byte l_volume); 
// l_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      void RCH_Volume(byte r_volume); 
// r_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      void setBass(char set_bass);
// set_bass &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      void setTreb(char set_treb);
// set_treb &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      void setIn_gain(byte in_gain);
// in_gain &gt;&gt;&gt; byte 0...12 === 0...12 dB step 1 dB
      void setIn_sel(byte in_sel, byte rec, byte rec_gain, byte surr, byte mode);
// in_sel &gt;&gt;&gt; byte 1..6 === in1...in6, int 0 === mute
// rec &gt;&gt;&gt; byte 0...1 === If A=0 means IN6 output OFF, than A=1 means IN6 output ON
// rec_gain &gt;&gt;&gt; byte 0 === -2 dB, 1 === 0 dB
// surr &gt;&gt;&gt; byte 0 === Surround Low, 1 === Surround High
// mode &gt;&gt;&gt; byte 0 === Bypass, 1 === Tone, 2 === Tone &amp; Sur
		
 private:
	void writeWire(byte a, byte b);
};
	
#endif //PT2329_H</code></pre></div><p>PT2329.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;Wire.h&gt;
#include &quot;PT2329.h&quot;

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

void PT2329::LCH_Volume(byte l_volume){
  writeWire(LCH_VOL, l_volume &lt;&lt; 1);	
}
void PT2329::RCH_Volume(byte r_volume){
  writeWire(RCH_VOL, r_volume &lt;&lt; 1);	
} 

void PT2329::setBass(char set_bass){
  int bass_f;
  if(set_bass&gt;=0){bass_f = set_bass + 0b10000;}
   else{bass_f = abs(set_bass);}
  writeWire(BASS, bass_f &lt;&lt; 3);	
}
void PT2329::setTreb(char set_treb){
  int treb_f;
  if(set_treb&gt;=0){treb_f = set_treb + 0b10000;}
   else{treb_f = abs(set_treb);}
  writeWire(TREB, treb_f &lt;&lt; 3);	
}

void PT2329::setIn_gain(byte in_gain){
  writeWire(IN_GAIN, in_gain &lt;&lt; 4);
}

void PT2329::setIn_sel(byte in_sel, byte rec, byte rec_gain, byte surr, byte mode){
  writeWire(IN_SEL, (in_sel &lt;&lt; 5) + (rec &lt;&lt; 4) + (rec_gain &lt;&lt; 3) + (surr &lt;&lt; 2) + (mode));
}


void PT2329::writeWire(byte a, byte b){
  Wire.beginTransmission(PT2329_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt;
#include &lt;PT2329.h&gt;
 PT2329 pt;

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

void loop() {
 

}

void audio(){
      pt.LCH_Volume(0); 
// l_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      pt.RCH_Volume(0); 
// r_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      pt.setBass(0);
// set_bass &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      pt.setTreb(0);
// set_treb &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      pt.setIn_gain(0);
// in_gain &gt;&gt;&gt; byte 0...12 === 0...12 dB step 1 dB
      pt.setIn_sel(1, 1, 0, 1, 2);
// in_sel &gt;&gt;&gt; byte 1..6 === in1...in6, int 0 === mute
// rec &gt;&gt;&gt; byte 0...1 === If A=0 means IN6 output OFF, than A=1 means IN6 output ON
// rec_gain &gt;&gt;&gt; byte 0 === -2 dB, 1 === 0 dB
// surr &gt;&gt;&gt; byte 0 === Surround Low, 1 === Surround High
// mode &gt;&gt;&gt; byte 0 === Bypass, 1 === Tone, 2 === Tone &amp; Sur
  }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-08-30T05:18:52Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=4650#p4650</id>
		</entry>
</feed>
