101

Re: PT2258 + LCD2004_I2C + IR + DS3231

Откройте файл библиотеки - PT2258.h
найдите строку:
#define PT2258_address 0B1000100
замените ее на
#define PT2258_address 0x42

102

Re: PT2258 + LCD2004_I2C + IR + DS3231

liman324 пишет:

Откройте файл библиотеки - PT2258.h
найдите строку:
#define PT2258_address 0B1000100
замените ее на
#define PT2258_address 0x42

Спасибо, все работает!
Вылезла проблема следующая: кнопка ОК и SET никак не откликаются на мое нажатия с пульта. Перепроверил адреса кнопок, все сходится. Все равно не работает(

103

Re: PT2258 + LCD2004_I2C + IR + DS3231

Опубликуйте скетч который Вы используете.

104

Re: PT2258 + LCD2004_I2C + IR + DS3231

//#define POWER     0x33B800FF
//#define VOLUME_UP 0x33B8E01F
//#define VOLUME_DW 0x33B810EF
//#define MUT       0x33B8946B
//-----------------------------------------------------------------------------------------------------------
#define SET       0x42BD48B7
#define OK        0x42BD08F7
#define POWER     0x42BD50AF
#define VOLUME_UP 0x42BD6897
#define VOLUME_DW 0x42BDE01F
#define MUT       0x42BD609F

#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h>           // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip       
#include <EEPROM.h>
#include <MsTimer2.h>          // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 
#include <boarddefs.h>         // входит в состав библиотеки IRremote
#include <IRremote.h>          // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include <PT2258.h> // https://github.com/liman324/PT2258.git
#include <DS3231.h>
#include <microDS18B20.h>
PT2258 pt;
//-----------------------------------------------------------------------------------------------------------
LiquidCrystal_I2C lcd(0x27, 20, 4); // Устанавливаем дисплей
Encoder myEnc(9, 8);// DT, CLK
IRrecv irrecv(11); // указываем вывод модуля IR приемника
decode_results ir;
DS3231 clock; RTCDateTime DateTime;
MicroDS18B20<5> sensor;
//-----------------------------------------------------------------------------------------------------------
//запись кодов символов в экран
byte v1[8] = {B00111,B01111,B11111,B11111,B11111,B11111,B11111,B11111};
byte v2[8] = {B11111,B11111,B11111,B00000,B00000,B00000,B00000,B00000};      
byte v3[8] = {B11100,B11110,B11111,B11111,B11111,B11111,B11111,B11111};
byte v4[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B01111,B00111};
byte v5[8] = {B00000,B00000,B00000,B00000,B00000,B11111,B11111,B11111};
byte v6[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B11110,B11100};
byte v7[8] = {B11111,B11111,B11111,B00000,B00000,B00000,B11111,B11111};
byte v8[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111}; 
//-----------------------------------------------------------------------------------------------------------
//обьявление переменных
static uint32_t timTemp;
unsigned long times,oldPosition  = -999,newPosition; 
int vol, ch1, ch2, ch3, ch4, ch5, ch6, menu, menu1, menu2, brig, brig0=10, brig1, temp0, i;
bool mute, power, w, w1, gr1, gr2,termo;
byte a[6], d1, d2, d3, d4, d5, d6, e1, e2, e3, x, www, tim_w;
int hour, minut, secon, data, mon, year, time_temp;
byte mesto2[8] = {0, 10, 0, 10, 0, 10, 0, 10};
byte mesto3[8] = {0, 0, 1, 1, 2, 2, 3, 3};
int hh, mm, ss, dd, mn, gg;
byte standby = 1;
int pin7=0;
int x_timer;
int perc;
//-----------------------------------------------------------------------------------------------------------


////переменные для автоматического снижения яркости на основном экране......
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _start=0;
//-----------------------------------------------------------------------------------------------------------

//приготовились.....

void setup() {
  
    irrecv.enableIRIn(); lcd.init(); lcd.backlight(); Wire.begin(); clock.begin(); Serial.begin(9600);
    MsTimer2::set(1, to_Timer); MsTimer2::start();
    lcd.createChar(1, v1); lcd.createChar(2, v2); lcd.createChar(3, v3); lcd.createChar(4, v4);
    lcd.createChar(5, v5); lcd.createChar(6, v6); lcd.createChar(7, v7); lcd.createChar(8, v8);
    if (EEPROM.read(100) != 0) {
       for (int i = 0; i < 101; i++) {
      EEPROM.update(i, 0); // очистка памяти при первом включении
    }
    }
//-----------------------------------------------------------------------------------------------------------
    //объявление входов,выходов
    //pinMode(0)                    //serial port
    //pinMode(1)                    //serial port
    pinMode(2, INPUT_PULLUP);     // КНОПКА SET
    pinMode(3, INPUT_PULLUP);     // КНОПКА MUTE
    pinMode(4, INPUT_PULLUP);     // КНОПКА POWER
    //pinMode(5)                    // термодатчик 18B20
    pinMode(6, OUTPUT);           // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
    pinMode(7, OUTPUT);           // ВЫХОД АКТИВАЦИИ АНАЛИЗАТОРА СПЕКТРА
    //pinMode(8) Encoder myEnc(8);  //CLK
    //pinMode(9) Encoder myEnc(9);  //DT
    pinMode(10, INPUT);           // МЕНЮ КНОПКА SW энкодера
    //pinMode(11) IRrecv irrecv(11);// указываем вывод модуля IR приемника
    pinMode(12, OUTPUT);          // Выход управления STANDBY - реле включения усилителя
    pinMode(13, OUTPUT);          // Выход управления STANDBY--- c задержкой для реле софтстарта усилителя
//-----------------------------------------------------------------------------------------------------------
    //входы для индикации аварий каналов, кому не надо можете удалить от этого места....

    pinMode(14, INPUT_PULLUP);          //вход аварии левый  передний   /норма +5 вольт, авария 0 вольт/ замыкаем на землю при аварии
    pinMode(15, INPUT_PULLUP);          //вход аварии левый  задний     /норма +5 вольт, авария 0 вольт/ замыкаем на землю при аварии
    pinMode(16, INPUT_PULLUP);          //вход аварии центральный канал /норма +5 вольт, авария 0 вольт/ замыкаем на землю при аварии
    pinMode(17, INPUT_PULLUP);          //вход аварии сабвуфера          /норма +5 вольт, авария 0 вольт/ замыкаем на землю при аварии
  
    pinMode(A6, INPUT);                 //вход аварии правый передний   /норма +5 вольт, авария 0 вольт/ замыкаем на землю при аварии
    //чисто аналоговый вход             //вот тут вход привязываем к +5 вольт через резистор 10 кОм, обязательно,да програмно пробовал
                                      //ловит наводки, лучше железно, рядом с ардуиной, так надежнее
                                      
    pinMode(A7, INPUT);                 //вход аварии правый задний     /норма +5 вольт, авария 0 вольт/ замыкаем на землю при аварии
    //чисто аналоговый вход             //вот тут вход привязываем к +5 вольт через резистор 10 кОм, обязательно,да программно пробовал
                                      //ловит наводки, лучше железно, рядом с ардуиной, так надежнее
    ///....до этого......
//-----------------------------------------------------------------------------------------------------------    
    clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
    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);
    brig0 = EEPROM.read(7); brig1 = EEPROM.read(8);
    analogWrite(6, brig0 * 25);

    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    delay(500);
    audio();  
   }
//-----------------------------------------------------------------------------------------------------------
   /////////////////поехали/////////////////////////////////////////////
   
