76

Re: PT2258 + LCD2004_I2C + IR + DS3231

еще проблемка, когда включаю подсветку экрана:
-при выключении - 25% яркости
-включение - 60% и после прохода гаснет
-при активном экране - подсветка 0%
только перевожу в стандбай - подсветка встает на 25% как ни в чем не бывало
подскажите где я накосяячил?

77

Re: PT2258 + LCD2004_I2C + IR + DS3231

Опубликуйте последнюю версию скетча.

78 (2022-08-16 18:58:43 отредактировано De_Grave)

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> // [url]http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1[/url]
#include <Encoder.h>           // [url]http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip[/url]       
#include <EEPROM.h>
#include <MsTimer2.h>          // [url]http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip[/url] 
#include <boarddefs.h>         // входит в состав библиотеки IRremote
#include <IRremote.h>          // [url]http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip[/url]
#include <PT2258.h> // [url]https://github.com/liman324/PT2258.git[/url]
#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 = 10; i >=1 ; i--) {
   brig = i;analogWrite(6, brig * 25); 
      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(" ");}   
 //-----------------------------------------------------------------------------------------------------------      
   //перемещение снежинок......первая и последняя строчки   
   
     //строчки с  четными секундами
    for(int i=0;i<=9;i++){
    if(secon % 10 == i && secon / 10 == 0 || secon % 10 == i && secon / 10 == 2||secon % 10 == i && secon / 10 == 4)
           {lcd.setCursor(0+i,0);lcd.write(42);/////чет,верхняя строка с 0го до 19го знака, сдвиг вправо, символ "*"
            lcd.setCursor(19-i,3);lcd.write(42);}///чет,нижняя строка  с 19го до 0го знака, сдвиг влево, символ "*"
      else {lcd.setCursor(0+i,0);lcd.print(" ");////чет,верхняя строка с 0го до 19го знака, сдвиг вправо, символ " "
            lcd.setCursor(19-i,3);lcd.print(" ");}//чет,нижняя строка  с 19го до 0го знака, сдвиг влево, символ " "
    }
    
     //строчки с  нечетными секундами
    for(int i=0;i<=9;i++){
    if(secon % 10 == i && secon / 10 == 1||secon % 10 == i && secon / 10 == 3||secon % 10 == i && secon / 10 == 5)
           {lcd.setCursor(10+i,0);lcd.write(42);////нечет,верхняя строка с 0го до 19го знака, сдвиг вправо, символ "*"
            lcd.setCursor(9-i,3);lcd.write(42);}///нечет,нижняя строка  с 19го до 0го знака, сдвиг влево, символ "*"
      else {lcd.setCursor(10+i,0);lcd.print(" ");//нечет,верхняя строка с 0го до 19го знака, сдвиг вправо, символ " "
            lcd.setCursor(9-i,3);lcd.print(" ");}//нечет,нижняя строка  с 19го до 0го знака, сдвиг влево, символ " "
    }
      
     
      //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);
}
   

79

Re: PT2258 + LCD2004_I2C + IR + DS3231

последний с форума брал, простите не умею сполер делать

80

Re: PT2258 + LCD2004_I2C + IR + DS3231

У Вас обьявлена пепременная i, но Вы ее используете в for как int i, переименуйте во всех for-ах переменную i.

81

Re: PT2258 + LCD2004_I2C + IR + DS3231

liman324 пишет:

У Вас обьявлена пепременная i, но Вы ее используете в for как int i, переименуйте во всех for-ах переменную i.

все "INT i" заменил на "i" эффект тот-же - подсветка есть везде кроме главного экрана и меню, затухания и рассвет на месте

82

Re: PT2258 + LCD2004_I2C + IR + DS3231

так просто не найти, после каждого analogWrite поставьте цифру для вывода в монитор порта

Serial.println("1");// 2,3, и тд

Откройте монитор порта и проследите в каком месте происходит сбой

83 (2022-08-17 15:30:37 отредактировано niko00780)

Re: PT2258 + LCD2004_I2C + IR + DS3231

De_Grave пишет:
liman324 пишет:

У Вас обьявлена пепременная i, но Вы ее используете в for как int i, переименуйте во всех for-ах переменную i.

все "INT i" заменил на "i" эффект тот-же - подсветка есть везде кроме главного экрана и меню, затухания и рассвет на месте

После включения зайдите в экран настроек SET(экран в это время без подсветки, смотрим на отражение на экран). Параметр BR ON равен чему? Измените его на любой, кроме 0.... При первой заливке скейча в eprom ардуины этот параметр будет 0.....

84

Re: PT2258 + LCD2004_I2C + IR + DS3231

вообще надо поправить подсветку, чтобы не с нуля регулировка  начиналась, а с единицы.....

85

Re: PT2258 + LCD2004_I2C + IR + DS3231

спасибо огромное, квест прошел))))
это я "великий разум" случайно поменял значение и думал что откатил

еще вопросик термодатчик на 5 пине, пин меги или d5 ардуинки?
и пойду рисовать плату)

86

Re: PT2258 + LCD2004_I2C + IR + DS3231

а почему Ваш выбор пал именно на экран 2004?

87

Re: PT2258 + LCD2004_I2C + IR + DS3231

De_Grave пишет:

