1

Тема: PT2258 + OLED 0.96 + encoder + IR

Основная статья - http://rcl-radio.ru/?p=128120

D10 -  MUTE КНОПКА SW энкодера
D2 -  КНОПКА SET
D4 - КНОПКА POWER
D5 - Выход управления STANDBY усилителя

http://forum.rcl-radio.ru/uploads/images/2022/11/283fb4b4ac7fad07a580d1c614f9b085.png
http://forum.rcl-radio.ru/uploads/images/2022/11/73c794ca7b745bb7b3cb870141aa13c9.png
http://forum.rcl-radio.ru/uploads/images/2022/11/5c8496d55c0239593a92bcf1d8be9b40.png

Если нужна инверсия выхода STANDBY, то замените строку:

    if(power==1){digitalWrite(5,LOW);}else{digitalWrite(5,HIGH);}
на
    if(power==0){digitalWrite(5,LOW);}else{digitalWrite(5,HIGH);}


#define POWER     0x2FD00FF
#define DW        0x2FD906F
#define UP        0x2FDF20D
#define MUT       0x2FDEA15
#define SET       0x2FD6A95

#include <Wire.h> 
#include <OLED_I2C.h>           // http://rcl-radio.ru/wp-content/uploads/2022/01/OLED_I2C.zip
#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
#include <PT2258.h> // https://github.com/liman324/PT2258.git

  PT2258 pt;
  OLED  myOLED(SDA, SCL, 8);
  extern uint8_t SmallFont[],BigNumbers[];
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(9, 8);// DT, CLK
  decode_results ir; 
  

  unsigned long times,oldPosition  = -999,newPosition;
  int vol,ch1,ch2,ch3,ch4,ch5,ch6,menu,mute;
  bool w,w2,gr1,gr2,power;

void setup(){
  Wire.begin();
  Wire.setClock(400000L);
  Serial.begin(9600);
  irrecv.enableIRIn();
  myOLED.begin();
  myOLED.setBrightness(100);
  pinMode(10,INPUT);         // MUTE КНОПКА SW энкодера
  pinMode(2,INPUT_PULLUP);   // КНОПКА SET
  pinMode(4,INPUT_PULLUP);   // КНОПКА POWER
  pinMode(5,OUTPUT);         // Выход управления STANDBY усилителя
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
  myOLED.print(F("Sound Processors"), CENTER, 10);
  myOLED.print(F("PT2258"), CENTER, 30);
  myOLED.update();
  delay(2000);
  vol = EEPROM.read(0);ch1 = EEPROM.read(1);ch2 = EEPROM.read(2);ch3 = EEPROM.read(3);
  ch4 = EEPROM.read(4);ch5 = EEPROM.read(5);ch6 = EEPROM.read(6);
  audio();

  }  