void loop() {
  
   /// READ TIME /////////////////////////////////
    DateTime = clock.getDateTime(); hour = DateTime.hour; minut = DateTime.minute; secon = DateTime.second;
    data = DateTime.day; mon = DateTime.month; year = DateTime.year;
   
  
   
//----------------------------------------------------------------------------------------------------------- 

    /// BUTTON ////////////////////////////////////
    //// МЕНЮ КНОПКА  энкодера
    if (power == 0) {
    if ((digitalRead(10) == LOW || ir.value == OK) && menu == 1) {menu1++;delay(200);times = millis();cl1();w = 1;w1 = 1;
    if (menu1 > 7) {menu1 = 0;}
    }
    if (digitalRead(10) == LOW && menu == 2) {menu2++;delay(200);times = millis();w = 1;w1 = 1;
    if (menu2 > 5) {menu2 = 0;}
    }
//-----------------------------------------------------------------------------------------------------------
    /////////////Долгое нажатие кнопки энкодера(больше 5 секунд)
    ////////////---включение/отключение АНАЛИЗАТОРА СПЕКТРА  на втором экране LCD 2004/////////////////
    
    if (digitalRead(10) == LOW && menu==0){delay(200);x_timer++;}// держим кнопку, идет счет x_timer
    if (digitalRead(10) == HIGH) {x_timer=0;} // если отпустить кнопку то x_timer сбрасывается
    if (x_timer > 12 && pin7==0) {digitalWrite(7,HIGH);pin7=1;x_timer=0;} // 12*200 мс + время работы цикла = 5с включаем пин 7 если он был выключен
    if (x_timer > 12 && pin7==1 ) {digitalWrite(7,LOW);pin7=0;x_timer=0;} //  12*200 мс + время работы цикла = 5с выключаем пин 7 если он был включен
//-----------------------------------------------------------------------------------------------------------     
    // МЕНЮ КНОПКА SET
    if ((digitalRead(2) == LOW || ir.value == SET)  && digitalRead(10) == HIGH) {menu++;delay(200);times = millis();cl();w = 1;w1 = 1;menu1 = 0;
      if (menu > 1) {menu = 0; }
    }
//-----------------------------------------------------------------------------------------------------------    
    // МЕНЮ КНОПКА SET time(нажатие одновременно кнопки энкодера и кнопкиSET)
    if (digitalRead(2) == LOW && digitalRead(10) == LOW) {menu = 2;delay(200);times = millis();cl();w = 1;w1 = 1;lcd.setCursor(2, 1);
    lcd.print("TIME CORRECTION");delay(1000);
    }
//-----------------------------------------------------------------------------------------------------------
    // МЕНЮ КНОПКА MUTE - mute on
    if ((digitalRead(3) == LOW || ir.value == MUT) && mute == 0) {mute = 1;cl();audio();menu = 100;brig=brig1;analogWrite(6, brig * 25);
//-----------------------------------------------------------------------------------------------------------   
    //слово MUTE//да, охренеть! можно проще? и круче? --- поправляйте!(просто "MUTE" не прет!!!)(и массивы ниасилил йа......)
   
    //1 символ "М"+пробел"
    lcd.setCursor(1,0);lcd.write(3);lcd.print("  ");lcd.write(1);lcd.print(" ");
    lcd.setCursor(1,1);lcd.write(8);lcd.write(3);lcd.write(1);lcd.write(8);lcd.print(" ");
    lcd.setCursor(1,2);lcd.write(8);lcd.print("  ");lcd.write(8);lcd.print(" ");
   
    //2 символ "U"+пробел"
    lcd.setCursor(6,0);lcd.write(3);lcd.print("  ");lcd.write(1);lcd.print(" ");  
    lcd.setCursor(6,1);lcd.write(8);lcd.print("  ");lcd.write(8);lcd.print(" ");
    lcd.setCursor(6,2);lcd.write(4);lcd.write(8);lcd.write(8);lcd.write(6);lcd.print(" ");
    
     //3 символ "T"+пробел"
    
    lcd.setCursor(11,0);lcd.write(8);lcd.write(8);lcd.write(8);lcd.print(" ");
    lcd.setCursor(11,1);lcd.print(" ");lcd.write(8);lcd.print("  ");
    lcd.setCursor(11,2);lcd.print(" ");lcd.write(8);lcd.print("  ");
    
    //4 символ "E"+пробел"

    lcd.setCursor(15,0);lcd.write(1);lcd.write(2);lcd.write(2);lcd.write(2);
    lcd.setCursor(15,1);lcd.write(8);lcd.write(2);lcd.write(2);
    lcd.setCursor(15,2);lcd.write(4);lcd.write(5);lcd.write(5);lcd.write(5);
          
    delay(500);
    }
//-----------------------------------------------------------------------------------------------------------
     // МЕНЮ КНОПКА MUTE - mute off
    if ((digitalRead(3) == LOW || ir.value == MUT) && mute == 1) {mute = 0;cl();times = millis();w = 1;w1 = 1;menu = 0;menu1 = 0;myEnc.write(0);newPosition = 0;brig=brig0;analogWrite(6, brig * 25);audio();}
    }
//-----------------------------------------------------------------------------------------------------------
   // МЕНЮ STANDBY
   //КНОПКА POWER ON/OFF
    
   //КНОПКА POWER
   // POWER O F F 
   //сначала  ВЫКЛЮЧЕНИЕ 
    if (((digitalRead(4) == LOW || ir.value == POWER) && power == 0) || standby == 1)  {menu1 = 0;  mute = 1; audio();
    power = 1; standby = 0;cl();times = millis(); w = 1; w1 = 1; menu = 100;//сначала вырубаем звук,выключаем все и врубаем меню STANDBY.....
    /////    в цикле плавное снижение уровня подсветки.....
    for (i = 1; i <=10 ; i++) {
     switch (i) {
      case 0:brig = 10;analogWrite(6, brig * 25); break;
      case 1:brig = 9; analogWrite(6, brig * 25); break;
      case 2:brig = 8; analogWrite(6, brig * 25); break;
      case 3:brig = 7; analogWrite(6, brig * 25); break;
      case 4:brig = 6; analogWrite(6, brig * 25); break;
      case 5:brig = 5; analogWrite(6, brig * 25); break;
      case 6:brig = 4; analogWrite(6, brig * 25); break;
      case 7:brig = 3; analogWrite(6, brig * 25); break;
      case 8:brig = 2; analogWrite(6, brig * 25); break;
      case 9:brig = 1; analogWrite(6, brig * 25); break;
    }
      delay(100);  
    }
    }
//-----------------------------------------------------------------------------------------------------------    
    
    //КНОПКА POWER
    // POWER O N 
     
    if ((digitalRead(4) == LOW || ir.value == POWER) && power == 1 ) {
       power = 0; cl();times = millis(); w = 1; w1 = 1; menu = 0; menu1 = 0;myEnc.write(0);newPosition = 0; 
       digitalWrite(12, HIGH);//включение питания 1й выход
                                        
    // ЭКРАН ПРИ ВКЛЮЧЕНИИ 
    lcd.setCursor(0, 0); lcd.print("  BU DIGITAL SARAY  ");//1 строка    
    lcd.setCursor(0, 1); lcd.print("POWER AMPLIFIER  5.1");//2 строка
    lcd.setCursor(0, 2); lcd.print("   SYSTEM LOADING   ");//3 строка
    for(int i=1;i<=10;i++){ brig=i; analogWrite(6, brig * 25);delay(200);//плавное включение подсветки при ВКЛЮЧЕНИИ
    } 
    digitalWrite(13, HIGH); //включение питания 2й выход  
   // стрелки загрузки >>>>>>>>>>>>>>>>>>>>
    lcd.setCursor(0, 3);
    for (int thisChar = 0; thisChar < 10; thisChar++) {lcd.write(5);delay(75);lcd.write(2);delay(75);}
                                         
   
  cl();_start=1; mute = 0; audio();  //очистка экрана, отключение mute.....слушаем музыку))))
    } 
 //-----------------------------------------------------------------------------------------------------------    
    // power off//выключение усилителя(реле)
    if (power == 1) {digitalWrite(12, LOW);} // выход standby
    else {digitalWrite(12, HIGH);} 
    if (power == 1) {digitalWrite(13, LOW);digitalWrite(7,LOW);} // выход standby delay, выход отключения АНАЛИЗАТОРА СПЕКТРА
    
//-----------------------------------------------------------------------------------------------------------  
     /// IR ////////////////////////////////////////
    if ( irrecv.decode( &ir )) {
      Serial.print("0x");  // IR приемник - чтение, в мониторе порта отображаются коды кнопок
      Serial.println( ir.value, HEX);
    //Serial.println (sensor_Alarm_1);
    //Serial.println (sensor_Alarm_2);
      irrecv.resume();
      times = millis();
      w = 1;
      w1 = 1;
    }
    if (ir.value == 0) {
      gr1 = 0;  // запрет нажатий не активных кнопок пульта
      gr2 = 0;
    }
//-----------------------------------------------------------------------------------------------------------
  

  ////////////// VOLUME ///////////////////////////////////////////////////////////////////
  
    if (menu == 0) {
    // кнопка >
    if (ir.value == VOLUME_UP && mute == 0 && power == 0) {vol++;gr1 = 1;gr2 = 0;cl1();times = millis();w = 1;vol_func();audio();}
    // кнопка >>>>>>
    if (ir.value == 0xFFFFFFFF and gr1 == 1) {vol++;gr2 = 0;cl1();times = millis();w = 1;vol_func();audio();}
    // кнопка <
    if (ir.value == VOLUME_DW) {vol--;gr1 = 0;gr2 = 1;cl1();times = millis();w = 1;vol_func();audio();}
    // кнопка <<<<<<
    if (ir.value == 0xFFFFFFFF and gr2 == 1) {vol--;gr1 = 0;cl1();times = millis();w = 1;vol_func();audio();}

    if (newPosition != oldPosition) {oldPosition = newPosition;vol = vol + newPosition;
        myEnc.write(0);newPosition = 0; times = millis();w = 1;w1 = 1;vol_func();audio();}
//-----------------------------------------------------------------------------------------------------------
// цифры громкости       
    a[0] = (vol) / 10; a[1] = (vol) % 10;
    for (x = 0; x < 2; x++) {
      switch (x) {
        case 0: e1 = 10, e2 = 11, e3 = 12;break;
        case 1: e1 = 14, e2 = 15, e3 = 16;break;} 
        digit();
    }
//-----------------------------------------------------------------------------------------------------------    
    //Минус (гаснущий при нуле) перед цифрами уровня громкости
    lcd.setCursor(8, 0); if (vol > 0) {lcd.write(5);} else {lcd.print(" ");//{lcd.write(5);---какой символ отображать----из таблички  в начале скейча
    }
//-----------------------------------------------------------------------------------------------------------
    ////Вывод температуры на основной экран///////
    if (millis() - timTemp >= 800) {         ///время опроса датчика
       timTemp = millis();  
    // читаем прошлое значение
    //значение температуры выводится только при срабатывании термозащиты,у нас усилитель, а не термометр)))))))) 
    if (termo == 1) {if (sensor.readTemp()) {lcd.setCursor(17, 3);lcd.print(sensor.getTemp(),0);lcd.write(223);}//выводим на экран
    else {lcd.setCursor(17, 3);lcd.print("ERR");delay(250);lcd.setCursor(17, 3);lcd.print("   ");}//если обрыв датчика пишем error
    }
    // запрашиваем новое измерение
       sensor.requestTemp();
//-----------------------------------------------------------------------------------------------------------    
    
    //термозащита //4 строка
    
    //вот тут меняем уставку защиты.....50...90 градусов....или 100))))
    //если температура превышает уставку.....
    if ((sensor.getTemp())>=30){vol = 35; audio(); termo=1;//гасим часы, снижаем уровень до -35 дБ.....врубаем подсветку на максимум.....
    //вместо часов выводим сообщение....
       if (secon & 1){ lcd.setCursor(0, 3);lcd.print(">TERMO OVERLOAD< ");}  
                   //                                 01234567890123456  это символы в строке считаю, чтоб не промазать)))
      else { lcd.setCursor(0, 3);lcd.print(" >70");lcd.write(223);lcd.print(" MAX TEMP<  ");}//тут пишем максимальную температуру, как в уставке   
                   //                       0123              4              567890123456  это символы в строке считаю, чтоб не промазать))           
    }  
        //если температура в норме..... 
    else {audio();termo=0;//гасим подсветку и возвращаем часы .....  
        lcd.setCursor(0, 3);lcd.print("        ");
        lcd.print(hour / 10); lcd.print(hour % 10);// lcd.print(":");
    if (secon & 1)
         {lcd.write(165);}                                          //secon - нечетное
    else {lcd.write(58);}                                           //secon - четное
        lcd.print(minut / 10); lcd.print(minut % 10);lcd.print("       "); 
    }  
    }
    
//-----------------------------------------------------------------------------------------------------------  
    //надписи основного экрана
    //1 строка
                  lcd.setCursor(0, 0); lcd.print(" VOLUME ");
    //2 строка начало
    if (termo==0){lcd.setCursor(0, 1); lcd.print(" 5.1 CH ");}
       else      {lcd.setCursor(0, 1); lcd.print(" LIMIT  ");}//если сработала термозащита выводим слово---лимит---
    //2 строка в конце 
        lcd.setCursor(18,1); lcd.print("dB");//2 строка после цифр уровня громкости
//-----------------------------------------------------------------------------------------------------------
    // индикаторы неисправности каналов
    // кому не нужно раскоментируйте строку ниже
    //lcd.setCursor(0, 2); lcd.print("--------------------");//3 строка
    //и все остальное можете удалить, от этого места.......
    //переменные аварии правого переднего канала и правого заднего канала
   int sensor_Alarm_3 = analogRead(A6);//считываем сигнал аварии правого переднего канала
   int sensor_Alarm_4 = analogRead(A7);//считываем сигнал аварии правого заднего канала
    
    if (digitalRead(14) == LOW || digitalRead(15) == LOW ||digitalRead(16) == LOW ||digitalRead(17) == LOW 
          ||sensor_Alarm_3 < 10||sensor_Alarm_4 < 10){
    //левый передний
    if (digitalRead(14) == HIGH)                                                              
         {lcd.setCursor(0, 2);lcd.print("   ");}                      
    if (digitalRead(14) == LOW ) {if ((millis() % 1000) > 500)                                
        {lcd.setCursor(0, 2); lcd.print("FL ");}
    else{lcd.setCursor(0, 2); lcd.print("DC ");}
    }
    //левый задний
    if (digitalRead(15) == HIGH)
        {lcd.setCursor(3, 2); lcd.print("   ");}
    if (digitalRead(15) == LOW) {if ((millis() % 1000) > 500) 
        {lcd.setCursor(3, 2); lcd.print("RL ");}
    else{lcd.setCursor(3, 2); lcd.print("DC ");}
    }
    //центральный
    if (digitalRead(16) == HIGH)
         {lcd.setCursor(6, 2);lcd.print("    ");}
    if (digitalRead(16) == LOW) {if ((millis() % 1000) > 500)
        {lcd.setCursor(6, 2); lcd.print("CNTR");}
    else{lcd.setCursor(6, 2); lcd.print(" DC ");}
    }
    //сабвуфер
    if (digitalRead(17) == HIGH) 
         {lcd.setCursor(10, 2);lcd.print("    ");}
    if (digitalRead(17) == LOW) {if ((millis() % 1000) > 500) 
        {lcd.setCursor(10, 2); lcd.print(" SUB");}
    else{lcd.setCursor(10, 2); lcd.print(" D C");}
    }
     //правый  передний/// тут пришлось поковыряться......вход А6 чисто аналоговый
    if (sensor_Alarm_3 >= 500) 
         {lcd.setCursor(14, 2);lcd.print("   ");}
    if (sensor_Alarm_3 <= 10) {if ((millis() % 1000) > 500) 
        {lcd.setCursor(14, 2); lcd.print(" FR");}
    else{lcd.setCursor(14, 2); lcd.print(" DC");}
    } 
    //правый  задний /// и тут тоже пришлось поковыряться......вход А7 чисто аналоговый
    if (sensor_Alarm_4 >= 500) 
         {lcd.setCursor(17, 2);lcd.print("   ");}
    if (sensor_Alarm_4 <= 10) {if ((millis() % 1000) > 500) 
        {lcd.setCursor(17, 2); lcd.print(" RR");}
    else{lcd.setCursor(17, 2); lcd.print(" DC");}
    
    }
    }
    else {int perc = map(vol, 64, 0, 0, 100);
    //fillBar0 принимает аргументы (столбец, строка, длина полосы, значение в % (0 - 100) )
    fillBar0(0, 2, 20, perc);
    delay(50);}
    ////до сюда.....
    
       
//-----------------------------------------------------------------------------------------------------------    
    //яркость подсветки.... автоматическое снижение при неактивных кнопках.....
    //  ждем 10 сек и выключаем подсветку
    if (_start==1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; 
    if ( (_trgrt1) || digitalRead(2)  == LOW || digitalRead(3)  == LOW || digitalRead(4)  == LOW ||
        digitalRead(8)  == LOW || digitalRead(9)  == LOW || digitalRead(10) == LOW ||
        digitalRead(14) == LOW || digitalRead(15) == LOW || digitalRead(16) == LOW ||
        digitalRead(17) == LOW ||   sensor_Alarm_3 < 10  || sensor_Alarm_4 < 10    ||
        ir.value == OK || ir.value == SET || ir.value == MUT || ir.value == POWER  ||                                                       
        termo == 1 ||  gr1==1 || gr2==1) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 10000)) _tim1O = 0;}}}
    if (!( _tim1O ) ) {brig = brig1;analogWrite(6, brig * 25);}                                  //////////////вот тут меняем время задержки отключения  подсветки ↑↑↑↑↑↑
    if ( _tim1O ){brig = brig0;analogWrite(6, brig * 25);}
   }