а почему Ваш выбор пал именно на экран 2004?

А какой выбор??? 1602 маленький, Пиксельный какой и сложнее программировать и гораздо дороже. Была мысль ОЛЕД 2004 взять, но там тоже не все так просто.... И на ОЛЕД цена конская...... И на втором таком же экране  планирую сделать анализатор спектра и использовать это все  в одном  оконечном шестиканальном УМЗЧ

88 (2022-09-02 14:55:43 отредактировано De_Grave)

Re: PT2258 + LCD2004_I2C + IR + DS3231

niko00780 пишет:

А какой выбор??? 1602 маленький, Пиксельный какой и сложнее программировать и гораздо дороже. Была мысль ОЛЕД 2004 взять, но там тоже не все так просто.... И на ОЛЕД цена конская...... И на втором таком же экране  планирую сделать анализатор спектра и использовать это все  в одном  оконечном шестиканальном УМЗЧ

есть дешевый I2C экран размером 48х25 и разрешением 128х64
https://aliexpress.ru/item/1005004237282931.html
к примеру.
Просто, с экраном 100х60мм, сложно двигаться в корпусе, да и что если вместо ик поставить 433Mhz прием-передатчик(SNY115/SNY480R), так орган управления не будет привязан к положению, и вместо того, чтобы коробку(в моем случае это вуфер, в котором собран усилок)ставить на стол - маленькую аккуратную коробочку с экраном и энкодером... было бы просто супер.
Но, поскольку я в программировании никак - буду колхозить экранище, зато, надеюсь, оживет аппарат))

89

Re: PT2258 + LCD2004_I2C + IR + DS3231

De_Grave пишет:

есть дешевый I2C экран размером 48х25 и разрешением 128х64
https://aliexpress.ru/item/1005004237282931.html
к примеру......

В Вашем случае может быть и оправдан такой экранчик, если стоит на столе блок.

В моем случае экран(экраны) будут установлены в стационарный оконечный усилитель и управление в основном с пульта издалека.....

90

Re: PT2258 + LCD2004_I2C + IR + DS3231

niko00780 пишет:

В моем случае экран(экраны) будут установлены в стационарный оконечный усилитель и управление в основном с пульта издалека.....

никоем образом не хотел вас задеть, идея в любом случае шикарная - было просто интересно о выборе модуля.
А по поводу модулей беспроводных, можно ли их поставить вместо ИК датчика и приемника?
Очень удобно, когда не надо наводить лентяйку на блок))

91

Re: PT2258 + LCD2004_I2C + IR + DS3231

Добрый день.
собрал все, не регулируется ничего, прошелся сканером порта, мое устройство(рт2258) под адресом 0х40. Я так понял по умолчанию 0х88. судя из статьи адрес меняется в файле 2258.h, поменял 0В1000100 на 0В0100100 и толку нет...что я не так сделал, подскажите пожалуйста.

92

Re: PT2258 + LCD2004_I2C + IR + DS3231

Если у Вас адрес 0х40, так его и указывайте, 0В0100100 - это же не 0х40

93 (2022-09-08 20:51:16 отредактировано De_Grave)

Re: PT2258 + LCD2004_I2C + IR + DS3231

liman324 пишет:

Если у Вас адрес 0х40, так его и указывайте, 0В0100100 - это же не 0х40

не с 16-ричной в двоичную?
вышло 01001000

94

Re: PT2258 + LCD2004_I2C + IR + DS3231

http://forum.rcl-radio.ru/uploads/images/2022/09/a7bfef175a62f8ad38f7d067a0c52d96.png

Можно использовать любую систему исчисления, необязательно переводить в двоичную систему

95

Re: PT2258 + LCD2004_I2C + IR + DS3231

все понял, спасибо

96

Re: PT2258 + LCD2004_I2C + IR + DS3231

Привет, какова текущая новая схема и код?

Спасибо, хорошего дня

97

Re: PT2258 + LCD2004_I2C + IR + DS3231

Скажите пожалуйста, почему при изменении громкости на дисплее показания изменяются, а по факту нет. Все собрал согласно схеме. Никак не могу понять(

98

Re: PT2258 + LCD2004_I2C + IR + DS3231

Загрузите i2c сканер - http://forum.rcl-radio.ru/viewtopic.php?id=64, проверьте видит ли контроллера адрес аудиопроцессора

99

Re: PT2258 + LCD2004_I2C + IR + DS3231

liman324 пишет:

Загрузите i2c сканер - http://forum.rcl-radio.ru/viewtopic.php?id=64, проверьте видит ли контроллера адрес аудиопроцессора

Хорошо, попробую, но, к сожалению, смогу сделать это только послезавтра. Спасибо!

100

Re: PT2258 + LCD2004_I2C + IR + DS3231

liman324 пишет:

Загрузите i2c сканер - http://forum.rcl-radio.ru/viewtopic.php?id=64, проверьте видит ли контроллера адрес аудиопроцессора

http://forum.rcl-radio.ru/uploads/images/2022/10/a136af0cfa6b8c71f826139092f540cc.jpg
Загрузил скетч, i2c видит pt2258 (0х42), ds3231(0x68), lcd(0x27)
По-прежнему pt2258 не реагирует на изменение громкости с пульта.