void loop(){
////////////////////////////////// IR ////////////////////////////////////////
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;w2=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта  

///////// BUTTON /////////////////////////////////////////////////////////////
 if(power==0){ 
  if((digitalRead(10)==LOW||ir.value==MUT)&&mute==0){mute=1;w=1;menu=100;cl();audio();myOLED.clrScr();myOLED.setFont(SmallFont);myOLED.print(F("MUTE"), CENTER, 25);myOLED.update();}
  if((digitalRead(10)==LOW||ir.value==MUT)&&mute==1){mute=0;w=1;menu=0;cl();audio();}  

  if(digitalRead(2)==LOW||ir.value==SET){menu++;if(menu>6){menu=0;}times=millis();w=1;w2=1;cl();} 
 }

/// POWER ////////////////////////////////////
    if((digitalRead(4)==LOW||ir.value==POWER)&&power==0){power=1;menu=100;myOLED.setBrightness(1);cl();myEnc.write(0);mute=1;
    myOLED.clrScr();myOLED.setFont(SmallFont);myOLED.print(F("POWER OFF"), CENTER, 10);myOLED.update();
    audio();delay(2000);cl();}
 
    if((digitalRead(4)==LOW||ir.value==POWER)&&power==1&&digitalRead(10)==HIGH){power=0;menu=0;myOLED.setBrightness(100);cl();myEnc.write(0);mute=0;w=1;
    myOLED.clrScr();myOLED.setFont(SmallFont);myOLED.print(F("POWER ON"), CENTER, 10);myOLED.update();
    audio();delay(2000);cl();}  
    /// standby output 
    if(power==1){digitalWrite(5,LOW);}else{digitalWrite(5,HIGH);} 

    
    

//////// VOLUME //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==0){
   if(newPosition != oldPosition){oldPosition = newPosition;vol=vol-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
 
   if(ir.value==DW){vol--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){vol--;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
   if(ir.value==UP){vol++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){vol++;gr1=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("VOLUME"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(64-vol, 75, 0);
  myOLED.drawLine(0, 30, 128, 30);
  myOLED.setFont(SmallFont);myOLED.print(F("LF"), LEFT, 35);myOLED.printNumI(-ch1, 40, 35);
  myOLED.setFont(SmallFont);myOLED.print(F("RF"), 70, 35);myOLED.printNumI(-ch2, 110, 35);
  myOLED.setFont(SmallFont);myOLED.print(F("LR"), LEFT, 45);myOLED.printNumI(-ch3, 40, 45);
  myOLED.setFont(SmallFont);myOLED.print(F("RR"), 70, 45);myOLED.printNumI(-ch4, 110, 45);
  myOLED.setFont(SmallFont);myOLED.print(F("CEN"), LEFT, 55);myOLED.printNumI(-ch5, 40, 55);
  myOLED.setFont(SmallFont);myOLED.print(F("SUB"), 70, 55);myOLED.printNumI(-ch6, 110, 55);
  myOLED.update();
  }}

//////// ATT LF //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==1){
   if(newPosition != oldPosition){oldPosition = newPosition;ch1=ch1-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch1_conf();audio();}
 
   if(ir.value==DW){ch1--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch1--;gr2=0;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch1++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch1++;gr1=0;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_LF"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch1, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }} 
//////// ATT RF //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==2){
   if(newPosition != oldPosition){oldPosition = newPosition;ch2=ch2-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch2_conf();audio();}
 
   if(ir.value==DW){ch2--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch2--;gr2=0;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch2++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch2++;gr1=0;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_RF"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch2, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }} 

//////// ATT LR //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==3){
   if(newPosition != oldPosition){oldPosition = newPosition;ch3=ch3-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch3_conf();audio();}
 
   if(ir.value==DW){ch3--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch3--;gr2=0;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch3++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch3++;gr1=0;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_LR"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch3, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}      

//////// ATT RR //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==4){
   if(newPosition != oldPosition){oldPosition = newPosition;ch4=ch4-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch4_conf();audio();}
 
   if(ir.value==DW){ch4--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch4--;gr2=0;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch4++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch4++;gr1=0;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_RR"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch4, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}   

//////// ATT CEN//////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==5){
   if(newPosition != oldPosition){oldPosition = newPosition;ch5=ch5-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch5_conf();audio();}
 
   if(ir.value==DW){ch5--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch5--;gr2=0;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch5++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch5++;gr1=0;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_CEN"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch5, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}  

//////// ATT SUB //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==6){
   if(newPosition != oldPosition){oldPosition = newPosition;ch6=ch6-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch6_conf();audio();}
 
   if(ir.value==DW){ch6--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch6--;gr2=0;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch6++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch6++;gr1=0;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_SUB"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch6, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}      


////////////////// EEPROM //////////////////////////////////////////////////////////////
 if(millis()-times>5000 && w2==1 && mute==0){
     EEPROM.update(0,vol);EEPROM.update(1,ch1);EEPROM.update(2,ch2);EEPROM.update(3,ch3);
     EEPROM.update(4,ch4);EEPROM.update(5,ch5);EEPROM.update(6,ch6);
     cl();menu=0;w2=0;w=1;}     
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     
  } // end loop 

void ch1_conf(){if(ch1<0){ch1=0;}if(ch1>15){ch1=15;}}
void ch2_conf(){if(ch2<0){ch2=0;}if(ch2>15){ch2=15;}}
void ch3_conf(){if(ch3<0){ch3=0;}if(ch3>15){ch3=15;}}
void ch4_conf(){if(ch4<0){ch4=0;}if(ch4>15){ch4=15;}}
void ch5_conf(){if(ch5<0){ch5=0;}if(ch5>15){ch5=15;}}
void ch6_conf(){if(ch6<0){ch6=0;}if(ch6>15){ch6=15;}}
void vol_func(){if(vol<0){vol=0;}if(vol>64){vol=64;}}
void to_Timer(){newPosition = myEnc.read()/4;}   
void cl(){myOLED.clrScr();ir.value=0;delay(200);}
void audio(){
        pt.clear(); 
      //  pt.setVolume(75); //  int 0...79     
        pt.setVol1(79-(vol+ch1)); //  int 0...79       
        pt.setVol2(79-(vol+ch2)); //  int 0...79 
        pt.setVol3(79-(vol+ch3)); //  int 0...79 
        pt.setVol4(79-(vol+ch4)); //  int 0...79 
        pt.setVol5(79-(vol+ch5)); //  int 0...79 
        pt.setVol6(79-(vol+ch6)); //  int 0...79 
        pt.setMute(mute); // mute 0 - off / 1 - on
  } 

2

Re: PT2258 + OLED 0.96 + encoder + IR

Спасибо огромное за вашу работу. Все работает. Вам теперь статейку написать нужно по этому контроллеру, интересующиеся найдутся. Еще разберусь с комутацией входов и если можно обращусь за помощью добавить переключение в скетч. Нужно еще с усилителем поковыряться выяснилось что один из каналов мертв. не даром мне его отдали.

3

Re: PT2258 + OLED 0.96 + encoder + IR

Вас как величают а то как то неудобно даже.

4

Re: PT2258 + OLED 0.96 + encoder + IR

Александр

5

Re: PT2258 + OLED 0.96 + encoder + IR

Основная статья - http://rcl-radio.ru/?p=128120

Добавил часы
Модуль часов DS3231 или DS1307

Для коррекции времени перейти в режим STANDBY (POWER OFF) нажать и удерживать кнопку энкодера, для корректировки часов нажать SET, для минут POWER

http://rcl-radio.ru/wp-content/uploads/2022/07/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-%D0%BE%D1%82-2022-07-18-22-20-19.png

#define POWER     0x2FD00FF
#define DW        0x2FD906F
#define UP        0x2FDF20D
#define MUT       0x2FDEA15
#define SET       0x2FD6A95

#include <Wire.h> 
#include <OLED_I2C.h>           // http://rcl-radio.ru/wp-content/uploads/2022/01/OLED_I2C.zip
#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
#include <PT2258.h> // https://github.com/liman324/PT2258.git
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/07/DS3231.zip

  PT2258 pt;
  DS3231 clock;RTCDateTime DateTime;
  OLED  myOLED(SDA, SCL, 8);
  extern uint8_t SmallFont[],BigNumbers[];
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(9, 8);// DT, CLK
  decode_results ir; 
  

  unsigned long times,oldPosition  = -999,newPosition;
  int vol,ch1,ch2,ch3,ch4,ch5,ch6,menu,mute;
  bool w,w2,gr1,gr2,power;
  int hour,minut,secon,old_sec;
  byte a[6];

void setup(){
  Wire.begin();
  Wire.setClock(400000L);
  Serial.begin(9600);
  irrecv.enableIRIn();
  myOLED.begin();
  myOLED.setBrightness(100);
  pinMode(10,INPUT);         // MUTE КНОПКА SW энкодера
  pinMode(2,INPUT_PULLUP);   // КНОПКА SET
  pinMode(4,INPUT_PULLUP);   // КНОПКА POWER
  pinMode(5,OUTPUT);         // Выход управления STANDBY усилителя
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
  myOLED.print(F("Sound Processors"), CENTER, 10);
  myOLED.print(F("PT2258"), CENTER, 30);
  myOLED.update();
  delay(2000);
  vol = EEPROM.read(0);ch1 = EEPROM.read(1);ch2 = EEPROM.read(2);ch3 = EEPROM.read(3);
  ch4 = EEPROM.read(4);ch5 = EEPROM.read(5);ch6 = EEPROM.read(6);
  audio();

  }  

void loop(){
////////////////////////////////// IR ////////////////////////////////////////
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;w2=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта  

///////// BUTTON /////////////////////////////////////////////////////////////
 if(power==0){ 
  if((digitalRead(10)==LOW||ir.value==MUT)&&mute==0){mute=1;w=1;menu=100;cl();audio();myOLED.clrScr();myOLED.setFont(SmallFont);myOLED.print(F("MUTE"), CENTER, 25);myOLED.update();}
  if((digitalRead(10)==LOW||ir.value==MUT)&&mute==1){mute=0;w=1;menu=0;cl();audio();}  

  if(digitalRead(2)==LOW||ir.value==SET){menu++;if(menu>6){menu=0;}times=millis();w=1;w2=1;cl();} 
 }

/// POWER ////////////////////////////////////
    if(((digitalRead(4)==LOW||ir.value==POWER)&&digitalRead(10)==HIGH)&&power==0){power=1;menu=100;myOLED.setBrightness(1);cl();myEnc.write(0);mute=1;
    myOLED.clrScr();myOLED.setFont(SmallFont);myOLED.print(F("POWER OFF"), CENTER, 10);myOLED.update();
    audio();delay(2000);cl();}
 
    if(((digitalRead(4)==LOW||ir.value==POWER)&&digitalRead(10)==HIGH)&&power==1&&digitalRead(10)==HIGH){power=0;menu=0;myOLED.setBrightness(100);cl();myEnc.write(0);mute=0;w=1;
    myOLED.clrScr();myOLED.setFont(SmallFont);myOLED.print(F("POWER ON"), CENTER, 10);myOLED.update();
    audio();delay(2000);cl();}  
    /// standby output 
    if(power==1){digitalWrite(5,LOW);}else{digitalWrite(5,HIGH);} 

    
    

//////// VOLUME //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==0){
   if(newPosition != oldPosition){oldPosition = newPosition;vol=vol-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
 
   if(ir.value==DW){vol--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){vol--;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
   if(ir.value==UP){vol++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){vol++;gr1=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("VOLUME"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(64-vol, 75, 0);
  myOLED.drawLine(0, 30, 128, 30);
  myOLED.setFont(SmallFont);myOLED.print(F("LF"), LEFT, 35);myOLED.printNumI(-ch1, 40, 35);
  myOLED.setFont(SmallFont);myOLED.print(F("RF"), 70, 35);myOLED.printNumI(-ch2, 110, 35);
  myOLED.setFont(SmallFont);myOLED.print(F("LR"), LEFT, 45);myOLED.printNumI(-ch3, 40, 45);
  myOLED.setFont(SmallFont);myOLED.print(F("RR"), 70, 45);myOLED.printNumI(-ch4, 110, 45);
  myOLED.setFont(SmallFont);myOLED.print(F("CEN"), LEFT, 55);myOLED.printNumI(-ch5, 40, 55);
  myOLED.setFont(SmallFont);myOLED.print(F("SUB"), 70, 55);myOLED.printNumI(-ch6, 110, 55);
  myOLED.update();
  }}

//////// ATT LF //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==1){
   if(newPosition != oldPosition){oldPosition = newPosition;ch1=ch1-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch1_conf();audio();}
 
   if(ir.value==DW){ch1--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch1--;gr2=0;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch1++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch1++;gr1=0;cl();times=millis();w=1;w2=1;ch1_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_LF"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch1, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }} 
//////// ATT RF //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==2){
   if(newPosition != oldPosition){oldPosition = newPosition;ch2=ch2-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch2_conf();audio();}
 
   if(ir.value==DW){ch2--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch2--;gr2=0;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch2++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch2++;gr1=0;cl();times=millis();w=1;w2=1;ch2_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_RF"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch2, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }} 

//////// ATT LR //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==3){
   if(newPosition != oldPosition){oldPosition = newPosition;ch3=ch3-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch3_conf();audio();}
 
   if(ir.value==DW){ch3--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch3--;gr2=0;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch3++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch3++;gr1=0;cl();times=millis();w=1;w2=1;ch3_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_LR"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch3, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}      

//////// ATT RR //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==4){
   if(newPosition != oldPosition){oldPosition = newPosition;ch4=ch4-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch4_conf();audio();}
 
   if(ir.value==DW){ch4--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch4--;gr2=0;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch4++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch4++;gr1=0;cl();times=millis();w=1;w2=1;ch4_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_RR"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch4, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}   

//////// ATT CEN//////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==5){
   if(newPosition != oldPosition){oldPosition = newPosition;ch5=ch5-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch5_conf();audio();}
 
   if(ir.value==DW){ch5--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch5--;gr2=0;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch5++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch5++;gr1=0;cl();times=millis();w=1;w2=1;ch5_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_CEN"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch5, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}  

//////// ATT SUB //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  if(menu==6){
   if(newPosition != oldPosition){oldPosition = newPosition;ch6=ch6-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;ch6_conf();audio();}
 
   if(ir.value==DW){ch6--;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){ch6--;gr2=0;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка >>>>>>
   if(ir.value==UP){ch6++;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){ch6++;gr1=0;cl();times=millis();w=1;w2=1;ch6_conf();audio();}// кнопка <<<<<<
 
  if(w==1){w=0;
  myOLED.clrScr();
  myOLED.setFont(SmallFont);myOLED.print(F("ATT_SUB"), LEFT, 0);myOLED.setFont(BigNumbers);myOLED.printNumI(-ch6, 65, 0);
  myOLED.setFont(SmallFont);myOLED.print(F("dB"), RIGHT, 20);
  myOLED.update();
  }}    

/////////////////// ЧАСЫ ///////////////////////////////////////////////////////////////////
if(power==1){
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;   
     a[0]=hour/10;
     a[1]=hour%10;
     a[2]=minut/10;
     a[3]=minut%10;
     a[4]=secon/10;
     a[5]=secon%10;
  if(old_sec!=secon){
  myOLED.clrScr();
  myOLED.setFont(BigNumbers);myOLED.printNumI(a[0], 15, 5);myOLED.printNumI(a[1], 30, 5);
  myOLED.setFont(SmallFont);myOLED.print(F(":"), 45, 15);
  myOLED.setFont(BigNumbers);myOLED.printNumI(a[2], 50, 5);myOLED.printNumI(a[3], 65, 5);
  myOLED.setFont(SmallFont);myOLED.print(F(":"), 80, 15);
  myOLED.setFont(BigNumbers);myOLED.printNumI(a[4], 85, 5);myOLED.printNumI(a[5], 100, 5);
  myOLED.setFont(SmallFont);myOLED.print(F("POWER OFF"), CENTER, 45);
  myOLED.update();
  } 
  old_sec=secon;
//// set time ////
  if(digitalRead(10)==LOW&&digitalRead(2)==LOW){hour++;if(hour>23){hour=0;} clock.setDateTime(2022, 11, 4, hour, minut, secon);delay(300);}// SET button HH++
  if(digitalRead(10)==LOW&&digitalRead(4)==LOW){minut++;if(minut>59){minut=0;} clock.setDateTime(2022, 11, 4, hour, minut, secon);delay(300);}// POWER MM++
  
}    


////////////////// EEPROM //////////////////////////////////////////////////////////////
 if(millis()-times>5000 && w2==1 && mute==0){
     EEPROM.update(0,vol);EEPROM.update(1,ch1);EEPROM.update(2,ch2);EEPROM.update(3,ch3);
     EEPROM.update(4,ch4);EEPROM.update(5,ch5);EEPROM.update(6,ch6);
     cl();menu=0;w2=0;w=1;}     
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     
  } // end loop 

void ch1_conf(){if(ch1<0){ch1=0;}if(ch1>15){ch1=15;}}
void ch2_conf(){if(ch2<0){ch2=0;}if(ch2>15){ch2=15;}}
void ch3_conf(){if(ch3<0){ch3=0;}if(ch3>15){ch3=15;}}
void ch4_conf(){if(ch4<0){ch4=0;}if(ch4>15){ch4=15;}}
void ch5_conf(){if(ch5<0){ch5=0;}if(ch5>15){ch5=15;}}
void ch6_conf(){if(ch6<0){ch6=0;}if(ch6>15){ch6=15;}}
void vol_func(){if(vol<0){vol=0;}if(vol>64){vol=64;}}
void to_Timer(){newPosition = myEnc.read()/4;}   
void cl(){myOLED.clrScr();ir.value=0;delay(200);}
void audio(){
        pt.clear(); 
      //  pt.setVolume(75); //  int 0...79     
        pt.setVol1(79-(vol+ch1)); //  int 0...79       
        pt.setVol2(79-(vol+ch2)); //  int 0...79 
        pt.setVol3(79-(vol+ch3)); //  int 0...79 
        pt.setVol4(79-(vol+ch4)); //  int 0...79 
        pt.setVol5(79-(vol+ch5)); //  int 0...79 
        pt.setVol6(79-(vol+ch6)); //  int 0...79 
        pt.setMute(mute); // mute 0 - off / 1 - on
  } 

6

Re: PT2258 + OLED 0.96 + encoder + IR

А я только хотел отцеплять модуль часов

7

Re: PT2258 + OLED 0.96 + encoder + IR

Меня зовут Андрей.

8

Re: PT2258 + OLED 0.96 + encoder + IR

Приятно познакомится.

9

Re: PT2258 + OLED 0.96 + encoder + IR

Вы писали про коммутатор входов, что он из себя представляет?

10

Re: PT2258 + OLED 0.96 + encoder + IR

Александр. Огромнейшее спасибо. За проделанную вами работу.

11 (2022-11-05 11:14:58 отредактировано andru2975)

Re: PT2258 + OLED 0.96 + encoder + IR

liman324 пишет:

Вы писали про коммутатор входов, что он из себя представляет?

Александр , я сам еще толком не разобрался селектор входов построен на 2х микросхемах HCF4052 и HCF4053. Разберусь с схемой
закину. Я просто пока не могу понять для чего 2 микрухи и как они скомутированы.

12

Re: PT2258 + OLED 0.96 + encoder + IR

http://forum.rcl-radio.ru/uploads/image … 3311ba.pdf

13

Re: PT2258 + OLED 0.96 + encoder + IR

HCF4052 - простой мультиплексор, имеет логическое управление. Управлять ими лучше через микроконтроллер.

Таблица управления

http://forum.rcl-radio.ru/uploads/images/2022/11/9f21407f3f98f47bb8c18ccec8b55b50.png

Логическая схема

http://forum.rcl-radio.ru/uploads/images/2022/11/fab8807ce755262f33941fca500fc4d3.png

14 (2022-11-05 11:09:22 отредактировано andru2975)

Re: PT2258 + OLED 0.96 + encoder + IR

Схемы усилителя нет. И гугл пока ни чего приблизительного не дал. Ищу. и сам пытаюсь разобрать

15 (2022-11-05 12:26:23 отредактировано andru2975)

Re: PT2258 + OLED 0.96 + encoder + IR

http://forum.rcl-radio.ru/uploads/images/2022/11/36ac4a04970225c7954bde04cb804ae3.gif   


коммутация 4053 совпадает с моим усилителем  так же 9,10,11 вместе и уходят на процессор управления который я удалил. И управляется как я понял лог 0

16

Re: PT2258 + OLED 0.96 + encoder + IR

liman324 пишет:

HCF4052 - простой мультиплексор, имеет логическое управление. Управлять ими лучше через микроконтроллер.

Таблица управления

http://forum.rcl-radio.ru/uploads/images/2022/11/9f21407f3f98f47bb8c18ccec8b55b50.png

Логическая схема

http://forum.rcl-radio.ru/uploads/images/2022/11/fab8807ce755262f33941fca500fc4d3.png


В моем усилителе управление 9 и 10 вывод уходят на микропроцессор который я удалил. К сожалению аналога микропроцессора P8052 который я удалил, не нашел. Но очень похож на atmega8

17

Re: PT2258 + OLED 0.96 + encoder + IR

На крайний случай поставлю 3х позиционный переключатель

18

Re: PT2258 + OLED 0.96 + encoder + IR

Пришлите фото если возможно панели входов или опишите сколько и чего там коммутируется. 

В моем усилителе управление 9 и 10 вывод уходят на микропроцессор который я удалил. К сожалению аналога микропроцессора P8052 который я удалил, не нашел. Но очень похож на atmega8

Там  HCF4052 и HCF4053
HCF4052 - 2 пина управления \ 4 стерео входа 2 выхода
HCF4053 - 3 пина управления \ 3 стерео входа 3 выхода

19

Re: PT2258 + OLED 0.96 + encoder + IR

http://forum.rcl-radio.ru/uploads/images/2022/11/305379b52e1c7ba0e5656875c366c988.jpg http://forum.rcl-radio.ru/uploads/images/2022/11/355f46d6543d53f45891efc26952bb35.jpg

20 (2022-11-05 12:28:29 отредактировано andru2975)

Re: PT2258 + OLED 0.96 + encoder + IR

4052 коммутирует input  то есть отдельно каждый вход
4053 коммутирует AC-3  а сдесь все 3 канала сразу
я так понял

21

Re: PT2258 + OLED 0.96 + encoder + IR

Если будете создавать прошивку, как мне кажется нужно делать 3 канала всего с возможностью инверсии. оно так и было mp3, cd, ac3 на лицевой панели усилителя стояли индикаторы

22

Re: PT2258 + OLED 0.96 + encoder + IR

http://forum.rcl-radio.ru/uploads/images/2022/11/9d61d3a3012cd435c00eee70abd97f9c.jpg http://forum.rcl-radio.ru/uploads/images/2022/11/1a0ddd113b650dd5b2b48bb6b873f3eb.jpg

23

Re: PT2258 + OLED 0.96 + encoder + IR

http://forum.rcl-radio.ru/uploads/images/2022/11/1bd679230c84a9398a9861d1e76ced6e.jpg

24

Re: PT2258 + OLED 0.96 + encoder + IR

Принцип работы я вижу примерно таким
http://forum.rcl-radio.ru/uploads/images/2022/11/0472226296719731f3a7dc5d0e7227bb.png


Сабвуфер я так понял ни как не коммутируется

25

Re: PT2258 + OLED 0.96 + encoder + IR

Чтобы точно узнать что да как работает надо конечно все прозвонить от аудиопроцессора до 4052 4053