//-----------------------------------------------------------------------------------------------------------    
     ///////// ATT //////////////////////////////////////////////////////////////////////////////
     //Меню аттенюаторов
    if (menu == 1) {
      switch (menu1) {
      case 0: temp0 = ch1; break;
      case 1: temp0 = ch2; break;
      case 2: temp0 = ch3; break;
      case 3: temp0 = ch4; break;
      case 4: temp0 = ch5; break;
      case 5: temp0 = ch6; break;
      case 6: temp0 = brig0; break;
      case 7: temp0 = brig1; break;
    }
    // кнопка >
    if (ir.value == VOLUME_UP) {temp0--; gr1 = 1;gr2 = 0;cl1();times = millis();w = 1;www = 1;}
    // кнопка >>>>>>
    if (ir.value == 0xFFFFFFFF and gr1 == 1) {temp0--;gr2 = 0;cl1();times = millis();w = 1;w = 1;www = 1;}
    // кнопка <
    if (ir.value == VOLUME_DW) {temp0++; gr1 = 0;gr2 = 1;cl1();times = millis(); w = 1;w = 1;www = 1;
    }
    // кнопка <<<<<<
    if (ir.value == 0xFFFFFFFF and gr2 == 1) {temp0++;gr1 = 0;cl1();times = millis(); w = 1;w = 1;www = 1;}

    if (newPosition != oldPosition) {oldPosition = newPosition;temp0 = temp0 - newPosition; myEnc.write(0); newPosition = 0; times = millis(); w = 1; www = 1;
    }

    switch (menu1) {
      case 0: ch1 = temp0; if (ch1 < 0) {ch1 = 0;} if (ch1 > 15) {ch1 = 15;} break;
      case 1: ch2 = temp0; if (ch2 < 0) {ch2 = 0;} if (ch2 > 15) {ch2 = 15;} break;
      case 2: ch3 = temp0; if (ch3 < 0) {ch3 = 0;} if (ch3 > 15) {ch3 = 15;} break;
      case 3: ch4 = temp0; if (ch4 < 0) {ch4 = 0;} if (ch4 > 15) {ch4 = 15;} break;
      case 4: ch5 = temp0; if (ch5 < 0) {ch5 = 0;} if (ch5 > 15) {ch5 = 15;} break;
      case 5: ch6 = temp0; if (ch6 < 0) {ch6 = 0;} if (ch6 > 15) {ch6 = 15;} break;
      case 6: brig0 = temp0; brig0_func(); break;
      case 7: brig1 = temp0; brig1_func(); break;
    }
//----------------------------------------------------------------------------------------------------------- 
    
    au();
    if (menu1 < 7) {brig = brig0;}
    if (menu1 == 7) {brig = brig1;}
    analogWrite(6, brig * 25);

    for (i = 0; i < 8; i++) {
      if (menu1 == i) {
        lcd.setCursor(mesto2[i], mesto3[i]);
        lcd.print(char(126));
      } else {
        lcd.setCursor(mesto2[i], mesto3[i]);
        lcd.print(" ");
      }
    }

    lcd.setCursor(1, 0); lcd.print("Lfront"); if (ch1 == 0) {
      lcd.print(" ");
    } lcd.print(-ch1); if (ch1 < 10) {
      lcd.print(" ");
    }
    lcd.setCursor(11, 0); lcd.print("Rfront"); if (ch2 == 0) {
      lcd.print(" ");
    } lcd.print(-ch2); if (ch2 < 10) {
      lcd.print(" ");
    }
    lcd.setCursor(1, 1); lcd.print("L rear"); if (ch3 == 0) {
      lcd.print(" ");
    } lcd.print(-ch3); if (ch3 < 10) {
      lcd.print(" ");
    }
    lcd.setCursor(11, 1); lcd.print("R rear"); if (ch4 == 0) {
      lcd.print(" ");
    } lcd.print(-ch4); if (ch4 < 10) {
      lcd.print(" ");
    }
    lcd.setCursor(1, 2); lcd.print("Center"); if (ch5 == 0) {
      lcd.print(" ");
    } lcd.print(-ch5); if (ch5 < 10) {
      lcd.print(" ");
    }
    lcd.setCursor(11, 2); lcd.print("SubW  "); if (ch6 == 0) {
      lcd.print(" ");
    } lcd.print(-ch6); if (ch6 < 10) {
      lcd.print(" ");
    }
    lcd.setCursor(1, 3); lcd.print("BR ON "); lcd.print(brig0); lcd.print(" ");
    lcd.setCursor(11, 3); lcd.print("BR OFF "); lcd.print(brig1); lcd.print(" ");
    }
//----------------------------------------------------------------------------------------------------------- 
    //////// Меню коррекции времени ..............menu set time /////////////////////////////////////
    if (menu == 2) {
      hh = DateTime.hour; mm = DateTime.minute; ss = DateTime.second; dd = DateTime.day; mn = DateTime.month; gg = DateTime.year;
      switch (menu2) {
        case 0: time_temp = hh; break;
        case 1: time_temp = mm; break;
        case 2: time_temp = ss; break;
        case 3: time_temp = dd; break;
        case 4: time_temp = mn; break;
        case 5: time_temp = gg; break;
    }
    if (newPosition != oldPosition) {
      oldPosition = newPosition;
      time_temp = time_temp - newPosition; myEnc.write(0); newPosition = 0; times = millis(); w = 1; tim_w = 1;
    }
    switch (menu2) {
      case 0: hh = time_temp; 
      if (hh < 0) {hh = 0;} 
      if (hh > 23) {hh = 23;} break;
      case 1: mm = time_temp; 
      if (mm < 0) {mm = 0;} 
      if (mm > 59) {mm = 59;} break;
      case 2: ss = time_temp; 
      if (ss < 0) {ss = 0;} 
      if (ss > 59) {ss = 59;} break;
      case 3: dd = time_temp; 
      if (dd < 1) {dd = 1;}
      if (dd > 31) {dd = 31;} break;
      case 4: mn = time_temp;
      if (mn < 1) {mn = 1;} 
      if (mn > 12) {mn = 12;} break;
      case 5: gg = time_temp; 
      if (gg < 2022) {gg = 2022;} 
      if (gg > 2100) {gg = 2100;} break;
    }

    lcd.setCursor(0, 0); lcd.print("TIME CORRECTION");
    lcd.setCursor(0, 1); lcd.print("--------------------");
    lcd.setCursor(0, 2);
    if (menu2 == 0) {
      lcd.print("set hour   ");
    }
    if (menu2 == 1) {
      lcd.print("set minute ");
    }
    if (menu2 == 2) {
      lcd.print("set seconds");
    }
    if (menu2 == 3) {
      lcd.print("set date   ");
    }
    if (menu2 == 4) {
      lcd.print("set month  ");
    }
    if (menu2 == 5) {
      lcd.print("set year   ");
    }

    lcd.setCursor(0, 3);
    lcd.print(hour / 10); lcd.print(hour % 10); lcd.print(":");
    lcd.print(minut / 10); lcd.print(minut % 10); lcd.print(":");
    lcd.print(secon / 10); lcd.print(secon % 10); lcd.print(" ");
    lcd.print(data / 10); lcd.print(data % 10); lcd.print("-");
    lcd.print(mon / 10); lcd.print(mon % 10); lcd.print("-");
    lcd.print(year);


    if (tim_w == 1) {
      tim_w = 0;
      clock.setDateTime(gg, mn, dd, hh, mm, ss);
      delay(100);
   }
   }
//----------------------------------------------------------------------------------------------------------- 
/////Запись в память настроек
    /////// EEPROM //////////////////////////////////////
    if (millis() - times > 10000 && w1 == 1 && mute == 0 && power == 0) {
       w1 = 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);
    EEPROM.update(7, brig0); EEPROM.update(8, brig1);
   if(menu!=0){cl();}
   }
//----------------------------------------------------------------------------------------------------------- 
///////////Экран STANDBY
   if (power == 1) {
   
    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 (i = 0; i < 6; i++) {//если нужны секунды, раскомминтируем это
    //что показывать. в данном случае часы и минуты,секунды закомментированы
    for (i = 0; i < 4; i++) { //если НЕ нужны секунды, это закомментируем
      switch (i) {
        case 0: e1 = 1, e2 = 2, e3 = 3; break;//десятки часов
        case 1: e1 = 5, e2 = 6, e3 = 7; break;//единицы часов
        case 2: e1 = 12, e2 = 13, e3 = 14; break;//десятки минут
        case 3: e1 = 16, e2 = 17, e3 = 18; break;//единицы минут
        //case 4: e1 = 14, e2 = 15, e3 = 16; break;//не надо//секунды закомментированы
       // case 5: e1 = 17, e2 = 18, e3 = 19; break;//не надо//секунды закомментированы
      }
      ///////маска цифр, ДЛЯ ЧАСОВ.....какая цифра из каких символов состоит....
      ///d1,d2,d3-верхняя часть цифры;d4,d5,d6-нижняя часть цифры;
      switch (a[i]) {
        //1 набор, 2,4,5 прямые// елсли нравится, оставляем, а нижний комментируем/*   */
        /*case 0: d1=1,d2=2,d3=3,d4=4,d5=5,d6=6;break;
        case 1: d1=2,d2=3,d3=32,d4=5,d5=8,d6=5;break;
        case 2: d1=7,d2=7,d3=3,d4=8,d5=5,d6=5;break;
        case 3: d1=7,d2=7,d3=3,d4=5,d5=5,d6=6;break;
        case 4: d1=4,d2=5,d3=8,d4=32,d5=32,d6=8;break;
        case 5: d1=8,d2=7,d3=7,d4=5,d5=5,d6=6;break;
        case 6: d1=1,d2=7,d3=7,d4=4,d5=5,d6=6;break;
        case 7: d1=2,d2=2,d3=3,d4=32,d5=32,d6=8;break;
        case 8: d1=1,d2=7,d3=3,d4=4,d5=5,d6=6;break;
        case 9: d1=1,d2=7,d3=3,d4=5,d5=5,d6=6;break;*/
        //2 набор, 2,4,5 закругленные// если нравится, оставляем, а верхний комментируем/*   */
        case 0: d1=1,d2=2,d3=3,d4=4,d5=5,d6=6;break;
        case 1: d1=2,d2=3,d3=32,d4=5,d5=8,d6=5;break;
        case 2: d1=7,d2=7,d3=3,d4=4,d5=5,d6=5;break;
        case 3: d1=7,d2=7,d3=3,d4=5,d5=5,d6=6;break;
        case 4: d1=4,d2=5,d3=3,d4=32,d5=32,d6=8;break;
        case 5: d1=1,d2=7,d3=7,d4=5,d5=5,d6=6;break;
        case 6: d1=1,d2=7,d3=7,d4=4,d5=5,d6=6;break;
        case 7: d1=2,d2=2,d3=3,d4=32,d5=32,d6=8;break;
        case 8: d1=1,d2=7,d3=3,d4=4,d5=5,d6=6;break;
        case 9: d1=1,d2=7,d3=3,d4=5,d5=5,d6=6;break;
    }
    ///////////////положение цифр ЧАСОВ на экране///сейчас 2я и 3я строка..........
      lcd.setCursor(e1, 1); lcd.write((uint8_t)d1); lcd.setCursor(e2, 1); lcd.write((uint8_t)d2); lcd.setCursor(e3, 1); lcd.write((uint8_t)d3);
      lcd.setCursor(e1, 2); lcd.write((uint8_t)d4); lcd.setCursor(e2, 2); lcd.write((uint8_t)d5); lcd.setCursor(e3, 2); lcd.write((uint8_t)d6);
    }
   /*//точки между цифр
   if(secon&1)                                           //secon - нечетное
      {lcd.setCursor(9,1) ;lcd.write(2);  lcd.print(" ");
      lcd.setCursor(9,2);lcd.print(" ");lcd.write(5);}
   else                                                 //secon - четное
      {lcd.setCursor(9,1) ;lcd.print(" ");lcd.write(2);
      lcd.setCursor(9,2);lcd.write(5);  lcd.print(" ");}*/

   //снежинки между цифр
   if(secon&1)                                           //secon - нечетное
      {lcd.setCursor(9,1) ;lcd.write(42);  lcd.print(" ");
      lcd.setCursor(9,2);lcd.print(" ");lcd.write(42);}
   else                                                 //secon - четное
      {lcd.setCursor(9,1) ;lcd.print(" ");lcd.write(42);
      lcd.setCursor(9,2);lcd.write(42);  lcd.print(" ");}   
 //-----------------------------------------------------------------------------------------------------------      
   //перемещение снежинок......////много кода......много...........//аааааааааааааааааааа////кто может лучше и проще, меняйте.............   
      if(secon % 10 == 0&&secon / 10 == 0||secon % 10 == 0&&secon / 10 == 2||secon % 10 == 0&&secon / 10 == 4)
           {lcd.setCursor(0,0);lcd.write(42);lcd.setCursor(19,3);lcd.write(42);}
      else {lcd.setCursor(0,0);lcd.print(" ");lcd.setCursor(19,3);lcd.print(" ");}
      
      if(secon % 10 == 1&&secon / 10 == 0||secon % 10 == 1&&secon / 10 == 2||secon % 10 == 1&&secon / 10 == 4)
           {lcd.setCursor(1,0);lcd.write(42);lcd.setCursor(18,3);lcd.write(42);}
      else {lcd.setCursor(1,0);lcd.print(" ");lcd.setCursor(18,3);lcd.print(" ");}  
        
      if(secon % 10 == 2&&secon / 10 == 0||secon % 10 == 2&&secon / 10 == 2||secon % 10 == 2&&secon / 10 == 4)
           {lcd.setCursor(2,0);lcd.write(42);lcd.setCursor(17,3);lcd.write(42);}
      else {lcd.setCursor(2,0);lcd.print(" ");lcd.setCursor(17,3);lcd.print(" ");} 
          
      if(secon % 10 == 3&&secon / 10 == 0||secon % 10 == 3&&secon / 10 == 2||secon % 10 == 3&&secon / 10 == 4)
           {lcd.setCursor(3,0);lcd.write(42);lcd.setCursor(16,3);lcd.write(42);}
      else {lcd.setCursor(3,0);lcd.print(" ");lcd.setCursor(16,3);lcd.print(" ");}  
         
      if(secon % 10 == 4&&secon / 10 == 0||secon % 10 == 4&&secon / 10 == 2||secon % 10 == 4&&secon / 10 == 4)
           {lcd.setCursor(4,0);lcd.write(42);lcd.setCursor(15,3);lcd.write(42);}
      else {lcd.setCursor(4,0);lcd.print(" ");lcd.setCursor(15,3);lcd.print(" ");}

      if(secon % 10 == 5&&secon / 10 == 0||secon % 10 == 5&&secon / 10 == 2||secon % 10 == 5&&secon / 10 == 4)
           {lcd.setCursor(5,0);lcd.write(42);lcd.setCursor(14,3);lcd.write(42);}
      else {lcd.setCursor(5,0);lcd.print(" ");lcd.setCursor(14,3);lcd.print(" ");} 
      
      if(secon % 10 == 6&&secon / 10 == 0||secon % 10 == 6&&secon / 10 == 2||secon % 10 == 6&&secon / 10 == 4)
           {lcd.setCursor(6,0);lcd.write(42);lcd.setCursor(13,3);lcd.write(42);}
      else {lcd.setCursor(6,0);lcd.print(" ");lcd.setCursor(13,3);lcd.print(" ");} 

      if(secon % 10 == 7&&secon / 10 == 0||secon % 10 == 7&&secon / 10 == 2||secon % 10 == 7&&secon / 10 == 4)
           {lcd.setCursor(7,0);lcd.write(42);lcd.setCursor(12,3);lcd.write(42);}
      else {lcd.setCursor(7,0);lcd.print(" ");lcd.setCursor(12,3);lcd.print(" ");} 

      if(secon % 10 == 8&&secon / 10 == 0||secon % 10 == 8&&secon / 10 == 2||secon % 10 == 8&&secon / 10 == 4)
           {lcd.setCursor(8,0);lcd.write(42);lcd.setCursor(11,3);lcd.write(42);}
      else {lcd.setCursor(8,0);lcd.print(" ");lcd.setCursor(11,3);lcd.print(" ");} 

      if(secon % 10 == 9&&secon / 10 == 0||secon % 10 == 9&&secon / 10 == 2||secon % 10 == 9&&secon / 10 == 4)
           {lcd.setCursor(9,0);lcd.write(42);lcd.setCursor(10,3);lcd.write(42);}
      else {lcd.setCursor(9,0);lcd.print(" ");lcd.setCursor(10,3);lcd.print(" ");} 
      
      ///////////////////////ааааааааааааааааааааааа///////////////////////////////////////////////
      
      if(secon % 10 == 0&&secon / 10 == 1||secon % 10 == 0&&secon / 10 == 3||secon % 10 == 0&&secon / 10 == 5)
           {lcd.setCursor(10,0);lcd.write(42);lcd.setCursor(9,3);lcd.write(42);}
      else {lcd.setCursor(10,0);lcd.print(" ");lcd.setCursor(9,3);lcd.print(" ");}
      
      if(secon % 10 == 1&&secon / 10 == 1||secon % 10 == 1&&secon / 10 == 3||secon % 10 == 1&&secon / 10 == 5)
           {lcd.setCursor(11,0);lcd.write(42);lcd.setCursor(8,3);lcd.write(42);}
      else {lcd.setCursor(11,0);lcd.print(" ");lcd.setCursor(8,3);lcd.print(" ");}  
        
      if(secon % 10 == 2&&secon / 10 == 1||secon % 10 == 2&&secon / 10 == 3||secon % 10 == 2&&secon / 10 == 5)
           {lcd.setCursor(12,0);lcd.write(42);lcd.setCursor(7,3);lcd.write(42);}
      else {lcd.setCursor(12,0);lcd.print(" ");lcd.setCursor(7,3);lcd.print(" ");} 
          
      if(secon % 10 == 3&&secon / 10 == 1||secon % 10 == 3&&secon / 10 == 3||secon % 10 == 3&&secon / 10 == 5)
           {lcd.setCursor(13,0);lcd.write(42);lcd.setCursor(6,3);lcd.write(42);}
      else {lcd.setCursor(13,0);lcd.print(" ");lcd.setCursor(6,3);lcd.print(" ");}  
         
      if(secon % 10 == 4&&secon / 10 == 1||secon % 10 == 4&&secon / 10 == 3||secon % 10 == 4&&secon / 10 == 5)
           {lcd.setCursor(14,0);lcd.write(42);lcd.setCursor(5,3);lcd.write(42);}
      else {lcd.setCursor(14,0);lcd.print(" ");lcd.setCursor(5,3);lcd.print(" ");}

      if(secon % 10 == 5&&secon / 10 == 1||secon % 10 == 5&&secon / 10 == 3||secon % 10 == 5&&secon / 10 == 5)
           {lcd.setCursor(15,0);lcd.write(42);lcd.setCursor(4,3);lcd.write(42);}
      else {lcd.setCursor(15,0);lcd.print(" ");lcd.setCursor(4,3);lcd.print(" ");} 
      
      if(secon % 10 == 6&&secon / 10 == 1||secon % 10 == 6&&secon / 10 == 3||secon % 10 == 6&&secon / 10 == 5)
           {lcd.setCursor(16,0);lcd.write(42);lcd.setCursor(3,3);lcd.write(42);}
      else {lcd.setCursor(16,0);lcd.print(" ");lcd.setCursor(3,3);lcd.print(" ");} 

      if(secon % 10 == 7&&secon / 10 == 1||secon % 10 == 7&&secon / 10 == 3||secon % 10 == 7&&secon / 10 == 5)
           {lcd.setCursor(17,0);lcd.write(42);lcd.setCursor(2,3);lcd.write(42);}
      else {lcd.setCursor(17,0);lcd.print(" ");lcd.setCursor(2,3);lcd.print(" ");} 

      if(secon % 10 == 8&&secon / 10 == 1||secon % 10 == 8&&secon / 10 == 3||secon % 10 == 8&&secon / 10 == 5)
           {lcd.setCursor(18,0);lcd.write(42);lcd.setCursor(1,3);lcd.write(42);}
      else {lcd.setCursor(18,0);lcd.print(" ");lcd.setCursor(1,3);lcd.print(" ");} 

      if(secon % 10 == 9&&secon / 10 == 1||secon % 10 == 9&&secon / 10 == 3||secon % 10 == 9&&secon / 10 == 5)
           {lcd.setCursor(19,0);lcd.write(42);lcd.setCursor(0,3);lcd.write(42);}
      else {lcd.setCursor(19,0);lcd.print(" ");lcd.setCursor(0,3);lcd.print(" ");}
      
      ////////////////////всеееееееееееееееееееееее///////////////////////////////
        
      //if(secon % 10 == 1||secon % 10 == 3||secon % 10 == 5||secon % 10 == 7||secon % 10 == 9)
      // {lcd.setCursor(9,0);lcd.write(2);lcd.setCursor(9,1);lcd.write(5);
       // lcd.setCursor(10,0);lcd.write(2);lcd.setCursor(10,1);lcd.write(5);}
      //четное - точки 2( можно пробелы вставить---lcd.print(" ");---)
     // if(secon % 10 == 0||secon % 10 == 2||secon % 10 == 4||secon % 10 == 6||secon % 10 == 8)
      //  {lcd.setCursor(9,0);lcd.write(5);lcd.setCursor(9,1);lcd.write(2);
     //   lcd.setCursor(10,0);lcd.write(5);lcd.setCursor(10,1);lcd.write(2);}
    
      //lcd.setCursor(0, 2); lcd.print("--------------------");
      //lcd.setCursor(6, 3); lcd.print("STAND BY");
   }
   }  
   /// END LOOP
//----------------------------------------------------------------------------------------------------------- 

/////
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }

void fillBar0(byte start_pos, byte row, byte bar_length, byte fill_percent) {
  byte infill = round((float)bar_length * fill_percent / 100);
  lcd.setCursor(start_pos, row);
  if (infill == 0) lcd.write(16);
  else lcd.write(5);
  for (int n = 1; n < bar_length - 1; n++) {
    if (n < infill) lcd.write(5);
    if (n >= infill) lcd.write(16);
  }
  if (infill == bar_length) lcd.write(5);
  else lcd.write(16);
}




  
void au() {
  if (www == 1) {
    audio();
    www = 0;
  }
}
void cl() {
  ir.value = 0;
  delay(100);
  lcd.clear();
}
void cl1() {
  ir.value = 0;
  delay(50);
}
void brig1_func() {
  if (brig1 > 10) {
    brig1 = 10;
  } if (brig1 < 0) {
    brig1 = 0;
  }
}
void brig0_func() {
  if (brig0 > 10) {
    brig0 = 10;
  } if (brig0 < 0) {
    brig0 = 0;
  }
}
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
}

void to_Timer() {
  newPosition = myEnc.read() / 4;
}
void vol_func() {
  if (0 > vol) {
    vol = 0;
  } if (64 < vol) {
    vol = 64;
  }
}
//----------------------------------------------------------------------------------------------------------- 
       ///////маска цифр,ДЛЯ РЕГУЛЯТОРА ГРОМКОСТИ какая цифра из каких символов состоит....
      ///d1,d2,d3-верхняя часть цифры;d4,d5,d6-нижняя часть цифры;
void digit() {
  switch (a[x]) {
    //1 набор, 2,4,5 прямые// если нравится оставляем, а нижний комментируем/*   */
        /*case 0: d1=1,d2=2,d3=3,d4=4,d5=5,d6=6;break;
        case 1: d1=2,d2=3,d3=32,d4=5,d5=8,d6=5;break;
        case 2: d1=7,d2=7,d3=3,d4=8,d5=5,d6=5;break;
        case 3: d1=7,d2=7,d3=3,d4=5,d5=5,d6=6;break;
        case 4: d1=4,d2=5,d3=8,d4=32,d5=32,d6=8;break;
        case 5: d1=8,d2=7,d3=7,d4=5,d5=5,d6=6;break;
        case 6: d1=1,d2=7,d3=7,d4=4,d5=5,d6=6;break;
        case 7: d1=2,d2=2,d3=3,d4=32,d5=32,d6=8;break;
        case 8: d1=1,d2=7,d3=3,d4=4,d5=5,d6=6;break;
        case 9: d1=1,d2=7,d3=3,d4=5,d5=5,d6=6;break;*/
        //2 набор, 2,4,5 закругленные// елсли нравится оставляем, а верхий коментируем/*   */
        case 0: d1=1,d2=2,d3=3,d4=4,d5=5,d6=6;break;
        case 1: d1=2,d2=3,d3=32,d4=5,d5=8,d6=5;break;
        case 2: d1=7,d2=7,d3=3,d4=4,d5=5,d6=5;break;
        case 3: d1=7,d2=7,d3=3,d4=5,d5=5,d6=6;break;
        case 4: d1=4,d2=5,d3=3,d4=32,d5=32,d6=8;break;
        case 5: d1=1,d2=7,d3=7,d4=5,d5=5,d6=6;break;
        case 6: d1=1,d2=7,d3=7,d4=4,d5=5,d6=6;break;
        case 7: d1=2,d2=2,d3=3,d4=32,d5=32,d6=8;break;
        case 8: d1=1,d2=7,d3=3,d4=4,d5=5,d6=6;break;
        case 9: d1=1,d2=7,d3=3,d4=5,d5=5,d6=6;break;
  }
  ///////////////положение цифр ИНДИКАТОРА ГРОМКОСТИ на экране///сейчас 2я и 3я строка..........
    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);
}
   

105

Re: PT2258 + LCD2004_I2C + IR + DS3231

ЭТО НЕ МОЙ СКЕТЧ, ВЫБЕРИТЕ СКЕТЧ ПОЛЬЗОВАТЕЛЯ LIMAN324

106

Re: PT2258 + LCD2004_I2C + IR + DS3231

liman324 пишет:

Добавил кнопки пульта для меню аттенюатора, надпись при включении и задержку, пин 11 так же имеет задержку в 5 сек при включении.

#define POWER     0x33B800FF
#define VOLUME_UP 0x33B8E01F
#define VOLUME_DW 0x33B810EF
#define MUT       0x33B8946B
#define SET       0x33B8D827
#define OK        0x33B820DF


//#define POWER     0x42BD50AF
//#define VOLUME_UP 0x42BD6897
//#define VOLUME_DW 0x42BDE01F
//#define MUT       0x42BD609F

#include <Wire.h> 
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h>           // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip       
#include <EEPROM.h>
#include <MsTimer2.h>          // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 
#include <boarddefs.h>         // входит в состав библиотеки IRremote
#include <IRremote.h>          // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include <PT2258.h> // https://github.com/liman324/PT2258.git
#include <DS3231.h>

 PT2258 pt;
 LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
 Encoder myEnc(9, 8);// DT, CLK
 IRrecv irrecv(12); // указываем вывод модуля IR приемника
 decode_results ir; 
 DS3231 clock;RTCDateTime DateTime;

 
byte v1[8] = {7,15,15,15,15,15,15,7};
      byte v2[8] = {7,15,15, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 30, 30, 14, 0, 0, 0, 0, 0};
      byte v6[8] = {28,30,30,30,30,30,30,28};
      byte v7[8] = { 0, 0, 0, 0, 0, 15,15,7};
      byte v8[8] = { 31, 31,0,0,0,0,0, 0};
unsigned long times,oldPosition  = -999,newPosition; 
int vol,ch1,ch2,ch3,ch4,ch5,ch6,menu,menu1,menu2,brig,brig0=10,brig1,temp0,i;
bool mute,power,w,w1,gr1,gr2;
byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,x,www,tim_w;
int hour,minut,secon,data,mon,year,time_temp;
byte mesto2[8]={0,10,0,10,0,10,0,10};
byte mesto3[8]={0,0,1,1,2,2,3,3};
int hh,mm,ss,dd,mn,gg;
byte standby = 1;


void setup(){
  irrecv.enableIRIn();lcd.init();lcd.backlight();Wire.begin();clock.begin();Serial.begin(9600);
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
  lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
  pinMode(10,INPUT);         // МЕНЮ КНОПКА SW энкодера
  pinMode(6,OUTPUT);         // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
  pinMode(2,INPUT_PULLUP);   // КНОПКА SET
  pinMode(3,INPUT_PULLUP);   // КНОПКА MUTE
  pinMode(4,INPUT_PULLUP);   // КНОПКА POWER
  pinMode(5,OUTPUT);         // Выход управления STANDBY усилителя
  pinMode(11,OUTPUT);        // Выход управления c задержкой STANDBY  усилителя
  clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  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);
  brig0 = EEPROM.read(7);brig1 = EEPROM.read(8);
  analogWrite(6, brig0*25);
  digitalWrite(5,LOW);digitalWrite(11,LOW);
  delay(500);
  audio();
  
  }

void loop(){
/// READ TIME /////////////////////////////////
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;

/// BUTTON ////////////////////////////////////
if(power==0){
  if((digitalRead(10)==LOW||ir.value==OK)&&menu==1){menu1++;delay(200);times=millis();cl1();w=1;w1=1;if(menu1>7){menu1=0;}}
  if(digitalRead(10)==LOW&&menu==2){menu2++;delay(200);times=millis();w=1;w1=1;if(menu2>5){menu2=0;}}
  
  if((digitalRead(2)==LOW||ir.value==SET)&&digitalRead(10)==HIGH){menu++;delay(200);times=millis();cl();w=1;w1=1;menu1=0;if(menu>1){menu=0;}} // SET
  if(digitalRead(2)==LOW&&digitalRead(10)==LOW){menu=2;delay(200);times=millis();cl();w=1;w1=1;lcd.setCursor(2,1);lcd.print("TIME CORRECTION");delay(1000);} // SET time

  if((digitalRead(3)==LOW||ir.value==MUT)&&mute==0){mute=1;cl();audio();menu=100;lcd.setCursor(8,1);lcd.print("MUTE");delay(500);}// mute on
  if((digitalRead(3)==LOW||ir.value==MUT)&&mute==1){mute=0;cl();times=millis();w=1;w1=1;menu=0;menu1=0;audio();} // mute off
}
  if(((digitalRead(4)==LOW||ir.value==POWER)&&power==0)||standby==1){power=1;standby=0;cl();times=millis();w=1;w1=1;menu=100;menu1=0;mute=1;audio();brig = brig1;analogWrite(6, brig*25);} // power off
  if((digitalRead(4)==LOW||ir.value==POWER)&&power==1){power=0;cl();times=millis();w=1;w1=1;menu=0;menu1=0;mute=0;audio();brig = brig0;analogWrite(6, brig*25);lcd.setCursor(6,1);lcd.print("LOADING");delay(5000);digitalWrite(11,HIGH);cl();} // power on
  
  if(power==1){digitalWrite(5,LOW);}else{digitalWrite(5,HIGH);} // output standby
  
  if(power==1){digitalWrite(11,LOW);} // output standby

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

////////////// VOLUME ///////////////////////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==VOLUME_UP){vol++;gr1=1;gr2=0;cl1();times=millis();w=1;vol_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();times=millis();;w=1;vol_func();audio();}// кнопка >>>>>>
     if(ir.value==VOLUME_DW){vol--;gr1=0;gr2=1;cl1();times=millis();;w=1;vol_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();times=millis();w=1;vol_func();audio();}// кнопка <<<<<<
 
   if (newPosition != oldPosition){oldPosition = newPosition;vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio();}
   a[0]= (64-vol)/10;a[1]=(64-vol)%10;
   for(x=0;x<2;x++){switch(x){case 0: e1=11,e2=12,e3=13;break;case 1: e1=14,e2=15,e3=16;break;}digit();}
   lcd.setCursor(0,0);lcd.print("VOLUME");
   lcd.setCursor(0,1);lcd.print("CONTROL");
   lcd.setCursor(0,2);lcd.print("--------------------");
   lcd.setCursor(0,3);
     lcd.print(hour/10);lcd.print(hour%10);lcd.print(":");
     lcd.print(minut/10);lcd.print(minut%10);lcd.print(":");
     lcd.print(secon/10);lcd.print(secon%10);lcd.print(" ");

     lcd.print(data/10);lcd.print(data%10);lcd.print("-");
     lcd.print(mon/10);lcd.print(mon%10);lcd.print("-");
     lcd.print(year);
     brig=brig0;
    analogWrite(6, brig*25);
  }  

///////// ATT //////////////////////////////////////////////////////////////////////////////
 if(menu==1){
     switch(menu1){
      case 0: temp0 = ch1;break;
      case 1: temp0 = ch2;break;
      case 2: temp0 = ch3;break;
      case 3: temp0 = ch4;break;
      case 4: temp0 = ch5;break;
      case 5: temp0 = ch6;break;
      case 6: temp0 = brig0;break;
      case 7: temp0 = brig1;break;
      }
    
   if(ir.value==VOLUME_UP){temp0--;gr1=1;gr2=0;cl1();times=millis();w=1;www=1;}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){temp0--;gr2=0;cl1();times=millis();;w=1;w=1;www=1;}// кнопка >>>>>>
   if(ir.value==VOLUME_DW){temp0++;gr1=0;gr2=1;cl1();times=millis();;w=1;w=1;www=1;}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){temp0++;gr1=0;cl1();times=millis();w=1;w=1;www=1;}// кнопка <<<<<<
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;www=1;} 
 
     switch(menu1){
      case 0: ch1 = temp0;if(ch1<0){ch1=0;}if(ch1>15){ch1=15;}break;
      case 1: ch2 = temp0;if(ch2<0){ch2=0;}if(ch2>15){ch2=15;}break;
      case 2: ch3 = temp0;if(ch3<0){ch3=0;}if(ch3>15){ch3=15;}break;
      case 3: ch4 = temp0;if(ch4<0){ch4=0;}if(ch4>15){ch4=15;}break;      
      case 4: ch5 = temp0;if(ch5<0){ch5=0;}if(ch5>15){ch5=15;}break;
      case 5: ch6 = temp0;if(ch6<0){ch6=0;}if(ch6>15){ch6=15;}break;
      case 6: brig0 = temp0;brig0_func();break;
      case 7: brig1 = temp0;brig1_func();break;
      }
 
  au();
  if(menu1<7){brig=brig0;}
  if(menu1==7){brig=brig1;}
  analogWrite(6, brig*25);
  
  for(i=0;i<8;i++){if(menu1==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(">");}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(" ");}}
  
  lcd.setCursor(1,0);lcd.print("Lfront");if(ch1==0){lcd.print(" ");}lcd.print(-ch1);lcd.print(" ");lcd.setCursor(11,0);lcd.print("Rfront");if(ch2==0){lcd.print(" ");}lcd.print(-ch2);if(ch2<10){lcd.print(" ");}
  lcd.setCursor(1,1);lcd.print("Lrear ");if(ch3==0){lcd.print(" ");}lcd.print(-ch3);lcd.print(" ");lcd.setCursor(11,1);lcd.print("Rrear ");if(ch4==0){lcd.print(" ");}lcd.print(-ch4);if(ch4<10){lcd.print(" ");}
  lcd.setCursor(1,2);lcd.print("CENTR ");if(ch5==0){lcd.print(" ");}lcd.print(-ch5);lcd.print(" ");lcd.setCursor(11,2);lcd.print("BASS  ");if(ch6==0){lcd.print(" ");}lcd.print(-ch6);if(ch6<10){lcd.print(" ");}
  lcd.setCursor(1,3);lcd.print("BR ON ");lcd.print(brig0);lcd.print(" ");lcd.setCursor(11,3);lcd.print("BR OFF");lcd.print(brig1);lcd.print(" "); 
 } 

//////// menu set time /////////////////////////////////////
 if(menu==2){
  hh = DateTime.hour;mm = DateTime.minute;ss = DateTime.second;dd = DateTime.day;mn = DateTime.month;gg = DateTime.year;
  switch(menu2){
      case 0: time_temp = hh;break;
      case 1: time_temp = mm;break;
      case 2: time_temp = ss;break;
      case 3: time_temp = dd;break;
      case 4: time_temp = mn;break;
      case 5: time_temp = gg;break;
      }
    
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     time_temp=time_temp-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;tim_w=1;} 
 
     switch(menu2){
      case 0: hh = time_temp;if(hh<0){hh=0;}if(hh>23){hh=23;}break;
      case 1: mm = time_temp;if(mm<0){mm=0;}if(mm>59){mm=59;}break;
      case 2: ss = time_temp;if(ss<0){ss=0;}if(ss>59){ss=59;}break;
      case 3: dd = time_temp;if(dd<1){dd=1;}if(dd>31){dd=31;}break;      
      case 4: mn = time_temp;if(mn<1){mn=1;}if(mn>12){mn=12;}break;
      case 5: gg = time_temp;if(gg<2022){gg=2022;}if(gg>2100){gg=2100;}break;
      }
    
    lcd.setCursor(0,0);lcd.print("TIME CORRECTION");
    lcd.setCursor(0,1);lcd.print("--------------------");
    lcd.setCursor(0,2);
     if(menu2==0){lcd.print("set hour   ");}
     if(menu2==1){lcd.print("set minute ");}
     if(menu2==2){lcd.print("set seconds");}
     if(menu2==3){lcd.print("set date   ");}
     if(menu2==4){lcd.print("set month  ");}
     if(menu2==5){lcd.print("set year   ");}
     
    lcd.setCursor(0,3);
    lcd.print(hour/10);lcd.print(hour%10);lcd.print(":");
    lcd.print(minut/10);lcd.print(minut%10);lcd.print(":");
    lcd.print(secon/10);lcd.print(secon%10);lcd.print(" ");
    lcd.print(data/10);lcd.print(data%10);lcd.print("-");
    lcd.print(mon/10);lcd.print(mon%10);lcd.print("-");
    lcd.print(year);
    
       
    if(tim_w==1){tim_w=0; clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(100);} 
  }
 
/////// EEPROM //////////////////////////////////////
if(millis()-times>10000 && w1==1 && mute==0 && power==0){w1=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);
     EEPROM.update(7,brig0);EEPROM.update(8,brig1);
     menu=0;cl();
     }

  if(power==1){digitalWrite(7,LOW);
     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(i=0;i<6;i++){
      switch(i){
        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;
        case 4: e1=14,e2=15,e3=16;break;
        case 5: e1=17,e2=18,e3=19;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=4,d3=6,d4=1,d5=3,d6=3;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);
  }
  lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(13,0);lcd.print(".");lcd.setCursor(6,1);lcd.print(".");lcd.setCursor(13,1);lcd.print(".");
  lcd.setCursor(0,2);lcd.print("--------------------");
  lcd.setCursor(6,3);lcd.print("STANDBY");
  }      
            
  
  }  /// END LOOP

  
void au(){if(www==1){audio();www=0;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);} 
void brig1_func(){if(brig1>10){brig1=10;}if(brig1<0){brig1=0;}}
void brig0_func(){if(brig0>10){brig0=10;}if(brig0<0){brig0=0;}}
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
  }

void to_Timer(){newPosition = myEnc.read()/4;} 
void vol_func(){if(vol<0){vol=0;}if(vol>64){vol=64;}}

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=4,d3=6,d4=1,d5=3,d6=3;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);}

Залил этот скетч
По-прежнему нет отклика на нажатие кнопки ОК

107

Re: PT2258 + LCD2004_I2C + IR + DS3231

По-прежнему нет отклика на нажатие кнопки ОК

Кнопка должна работать в меню аттенюатора, проверьте.

108

Re: PT2258 + LCD2004_I2C + IR + DS3231

Кнопка на пульте не работает по-прежнему
Иногда случайным образом включается меню и указатель на регулировке каждого канала перескакивает на следующий канал каждую секунду.

109

Re: PT2258 + LCD2004_I2C + IR + DS3231

Добрый день. Имеется активная акустика 5.1,на аудиопроцессоре PT2258 и  P8052B на панельке,  китай под именем KELE, пду отсутствует . Гугл не чего внятного про  P8052B не говорит, но как понял как раз она и управляет  аудиопроцессором так как на нее идут шлейфы с ИК приемника, индикатора и указательных светодиодов. Увидел вашу тему понравилась функциональность, но не нравится индикация на дисплее 2004, да информативен но крупноват для таких целей. Есть среди форумчан кто правил скетч под олед 0.96? Или кто может помочь в этом? У самого с програмированием очень туго,единственное что какие то мелкие изменения могу внести в скетч, и то прокурив тему неделями. Это не лень, а проблемы с здоровьем.

110

Re: PT2258 + LCD2004_I2C + IR + DS3231

Кнопка на пульте не работает по-прежнему
Иногда случайным образом включается меню и указатель на регулировке каждого канала перескакивает на следующий канал каждую секунду.

Я в выходные соберу схему, проверю что не так со скетчем.

111

Re: PT2258 + LCD2004_I2C + IR + DS3231

Добрый день. Имеется активная акустика 5.1,на аудиопроцессоре PT2258 и  P8052B на панельке,  китай под именем KELE, пду отсутствует . Гугл не чего внятного про  P8052B не говорит, но как понял как раз она и управляет  аудиопроцессором так как на нее идут шлейфы с ИК приемника, индикатора и указательных светодиодов. Увидел вашу тему понравилась функциональность, но не нравится индикация на дисплее 2004, да информативен но крупноват для таких целей. Есть среди форумчан кто правил скетч под олед 0.96? Или кто может помочь в этом? У самого с програмированием очень туго,единственное что какие то мелкие изменения могу внести в скетч, и то прокурив тему неделями. Это не лень, а проблемы с здоровьем.

Есть два варианта восстановить АС, первый это полностью восстановить прежний функционал с родными органами управления и индикаций, а второй установить олед 0,96 который Вам придется как то интегрировать в корпус АС

112 (2022-11-04 11:17:56 отредактировано andru2975)

Re: PT2258 + LCD2004_I2C + IR + DS3231

Управлялась только с пульта.  Сама акустика живая только не работает регулировка.Пульт подобрать не удается, Сейчас собрал по вашей схеме и прошивке надисплее 2004, проверю работоспособность PT2258, а потом буду думать как перейти на олед,

113

Re: PT2258 + LCD2004_I2C + IR + DS3231

На сайте два проекта PT2258 - http://rcl-radio.ru/?s=PT2258

114

Re: PT2258 + LCD2004_I2C + IR + DS3231

Да я видел второй проект.Спасибо

115

Re: PT2258 + LCD2004_I2C + IR + DS3231

Кнопка на пульте не работает по-прежнему
Иногда случайным образом включается меню и указатель на регулировке каждого канала перескакивает на следующий канал каждую секунду.

Проверил, кнопка ОК работает в меню аттенюаторов. Немного поправил скетч.

#define POWER     0x33B800FF
#define VOLUME_UP 0x33B8E01F
#define VOLUME_DW 0x33B810EF
#define MUT       0x33B8946B
#define SET       0x33B8D827
#define OK        0x2FDB24D


//#define POWER     0x42BD50AF
//#define VOLUME_UP 0x42BD6897
//#define VOLUME_DW 0x42BDE01F
//#define MUT       0x42BD609F

#include <Wire.h> 
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h>           // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip       
#include <EEPROM.h>
#include <MsTimer2.h>          // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 
#include <boarddefs.h>         // входит в состав библиотеки IRremote
#include <IRremote.h>          // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include <PT2258.h> // https://github.com/liman324/PT2258.git
#include <DS3231.h>

 PT2258 pt;
 LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
 Encoder myEnc(9, 8);// DT, CLK
 IRrecv irrecv(12); // указываем вывод модуля IR приемника
 decode_results ir; 
 DS3231 clock;RTCDateTime DateTime;

 
byte v1[8] = {7,15,15,15,15,15,15,7};
      byte v2[8] = {7,15,15, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 30, 30, 14, 0, 0, 0, 0, 0};
      byte v6[8] = {28,30,30,30,30,30,30,28};
      byte v7[8] = { 0, 0, 0, 0, 0, 15,15,7};
      byte v8[8] = { 31, 31,0,0,0,0,0, 0};
unsigned long times,oldPosition  = -999,newPosition; 
int vol,ch1,ch2,ch3,ch4,ch5,ch6,menu,menu1,menu2,brig,brig0=10,brig1,temp0,i;
bool mute,power,w,w1,gr1,gr2;
byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,x,www,tim_w;
int hour,minut,secon,data,mon,year,time_temp;
byte mesto2[8]={0,10,0,10,0,10,0,10};
byte mesto3[8]={0,0,1,1,2,2,3,3};
int hh,mm,ss,dd,mn,gg;
byte standby = 1;


void setup(){
  irrecv.enableIRIn();lcd.init();lcd.backlight();Wire.begin();clock.begin();Serial.begin(9600);
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
  lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
  pinMode(10,INPUT);         // МЕНЮ КНОПКА SW энкодера
  pinMode(6,OUTPUT);         // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
  pinMode(2,INPUT_PULLUP);   // КНОПКА SET
  pinMode(3,INPUT_PULLUP);   // КНОПКА MUTE
  pinMode(4,INPUT_PULLUP);   // КНОПКА POWER
  pinMode(5,OUTPUT);         // Выход управления STANDBY усилителя
  pinMode(11,OUTPUT);        // Выход управления c задержкой STANDBY  усилителя
  clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  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);
  brig0 = EEPROM.read(7);brig1 = EEPROM.read(8);
  analogWrite(6, brig0*25);
  digitalWrite(5,LOW);digitalWrite(11,LOW);
  delay(500);
  audio();
  
  }

void loop(){
/// READ TIME /////////////////////////////////
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;

/// BUTTON ////////////////////////////////////
if(power==0){
  if((digitalRead(10)==LOW||ir.value==OK)&&menu==1){menu1++;delay(200);times=millis();cl1();w=1;w1=1;if(menu1>7){menu1=0;}}
  if(digitalRead(10)==LOW&&menu==2){menu2++;delay(200);times=millis();w=1;w1=1;if(menu2>5){menu2=0;}}
  
  if((digitalRead(2)==LOW||ir.value==SET)&&digitalRead(10)==HIGH){menu++;delay(200);times=millis();cl();w=1;w1=1;menu1=0;if(menu>1){menu=0;}} // SET
  if(digitalRead(2)==LOW&&digitalRead(10)==LOW){menu=2;delay(200);times=millis();cl();w=1;w1=1;lcd.setCursor(2,1);lcd.print("TIME CORRECTION");delay(1000);} // SET time

  if((digitalRead(3)==LOW||ir.value==MUT)&&mute==0){mute=1;cl();audio();menu=100;lcd.setCursor(8,1);lcd.print("MUTE");delay(500);}// mute on
  if((digitalRead(3)==LOW||ir.value==MUT)&&mute==1){mute=0;cl();times=millis();w=1;w1=1;menu=0;menu1=0;audio();} // mute off
}
  if(((digitalRead(4)==LOW||ir.value==POWER)&&power==0)||standby==1){power=1;standby=0;cl();times=millis();w=1;w1=1;menu=100;menu1=0;mute=1;audio();brig = brig1;analogWrite(6, brig*25);} // power off
  if((digitalRead(4)==LOW||ir.value==POWER)&&power==1){power=0;cl();times=millis();w=1;w1=1;menu=0;menu1=0;mute=0;audio();brig = brig0;analogWrite(6, brig*25);lcd.setCursor(6,1);lcd.print("LOADING");delay(1000);digitalWrite(11,HIGH);cl();} // power on
  
  if(power==1){digitalWrite(5,LOW);}else{digitalWrite(5,HIGH);} // output standby
  
  if(power==1){digitalWrite(11,LOW);} // output standby

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

////////////// VOLUME ///////////////////////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==VOLUME_UP){vol++;gr1=1;gr2=0;cl1();times=millis();w=1;vol_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();times=millis();;w=1;vol_func();audio();}// кнопка >>>>>>
     if(ir.value==VOLUME_DW){vol--;gr1=0;gr2=1;cl1();times=millis();;w=1;vol_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();times=millis();w=1;vol_func();audio();}// кнопка <<<<<<
 
   if (newPosition != oldPosition){oldPosition = newPosition;vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio();}
   a[0]= (64-vol)/10;a[1]=(64-vol)%10;
   for(x=0;x<2;x++){switch(x){case 0: e1=11,e2=12,e3=13;break;case 1: e1=14,e2=15,e3=16;break;}digit();}
   lcd.setCursor(0,0);lcd.print("VOLUME");
   lcd.setCursor(0,1);lcd.print("CONTROL");
   lcd.setCursor(0,2);lcd.print("--------------------");
   lcd.setCursor(0,3);
     lcd.print(hour/10);lcd.print(hour%10);lcd.print(":");
     lcd.print(minut/10);lcd.print(minut%10);lcd.print(":");
     lcd.print(secon/10);lcd.print(secon%10);lcd.print(" ");

     lcd.print(data/10);lcd.print(data%10);lcd.print("-");
     lcd.print(mon/10);lcd.print(mon%10);lcd.print("-");
     lcd.print(year);
     brig=brig0;
    analogWrite(6, brig*25);
  }  

///////// ATT //////////////////////////////////////////////////////////////////////////////
 if(menu==1){
     switch(menu1){
      case 0: temp0 = ch1;break;
      case 1: temp0 = ch2;break;
      case 2: temp0 = ch3;break;
      case 3: temp0 = ch4;break;
      case 4: temp0 = ch5;break;
      case 5: temp0 = ch6;break;
      case 6: temp0 = brig0;break;
      case 7: temp0 = brig1;break;
      }
    
   if(ir.value==VOLUME_UP){temp0--;gr1=1;gr2=0;cl1();times=millis();w=1;www=1;}// кнопка > 
   if(ir.value==0xFFFFFFFF and gr1==1){temp0--;gr2=0;cl1();times=millis();;w=1;w=1;www=1;}// кнопка >>>>>>
   if(ir.value==VOLUME_DW){temp0++;gr1=0;gr2=1;cl1();times=millis();;w=1;w=1;www=1;}// кнопка <
   if(ir.value==0xFFFFFFFF and gr2==1){temp0++;gr1=0;cl1();times=millis();w=1;w=1;www=1;}// кнопка <<<<<<
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;www=1;} 
 
     switch(menu1){
      case 0: ch1 = temp0;if(ch1<0){ch1=0;}if(ch1>15){ch1=15;}break;
      case 1: ch2 = temp0;if(ch2<0){ch2=0;}if(ch2>15){ch2=15;}break;
      case 2: ch3 = temp0;if(ch3<0){ch3=0;}if(ch3>15){ch3=15;}break;
      case 3: ch4 = temp0;if(ch4<0){ch4=0;}if(ch4>15){ch4=15;}break;      
      case 4: ch5 = temp0;if(ch5<0){ch5=0;}if(ch5>15){ch5=15;}break;
      case 5: ch6 = temp0;if(ch6<0){ch6=0;}if(ch6>15){ch6=15;}break;
      case 6: brig0 = temp0;brig0_func();break;
      case 7: brig1 = temp0;brig1_func();break;
      }
 
  au();
  if(menu1<7){brig=brig0;}
  if(menu1==7){brig=brig1;}
  analogWrite(6, brig*25);
  
  for(i=0;i<8;i++){if(menu1==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(">");}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(" ");}}
  
  lcd.setCursor(1,0);lcd.print("LF   ");if(ch1==0){lcd.print(" ");}lcd.print(-ch1);lcd.print(" ");lcd.setCursor(11,0);lcd.print("RF   ");if(ch2==0){lcd.print(" ");}lcd.print(-ch2);if(ch2<10){lcd.print(" ");}
  lcd.setCursor(1,1);lcd.print("LR   ");if(ch3==0){lcd.print(" ");}lcd.print(-ch3);lcd.print(" ");lcd.setCursor(11,1);lcd.print("RR   ");if(ch4==0){lcd.print(" ");}lcd.print(-ch4);if(ch4<10){lcd.print(" ");}
  lcd.setCursor(1,2);lcd.print("CR   ");if(ch5==0){lcd.print(" ");}lcd.print(-ch5);lcd.print(" ");lcd.setCursor(11,2);lcd.print("BASS ");if(ch6==0){lcd.print(" ");}lcd.print(-ch6);if(ch6<10){lcd.print(" ");}
  lcd.setCursor(1,3);lcd.print("BR ON ");lcd.print(brig0);lcd.print(" ");lcd.setCursor(11,3);lcd.print("BR OFF ");lcd.print(brig1);lcd.print(" "); 
 } 

//////// menu set time /////////////////////////////////////
 if(menu==2){
  hh = DateTime.hour;mm = DateTime.minute;ss = DateTime.second;dd = DateTime.day;mn = DateTime.month;gg = DateTime.year;
  switch(menu2){
      case 0: time_temp = hh;break;
      case 1: time_temp = mm;break;
      case 2: time_temp = ss;break;
      case 3: time_temp = dd;break;
      case 4: time_temp = mn;break;
      case 5: time_temp = gg;break;
      }
    
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     time_temp=time_temp-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;tim_w=1;} 
 
     switch(menu2){
      case 0: hh = time_temp;if(hh<0){hh=0;}if(hh>23){hh=23;}break;
      case 1: mm = time_temp;if(mm<0){mm=0;}if(mm>59){mm=59;}break;
      case 2: ss = time_temp;if(ss<0){ss=0;}if(ss>59){ss=59;}break;
      case 3: dd = time_temp;if(dd<1){dd=1;}if(dd>31){dd=31;}break;      
      case 4: mn = time_temp;if(mn<1){mn=1;}if(mn>12){mn=12;}break;
      case 5: gg = time_temp;if(gg<2022){gg=2022;}if(gg>2100){gg=2100;}break;
      }
    
    lcd.setCursor(0,0);lcd.print("TIME CORRECTION");
    lcd.setCursor(0,1);lcd.print("--------------------");
    lcd.setCursor(0,2);
     if(menu2==0){lcd.print("set hour   ");}
     if(menu2==1){lcd.print("set minute ");}
     if(menu2==2){lcd.print("set seconds");}
     if(menu2==3){lcd.print("set date   ");}
     if(menu2==4){lcd.print("set month  ");}
     if(menu2==5){lcd.print("set year   ");}
     
    lcd.setCursor(0,3);
    lcd.print(hour/10);lcd.print(hour%10);lcd.print(":");
    lcd.print(minut/10);lcd.print(minut%10);lcd.print(":");
    lcd.print(secon/10);lcd.print(secon%10);lcd.print(" ");
    lcd.print(data/10);lcd.print(data%10);lcd.print("-");
    lcd.print(mon/10);lcd.print(mon%10);lcd.print("-");
    lcd.print(year);
    
       
    if(tim_w==1){tim_w=0; clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(100);} 
  }
 
/////// EEPROM //////////////////////////////////////
if(millis()-times>10000 && w1==1 && mute==0 && power==0){w1=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);
     EEPROM.update(7,brig0);EEPROM.update(8,brig1);
     menu=0;cl();
     }

  if(power==1){digitalWrite(7,LOW);
     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(i=0;i<6;i++){
      switch(i){
        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;
        case 4: e1=14,e2=15,e3=16;break;
        case 5: e1=17,e2=18,e3=19;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=4,d3=6,d4=1,d5=3,d6=3;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);
  }
  lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(13,0);lcd.print(".");lcd.setCursor(6,1);lcd.print(".");lcd.setCursor(13,1);lcd.print(".");
  lcd.setCursor(0,2);lcd.print("--------------------");
  lcd.setCursor(6,3);lcd.print("STANDBY");
  }      
            
  
  }  /// END LOOP

  
void au(){if(www==1){audio();www=0;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);} 
void brig1_func(){if(brig1>10){brig1=10;}if(brig1<0){brig1=0;}}
void brig0_func(){if(brig0>10){brig0=10;}if(brig0<0){brig0=0;}}
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
  }

void to_Timer(){newPosition = myEnc.read()/4;} 
void vol_func(){if(vol<0){vol=0;}if(vol>64){vol=64;}}

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=4,d3=6,d4=1,d5=3,d6=3;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);}

116

Re: PT2258 + LCD2004_I2C + IR + DS3231

Управлялась только с пульта.  Сама акустика живая только не работает регулировка.Пульт подобрать не удается, Сейчас собрал по вашей схеме и прошивке надисплее 2004, проверю работоспособность PT2258, а потом буду думать как перейти на олед,

Как называется АС?

117

Re: PT2258 + LCD2004_I2C + IR + DS3231

китай под именем KELE

118

Re: PT2258 + LCD2004_I2C + IR + DS3231

http://forum.rcl-radio.ru/uploads/images/2022/11/54a7f74b0020fb73e1f47bed1c299c97.jpg

119

Re: PT2258 + LCD2004_I2C + IR + DS3231

P8052B из панельки вытащил вызвонил сигнал standby. 6 и 7  gnd для PT2258

120

Re: PT2258 + LCD2004_I2C + IR + DS3231

Вот тесовые скетчи для pt2258 - https://github.com/liman324/PT2258

Я так понимаю Вы хотите к pt2258 добавить OLED 0.96 и ИК пульт?

121

Re: PT2258 + LCD2004_I2C + IR + DS3231

Да так. Спасибо.

122

Re: PT2258 + LCD2004_I2C + IR + DS3231

Кроме пульта других органов управления не будет?

123

Re: PT2258 + LCD2004_I2C + IR + DS3231

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

124

Re: PT2258 + LCD2004_I2C + IR + DS3231

Сейчас попробую залить крайний ваш скетч.

125

Re: PT2258 + LCD2004_I2C + IR + DS3231

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

Энокдер - модуль, должны стоять 3 подтягивающих резистора по 10 К.

Кнопки нажатие = замыкание на GND