101

Re: M61541fp + PT2323 на Microlab H-600

Входы я поправил.

Защита, судя по коду который Вы мне прислали, нужно управлять 3-я реле.
Защита состоит из 2-х сигналов, если на одном из них появится напряжение больше 1 В, то мгновенно отключить все три реле. Опрос напряжения каждые 500 мс.
При срабатывании защиты сделать надпись на экране.

Я все правильно понял?

У меня плата Arduino UNO, в ней все аналоговые порты уже заняты, но в Arduino Nano есть А6 и А7, если у Вас Arduino Nano, то все хорошо, буду использовать их. Правда проверить как работает защита я не смогу.

Так же сейчас есть функция STANDBY, она использует один выходной управляющий пин, я так понял Вам нужно не один а три выход для управления тремя реле? Которые должны активировать при подачи питания по определенному порядку и с временными интервалами, опишите этот порядок и временные интервалы или могу сделать как у Вас в коде который Вы мне прислали.

102

Re: M61541fp + PT2323 на Microlab H-600

да у меня нано

103

Re: M61541fp + PT2323 на Microlab H-600

да как я прислал, 2 пина хватаеть на реле один пин постаяно почти а 2 пин при подключение мулти канал

104

Re: M61541fp + PT2323 на Microlab H-600

1 пин на STANDBY и 1 на MULTI? Верно?

105

Re: M61541fp + PT2323 на Microlab H-600

нет 2 пин на реле акустику

106

Re: M61541fp + PT2323 на Microlab H-600

ок

107

Re: M61541fp + PT2323 на Microlab H-600

// R2A15218FP
#define DATA    2
#define CLK     3
// ENCODER
#define DT_EN   9
#define CLK_EN  8
#define SW_EN   10
// IR_PIN
#define IR_PIN  12
// LCD_LED - яркость подсветки LCD
#define BRIG_H  200      // Яркость 0...255 POWER ON - мерьте ток после 200, больше 20 мА нельзя.
#define BRIG_L  50       // Яркость 0...255 POWER OFF
// BUTTON - кнопки
#define SET     A0 
#define IN_SET  A1 
#define POWER   A2 
#define MUTE    A3 
// IR - коды кнопок
#define IR_SET    0x2FDAA55
#define IR_OK     0x2FDB24D
#define IR_UP     0x2FDD02F
#define IR_DW     0x2FD32CD
#define IR_IN     0x2FD6A95
#define IR_POWER  0x2FD00FF
#define IR_MUTE   0x2FDB04F
// OUTPUN PIN - пины управления
#define PIN_MUTE     4
#define PIN_STANDBY  5
#define PIN_SOUND    13
#define PIN_MULTI    11
// ANALOG PIN
#define V_PROT_PIN   A6
#define I_PROT_PIN   A7

// Порог срабатывания (примерно 1 вольт)
// Arduino видит 5V как 1023. 1V это примерно 200 единиц.
const int PROT_THRESHOLD = 200; 

#include "Arduino.h"
#include <Librarie_R2A15218FP_V1_1.h> // http://rcl-radio.ru/wp-content/uploads/2026/02/Librarie_R2A15218FP_V1_1.zip
#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 <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip

 Librarie_R2A15218FP_V1_1 librarie_R2A15218FP_V1_1(DATA, CLK); 
 DS3231 clock;RTCDateTime DateTime;
 LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
 IRrecv irrecv(IR_PIN); 
 Encoder myEnc(DT_EN, CLK_EN);
 decode_results ir; 

// Настройки громкости 
int cch_volume = 0;     // Центральный канал (Cch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)      // int -95 ... 42 | step 1
int srch_volume = 0;    // Правый тыловой канал (SRch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)  // int -95 ... 42 | step 1
int slch_volume = 0;    // Левый тыловой канал (SLch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)   // int -95 ... 42 | step 1
int swch_volume = 0;    // Сабвуфер (SWch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)              // int -95 ... 42 | step 1
int flch_volume = 0;    // Левый фронтальный канал (FLch) — базовое ослабление // Диапазон: –95…0 дБ                // int -95 ... 0  | step 1
int flch_volume_up = 0; // Левый фронтальный канал (FLch) - усиление // Диапазон усиления: 0…+42 дБ                // int  0 ... 42  | step 1
int frch_volume = 0;    // Правый фронтальный канал (FRch) — базовое ослабление // Диапазон: –95…0 дБ               // int -95 ... 0  | step 1
int frch_volume_up = 0; // Правый фронтальный канал (FRch) - усиление // Диапазон усиления: 0…+42 дБ                // int  0 ... 42  | step 1

// Настройки эквалайзера
int bass = 0;             // Регулировка басов (BASS) // Диапазон: –14…+14 дБ                                       // int -14 ... 14 | step 2                                    
int treble = 0;           // Регулировка высоких частот (TREBLE)  // Диапазон: –14…+14 дБ                           // int -14 ... 14 | step 2      

int sl_sr_vol_input = 0;  // SL/SR Vol INPUT
     // Multi IN1    int 0
     // Multi IN2    int 1
     // S(R/L)CIN    int 2
     // SB(R/L)CIN   int 3

int l_r_vol_input = 0;   // L/R Vol INPUT
     // Bypass MAIN  int 0
     // Multi IN1    int 1
     // Multi IN2    int 3

int rec_i_o = 0;  // Переключение REC I/O (воспроизведение/запись)
    // int 0 — REC OUTPUT
    // int 1 — REC INPUT
    
int input_sub = 0;       // Вспомогательный вход (INPUT SUB) | int 0... 15  
int input_main = 0;      // Основной вход (INPUT MAIN) | int 0 ... 15

int rec_m_s = 0;         // REC input Main or Sub
    // int 0 — MAIN
    // int 1 — SUB

// Каналы записи (многоканальная система)
int rec5 = 0;        // Канал REC 5  // 0 — неактивен (по умолчанию)
int rec4 = 0;        // Канал REC 4  // 0 — неактивен (по умолчанию)
int rec3 = 0;        // Канал REC 3  // 0 — неактивен (по умолчанию)
int rec2 = 0;        // Канал REC 2  // 0 — неактивен (по умолчанию)
int rec1 = 0;        // Канал REC 1  // 0 — неактивен (по умолчанию)

int att = 0;     // ATT ouy ADC
    //   int 0 — 0 дБ (без ослабления)
    //   int 1 — –6 дБ
    //   int 2 — –12 дБ
    //   int 3 — –18 дБ (максимальное ослабление)

int c_sw_v = 0;      // C/SW Vol INPUT 
    // int 0 — Multi IN1 
    // int 1 — Multi IN2 

int mix = 0;           // Mix/Tone
    // int 0 - Tone
    // int 1 - Tone + Mix

int bypass = 1;       // Bypass/Tone
    // int 1 - Bypass
    // int 0 - Tone

int volume;
int cch_att, srch_att, slch_att, swch_att, flch_att, frch_att;
long time0,oldPosition  = -999,newPosition;
bool power,w,www,mute,gr1,gr2;
int menu1,menu0,menu,temp0,vol_d,q,z1,z0,z,w2[4],bass_d,treb_d,par,z_old;
int in_x,in_time;
 byte mesto2[8]={0,10,0,10,0,10,0,10};
 byte mesto3[8]={0,0,1,1,2,2,3,3};
 int in_ch, in_set;
 int hour,minut,secon;

void setup() {
  irrecv.enableIRIn();lcd.init();clock.begin();lcd.backlight();Serial.begin(9600);
  pinMode(SW_EN,INPUT);  // МЕНЮ КНОПКА SW энкодера
  pinMode(6,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ - менять пин нельзя
  pinMode(PIN_STANDBY,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ STANDBY
  pinMode(PIN_SOUND,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ STANDBY
  pinMode(PIN_MUTE,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ MUTE
  pinMode(PIN_MULTI,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ MULTI
  pinMode(SET,INPUT_PULLUP);   // КНОПКА SET
  pinMode(IN_SET,INPUT_PULLUP);   // КНОПКА INPUT_SET
  pinMode(POWER,INPUT_PULLUP);   // КНОПКА POWER
  pinMode(MUTE,INPUT_PULLUP);   // КНОПКА MUTE
  analogWrite(6, BRIG_H);// больше 200 не делать
  digitalWrite(PIN_STANDBY,HIGH);
  lcd.setCursor(3,1);lcd.print("Sound Processor");lcd.setCursor(5,2);lcd.print("R2A15218FP"); delay(1000);lcd.clear();
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  //  clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  delay(100);
  digitalWrite(PIN_SOUND,HIGH);
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
  volume = EEPROM.read(0)-95;bass = EEPROM.read(1)-7;treble = EEPROM.read(2)-7;
  cch_att=EEPROM.read(3);srch_att=EEPROM.read(4);slch_att=EEPROM.read(5);swch_att=EEPROM.read(6);
  flch_att=EEPROM.read(7); frch_att=EEPROM.read(8);
  in_set=EEPROM.read(9); in_ch=EEPROM.read(10);
  input_main = in_ch;
  switch(in_set){
      case 0: l_r_vol_input = 0;break;
      case 1: l_r_vol_input = 1;break;
      }
  w2_arr();audio();
}

void loop() {
 /// Защита ///////////////////////////////////////////////////////////////////////////////
  int v_val = analogRead(V_PROT_PIN);
  int i_val = analogRead(I_PROT_PIN);
  static unsigned long lastPrint = 0;
  if (millis() - lastPrint > 500) {lastPrint = millis();}
  if (v_val > PROT_THRESHOLD || i_val > PROT_THRESHOLD) {
  emergencyStop(v_val, i_val);
    }
///////////////////////////////////////////////////////////////////////////////////////////
   if(in_set==1){digitalWrite(PIN_MULTI,HIGH);}else{digitalWrite(PIN_MULTI,LOW);}
   DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;

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

   if(power==0){
   if((ir.value==IR_OK||digitalRead(SW_EN)==LOW)&&menu0==0){menu++;delay(200);time0=millis();cl1();in_x=0;w=1;w2_arr();if(menu>2){menu=0;}}// меню 0
   if((ir.value==IR_OK||digitalRead(SW_EN)==LOW)&&menu0==1){menu1++;delay(200);time0=millis();cl1();in_x=0;w=1;if(menu1>5){menu1=0;}}// меню 1
   if(ir.value==IR_IN||digitalRead(IN_SET)==LOW){if(in_x==1){in_set++;}cl();time0=millis();in_x=1;w=1;www=1;menu0=100;menu=100;if(in_set>1){in_set=0;}
    switch(in_set){
      case 0: l_r_vol_input = 0;break;
      case 1: l_r_vol_input = 1;break;
      }
   }// IN_SET  

   if(ir.value==IR_SET||digitalRead(SET)==LOW){menu0++;if(menu0>1){menu0=0;}cl();in_x=0;w2_arr();time0=millis();w=1;lcd.setCursor(4,1);delay(300);lcd.clear();} 
   
   if((ir.value==IR_MUTE||digitalRead(MUTE)==LOW)&&mute==0){mute=1;in_x=0;menu0=100;cl();lcd.setCursor(8,1);lcd.print("MUTE");digitalWrite(PIN_MUTE,HIGH);delay(500);}// mute on
   if((ir.value==IR_MUTE||digitalRead(MUTE)==LOW)&&mute==1){mute=0;cl();time0=millis();w=1;w2_arr();menu0=0;menu=0;myEnc.write(0);digitalWrite(PIN_MUTE,LOW);delay(500);}// mute off
  }// power 0
   
   if((ir.value==IR_POWER||digitalRead(POWER)==LOW)&&power==0){power=1;in_x=0;cl();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);analogWrite(6,BRIG_L);digitalWrite(PIN_MUTE,HIGH);}// power off
   if((ir.value==IR_POWER||digitalRead(POWER)==LOW)&&power==1){power=0;analogWrite(6, BRIG_H);cl();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);mute=1;audio();delay(3000);digitalWrite(PIN_MUTE,LOW);cl();}// power on
 
 if(power==0){digitalWrite(PIN_STANDBY,HIGH);
   byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
   byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
   byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000}; 
   byte a4[8] = {0b10000,0b11000,0b11100,0b11110,0b11100,0b11000,0b10000,0b00000}; //>
   byte a5[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(3,a4);lcd.createChar(4,a5);
  }  
   if(power==1){digitalWrite(PIN_STANDBY,LOW);
      byte v1[8] = {7,7,7,7,7,7,7,7};
      byte v2[8] = {7,7,0, 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] = { 28, 28, 0, 0, 0, 0, 28, 28};
      byte v6[8] = {28,28,28,28,28,28,28,28};
      byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
      byte v8[8] = { 31, 31,0,0,0,0,0, 0};
   byte a[6];
   byte i0,d1,d2,d3,d4,d5,d6,e1,e2,e3;
  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);
 
     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(int 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=8,d3=6,d4=1,d5=4,d6=5;break;
        case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
        case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
        case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
        case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
        case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
        case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
        case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
    }
 
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);
  }
  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(5,3);lcd.print("POWER  OFF");
  if(digitalRead(SW_EN)==LOW&&digitalRead(SET)==LOW){hour++;if(hour>23){hour=0;} clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100);}    // SET
  if(digitalRead(SW_EN)==LOW&&digitalRead(IN_SET)==LOW){minut++;if(minut>59){minut=0;} clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100); }// IN
  if(digitalRead(SW_EN)==LOW&&digitalRead(MUTE)==LOW){secon=0; clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100); }                      // MUTE
  } 
/////////////////////////////// MENU0 = VOLUME TERBLE BASS ///////////////////////////////////////////////////////////////////////
  if(menu0==0){ 
    switch(menu){
      case 0: temp0 = volume;q=0;break;
      case 1: temp0 = bass;q=1;break;
      case 2: temp0 = treble;q=2;break;
      }
 
     if(ir.value==IR_UP){temp0++;gr1=1;gr2=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_DW){temp0--;gr1=0;gr2=1;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка <<<<<<   
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time0=millis();w=1;w2[q]=1;www=1;} 
 
     switch(menu){
      case 0: volume = temp0;vol_func();break;
      case 1: bass = temp0;bass_func();break;
      case 2: treble = temp0;treb_func();break;
      }
   
   au();
   for(int i=0;i<3;i++){if(menu==i){lcd.setCursor(0,i);lcd.write((uint8_t)3);}else{lcd.setCursor(0,i);lcd.print(" ");}}
   lcd.setCursor(1,0);lcd.print("VOLUME ");if(volume>=0){lcd.print(" ");}lcd.print(volume);lcd.print(" ");vol_d=map(volume,-95,0,1,24);
   lcd.setCursor(1,1);lcd.print("BASS   ");if(bass>=0){lcd.print(" ");}lcd.print(bass*2);lcd.print(" ");bass_d=map(bass,-7,7,1,24);
   lcd.setCursor(1,2);lcd.print("TREBLE ");if(treble>=0){lcd.print(" ");}lcd.print(treble*2);lcd.print(" ");treb_d=map(treble,-7,7,1,24);
   lcd.setCursor(0,3);lcd.print(">INPUT ");
     switch(in_set){
      case 0: lcd.print("MAIN CH_");lcd.print(in_ch+1);break;
      case 1: lcd.print("MULTI_1  7.1");in_ch;break;
    //  case 2: lcd.print("MULTI_2  7.1");in_ch;break;
      }
 
 
   for(int n=0;n<3;n++){if(w2[n]==1){
   switch(n){
    case 0: par = vol_d;break;
    case 1: par = bass_d;break;
    case 2: par = treb_d;break; 
    } 
 
   for(z=0,z0=0,z1=0;z<=par;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+12,n);lcd.write((uint8_t)0);lcd.setCursor(z0+1+12,n);z_old=7-par/3;while(z_old>0){z_old=z_old-1;lcd.write((uint8_t)4);}}}
   if(z1==3){lcd.setCursor(z0+12,n);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+12,n);lcd.write((uint8_t)2);}w2[n]=0;}
   }}// menu0 = 0
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
 
 if(menu0==1){
     switch(menu1){
      case 0: temp0 = cch_att;break;
      case 1: temp0 = srch_att;break;
      case 2: temp0 = slch_att;break;
      case 3: temp0 = swch_att;break;
      case 4: temp0 = flch_att;break;
      case 5: temp0 = frch_att;break;
      }
 
     if(ir.value==IR_UP){temp0++;gr1=1;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_DW){temp0--;gr1=0;gr2=1;cl1();time0=millis();;w=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time0=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time0=millis();w=1;www=1;} 
 
     switch(menu1){
      case 0: cch_att = temp0;cch_att_func();break;
      case 1: srch_att = temp0;srch_att_func();break;
      case 2: slch_att = temp0;slch_att_func();break;
      case 3: swch_att = temp0;swch_att_func();break;      
      case 4: flch_att  = temp0;flch_att_func();break;
      case 5: frch_att  = temp0;frch_att_func();break;
      }
 
  au();
  for(int i=0;i<6;i++){if(menu1==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(" ");}}
 
  lcd.setCursor(1,0);lcd.print("AT_C  ");lcd.print(cch_att);lcd.print(" ");lcd.setCursor(11,0);lcd.print("AT_SR ");lcd.print(srch_att);lcd.print(" ");
  lcd.setCursor(1,1);lcd.print("AT_SL ");lcd.print(slch_att);lcd.print(" ");lcd.setCursor(11,1);lcd.print("AT_SW ");lcd.print(swch_att);lcd.print(" ");
  lcd.setCursor(1,2);lcd.print("AT_FL ");lcd.print(flch_att);lcd.print(" ");lcd.setCursor(11,2);lcd.print("AT_FR ");lcd.print(frch_att);lcd.print(" ");
 // lcd.setCursor(1,3);lcd.print("LOUND ");lcd.print(abs(loun));lcd.print(" ");lcd.setCursor(11,3);

 
 } // menu0 = 1

////////////////////////// GAIN IN /////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){ menu0=100; 
 
    if (newPosition != oldPosition) {oldPosition = newPosition;
    in_ch=in_ch+newPosition;myEnc.write(0);newPosition=0;time0=millis();www=1;w=1;in_func();input_main = in_ch;
    } 

     if(ir.value==IR_UP){in_ch++;gr1=1;gr2=0;cl1();time0=millis();www=1;w=1;in_func();input_main = in_ch;}// кнопка > 
     if(ir.value==IR_DW){in_ch--;gr1=0;gr2=1;cl1();time0=millis();www=1;w=1;in_func();input_main = in_ch;}// кнопка <
 
  au();
  if(in_set==0){lcd.setCursor(5,1);lcd.print("MAIN CH_");lcd.print(in_ch+1);}
  if(in_set==1){lcd.setCursor(6,1);lcd.print("MULTI_1 ");}
 // if(in_set==2){lcd.setCursor(6,1);lcd.print("MULTI_2 ");}
  }
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){in_time=3000;}else{in_time=10000;}
if(millis()-time0>in_time&&w==1&&mute==0&&power==0){if(menu0==1){cl();}w=0;if(menu0!=0){cl();}menu0=0;menu=0;in_x=0;w2_arr();
   EEPROM.update(0,volume+95);EEPROM.update(1,bass+7);EEPROM.update(2,treble+7);
   EEPROM.update(3,cch_att);EEPROM.update(4,srch_att);EEPROM.update(5,slch_att);
   EEPROM.update(6,swch_att);EEPROM.update(7,flch_att);EEPROM.update(8,frch_att);
   EEPROM.update(9,in_set);EEPROM.update(10,in_ch);
   }
 
  }

void audio(){
   if(volume+flch_att>0){flch_volume=0;flch_volume_up=volume+flch_att;}else{flch_volume=volume+flch_att;flch_volume_up=0;}
   if(volume+flch_att>0){frch_volume=0;frch_volume_up=volume+flch_att;}else{frch_volume=volume+flch_att;frch_volume_up=0;}
   librarie_R2A15218FP_V1_1.R2A15218FP_V1_1(rec_i_o, bass*2, l_r_vol_input, input_sub, input_main, treble*2, flch_volume_up, flch_volume, rec_m_s, rec5, rec4, rec3, rec2, rec1, frch_volume_up, frch_volume, att, c_sw_v, swch_volume, cch_volume, sl_sr_vol_input, srch_volume, slch_volume, mix, bypass); 
  }

void to_Timer(){newPosition = myEnc.read()/4;}  
void vol_func(){if(volume<-95){volume=-95;}if(volume>0){volume=0;}}
void treb_func(){if(treble<-7){treble=-7;}if(treble>7){treble=7;}}
void bass_func(){if(bass<-7){bass=-7;}if(bass>7){bass=7;}}
void au(){if(www==1){audio();www=0;}}
void w2_arr(){w2[0]=1;w2[1]=1;w2[2]=1;w2[3]=1;}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);} 
void cch_att_func(){if(cch_att<0){cch_att=0;}if(cch_att>42){cch_att=42;}}
void srch_att_func(){if(srch_att<0){srch_att=0;}if(srch_att>42){srch_att=42;}}
void slch_att_func(){if(slch_att<0){slch_att=0;}if(slch_att>42){slch_att=42;}}
void swch_att_func(){if(swch_att<0){swch_att=0;}if(swch_att>42){swch_att=42;}}     
void flch_att_func(){if(flch_att<0){flch_att=0;}if(flch_att>42){flch_att=42;}}
void frch_att_func(){if(frch_att<0){frch_att=0;}if(frch_att>42){frch_att=42;}}
void in_func(){if(in_ch>5){in_ch=0;}if(in_ch<0){in_ch=0;}}

void emergencyStop(int v00, int i00) {
  // Мгновенно выключаем всё в обратном порядке
  digitalWrite(PIN_STANDBY, LOW);
  digitalWrite(PIN_SOUND, LOW);
  Serial.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
  Serial.println("!!! EMERGENCY STOP ACTIVATED !!!");
  Serial.print("V_VAL: "); Serial.println(v00);
  if(v00>=200){cl();lcd.setCursor(5,1);menu0=100;lcd.print("ERROR V");}
  if(i00>=200){cl();lcd.setCursor(5,1);menu0=100;lcd.print("ERROR I");}
  Serial.print("I_VAL: "); Serial.println(i00);
  Serial.println("Check for DC on output or Short Circuit!");
  Serial.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
  while(true) {delay(100);}
}

108

Re: M61541fp + PT2323 на Microlab H-600

брать почему сразу ошибка выдает я еще не подключил защиту

109

Re: M61541fp + PT2323 на Microlab H-600

Если пины висят в воздухе, то они ловят помехи, пока на них можно подать GND

110

Re: M61541fp + PT2323 на Microlab H-600

liman324 пишет:

Если пины висят в воздухе, то они ловят помехи, пока на них можно подать GND

ага все тепер нормально работаеть

111

Re: M61541fp + PT2323 на Microlab H-600

брать вы не добавили еще одну пин для акустику на мульти каналу

112

Re: M61541fp + PT2323 на Microlab H-600

PIN_MULTI    11 - добавлено

if(in_set==1){digitalWrite(PIN_MULTI,HIGH);}else{digitalWrite(PIN_MULTI,LOW);}

113

Re: M61541fp + PT2323 на Microlab H-600

При подаче питания, сразу после заставки схема переходит в MENU0 = VOLUME TERBLE BASS    , желательно чтоб выходила  режим OFF

114

Re: M61541fp + PT2323 на Microlab H-600

// R2A15218FP
#define DATA    2
#define CLK     3
// ENCODER
#define DT_EN   9
#define CLK_EN  8
#define SW_EN   10
// IR_PIN
#define IR_PIN  12
// LCD_LED - яркость подсветки LCD
#define BRIG_H  200      // Яркость 0...255 POWER ON - мерьте ток после 200, больше 20 мА нельзя.
#define BRIG_L  50       // Яркость 0...255 POWER OFF
// BUTTON - кнопки
#define SET     A0 
#define IN_SET  A1 
#define POWER   A2 
#define MUTE    A3 
// IR - коды кнопок
#define IR_SET    0x2FDAA55
#define IR_OK     0x2FDB24D
#define IR_UP     0x2FDD02F
#define IR_DW     0x2FD32CD
#define IR_IN     0x2FD6A95
#define IR_POWER  0x2FD00FF
#define IR_MUTE   0x2FDB04F
// OUTPUN PIN - пины управления
#define PIN_MUTE     4
#define PIN_STANDBY  5
#define PIN_SOUND    13
#define PIN_MULTI    11
// ANALOG PIN
#define V_PROT_PIN   A6
#define I_PROT_PIN   A7

// Порог срабатывания (примерно 1 вольт)
// Arduino видит 5V как 1023. 1V это примерно 200 единиц.
const int PROT_THRESHOLD = 200; 

#include "Arduino.h"
#include <Librarie_R2A15218FP_V1_1.h> // http://rcl-radio.ru/wp-content/uploads/2026/02/Librarie_R2A15218FP_V1_1.zip
#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 <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip

 Librarie_R2A15218FP_V1_1 librarie_R2A15218FP_V1_1(DATA, CLK); 
 DS3231 clock;RTCDateTime DateTime;
 LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
 IRrecv irrecv(IR_PIN); 
 Encoder myEnc(DT_EN, CLK_EN);
 decode_results ir; 

// Настройки громкости 
int cch_volume = 0;     // Центральный канал (Cch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)      // int -95 ... 42 | step 1
int srch_volume = 0;    // Правый тыловой канал (SRch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)  // int -95 ... 42 | step 1
int slch_volume = 0;    // Левый тыловой канал (SLch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)   // int -95 ... 42 | step 1
int swch_volume = 0;    // Сабвуфер (SWch) // Диапазон регулировки: –95…+42 дБ (ослабление + усиление)              // int -95 ... 42 | step 1
int flch_volume = 0;    // Левый фронтальный канал (FLch) — базовое ослабление // Диапазон: –95…0 дБ                // int -95 ... 0  | step 1
int flch_volume_up = 0; // Левый фронтальный канал (FLch) - усиление // Диапазон усиления: 0…+42 дБ                // int  0 ... 42  | step 1
int frch_volume = 0;    // Правый фронтальный канал (FRch) — базовое ослабление // Диапазон: –95…0 дБ               // int -95 ... 0  | step 1
int frch_volume_up = 0; // Правый фронтальный канал (FRch) - усиление // Диапазон усиления: 0…+42 дБ                // int  0 ... 42  | step 1

// Настройки эквалайзера
int bass = 0;             // Регулировка басов (BASS) // Диапазон: –14…+14 дБ                                       // int -14 ... 14 | step 2                                    
int treble = 0;           // Регулировка высоких частот (TREBLE)  // Диапазон: –14…+14 дБ                           // int -14 ... 14 | step 2      

int sl_sr_vol_input = 0;  // SL/SR Vol INPUT
     // Multi IN1    int 0
     // Multi IN2    int 1
     // S(R/L)CIN    int 2
     // SB(R/L)CIN   int 3

int l_r_vol_input = 0;   // L/R Vol INPUT
     // Bypass MAIN  int 0
     // Multi IN1    int 1
     // Multi IN2    int 3

int rec_i_o = 0;  // Переключение REC I/O (воспроизведение/запись)
    // int 0 — REC OUTPUT
    // int 1 — REC INPUT
    
int input_sub = 0;       // Вспомогательный вход (INPUT SUB) | int 0... 15  
int input_main = 0;      // Основной вход (INPUT MAIN) | int 0 ... 15

int rec_m_s = 0;         // REC input Main or Sub
    // int 0 — MAIN
    // int 1 — SUB

// Каналы записи (многоканальная система)
int rec5 = 0;        // Канал REC 5  // 0 — неактивен (по умолчанию)
int rec4 = 0;        // Канал REC 4  // 0 — неактивен (по умолчанию)
int rec3 = 0;        // Канал REC 3  // 0 — неактивен (по умолчанию)
int rec2 = 0;        // Канал REC 2  // 0 — неактивен (по умолчанию)
int rec1 = 0;        // Канал REC 1  // 0 — неактивен (по умолчанию)

int att = 0;     // ATT ouy ADC
    //   int 0 — 0 дБ (без ослабления)
    //   int 1 — –6 дБ
    //   int 2 — –12 дБ
    //   int 3 — –18 дБ (максимальное ослабление)

int c_sw_v = 0;      // C/SW Vol INPUT 
    // int 0 — Multi IN1 
    // int 1 — Multi IN2 

int mix = 0;           // Mix/Tone
    // int 0 - Tone
    // int 1 - Tone + Mix

int bypass = 1;       // Bypass/Tone
    // int 1 - Bypass
    // int 0 - Tone

int volume;
int cch_att, srch_att, slch_att, swch_att, flch_att, frch_att;
long time0,oldPosition  = -999,newPosition;
bool power,w,www,mute,gr1,gr2;
int menu1,menu0,menu,temp0,vol_d,q,z1,z0,z,w2[4],bass_d,treb_d,par,z_old;
int in_x,in_time;
 byte mesto2[8]={0,10,0,10,0,10,0,10};
 byte mesto3[8]={0,0,1,1,2,2,3,3};
 int in_ch, in_set;
 int hour,minut,secon;
 bool stby=1;

void setup() {
  irrecv.enableIRIn();lcd.init();clock.begin();lcd.backlight();Serial.begin(9600);
  pinMode(SW_EN,INPUT);  // МЕНЮ КНОПКА SW энкодера
  pinMode(6,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ - менять пин нельзя
  pinMode(PIN_STANDBY,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ STANDBY
  pinMode(PIN_SOUND,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ STANDBY
  pinMode(PIN_MUTE,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ MUTE
  pinMode(PIN_MULTI,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ MUTE
  pinMode(SET,INPUT_PULLUP);   // КНОПКА SET
  pinMode(IN_SET,INPUT_PULLUP);   // КНОПКА INPUT_SET
  pinMode(POWER,INPUT_PULLUP);   // КНОПКА POWER
  pinMode(MUTE,INPUT_PULLUP);   // КНОПКА MUTE
  analogWrite(6, BRIG_H);// больше 200 не делать
  digitalWrite(PIN_STANDBY,HIGH);
  lcd.setCursor(3,1);lcd.print("Sound Processor");lcd.setCursor(5,2);lcd.print("R2A15218FP"); delay(1000);lcd.clear();
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  //  clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  delay(100);
  digitalWrite(PIN_SOUND,HIGH);
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
  volume = EEPROM.read(0)-95;bass = EEPROM.read(1)-7;treble = EEPROM.read(2)-7;
  cch_att=EEPROM.read(3);srch_att=EEPROM.read(4);slch_att=EEPROM.read(5);swch_att=EEPROM.read(6);
  flch_att=EEPROM.read(7); frch_att=EEPROM.read(8);
  in_set=EEPROM.read(9); in_ch=EEPROM.read(10);
  input_main = in_ch;
  switch(in_set){
      case 0: l_r_vol_input = 0;break;
      case 1: l_r_vol_input = 1;break;
      }
  w2_arr();audio();
}

void loop() {
 /// Защита ///////////////////////////////////////////////////////////////////////////////
  int v_val = analogRead(V_PROT_PIN);
  int i_val = analogRead(I_PROT_PIN);
  static unsigned long lastPrint = 0;
  if (millis() - lastPrint > 500) {lastPrint = millis();}
  if (v_val > PROT_THRESHOLD || i_val > PROT_THRESHOLD) {
    emergencyStop(v_val, i_val);
    }
///////////////////////////////////////////////////////////////////////////////////////////
   if(in_set==1){digitalWrite(PIN_MULTI,HIGH);}else{digitalWrite(PIN_MULTI,LOW);}
   DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;

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

   if(power==0){
   if((ir.value==IR_OK||digitalRead(SW_EN)==LOW)&&menu0==0){menu++;delay(200);time0=millis();cl1();in_x=0;w=1;w2_arr();if(menu>2){menu=0;}}// меню 0
   if((ir.value==IR_OK||digitalRead(SW_EN)==LOW)&&menu0==1){menu1++;delay(200);time0=millis();cl1();in_x=0;w=1;if(menu1>5){menu1=0;}}// меню 1
   if(ir.value==IR_IN||digitalRead(IN_SET)==LOW){if(in_x==1){in_set++;}cl();time0=millis();in_x=1;w=1;www=1;menu0=100;menu=100;if(in_set>1){in_set=0;}
    switch(in_set){
      case 0: l_r_vol_input = 0;break;
      case 1: l_r_vol_input = 1;break;
      }
   }// IN_SET  

   if(ir.value==IR_SET||digitalRead(SET)==LOW){menu0++;if(menu0>1){menu0=0;}cl();in_x=0;w2_arr();time0=millis();w=1;lcd.setCursor(4,1);delay(300);lcd.clear();} 
   
   if((ir.value==IR_MUTE||digitalRead(MUTE)==LOW)&&mute==0){mute=1;in_x=0;menu0=100;cl();lcd.setCursor(8,1);lcd.print("MUTE");digitalWrite(PIN_MUTE,HIGH);delay(500);}// mute on
   if((ir.value==IR_MUTE||digitalRead(MUTE)==LOW)&&mute==1){mute=0;cl();time0=millis();w=1;w2_arr();menu0=0;menu=0;myEnc.write(0);digitalWrite(PIN_MUTE,LOW);delay(500);}// mute off
  }// power 0
   
   if((ir.value==IR_POWER||digitalRead(POWER)==LOW||stby==1)&&power==0){stby=0;power=1;in_x=0;cl();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);analogWrite(6,BRIG_L);digitalWrite(PIN_MUTE,HIGH);}// power off
   if((ir.value==IR_POWER||digitalRead(POWER)==LOW)&&power==1){power=0;analogWrite(6, BRIG_H);cl();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);mute=1;audio();delay(3000);digitalWrite(PIN_MUTE,LOW);cl();}// power on
 
 if(power==0){digitalWrite(PIN_STANDBY,HIGH);
   byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
   byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
   byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000}; 
   byte a4[8] = {0b10000,0b11000,0b11100,0b11110,0b11100,0b11000,0b10000,0b00000}; //>
   byte a5[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(3,a4);lcd.createChar(4,a5);
  }  
   if(power==1){digitalWrite(PIN_STANDBY,LOW);
      byte v1[8] = {7,7,7,7,7,7,7,7};
      byte v2[8] = {7,7,0, 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] = { 28, 28, 0, 0, 0, 0, 28, 28};
      byte v6[8] = {28,28,28,28,28,28,28,28};
      byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
      byte v8[8] = { 31, 31,0,0,0,0,0, 0};
   byte a[6];
   byte i0,d1,d2,d3,d4,d5,d6,e1,e2,e3;
  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);
 
     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(int 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=8,d3=6,d4=1,d5=4,d6=5;break;
        case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
        case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
        case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
        case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
        case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
        case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
        case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
    }
 
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);
  }
  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(5,3);lcd.print("POWER  OFF");
  if(digitalRead(SW_EN)==LOW&&digitalRead(SET)==LOW){hour++;if(hour>23){hour=0;} clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100);}    // SET
  if(digitalRead(SW_EN)==LOW&&digitalRead(IN_SET)==LOW){minut++;if(minut>59){minut=0;} clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100); }// IN
  if(digitalRead(SW_EN)==LOW&&digitalRead(MUTE)==LOW){secon=0; clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100); }                      // MUTE
  } 
/////////////////////////////// MENU0 = VOLUME TERBLE BASS ///////////////////////////////////////////////////////////////////////
  if(menu0==0){ 
    switch(menu){
      case 0: temp0 = volume;q=0;break;
      case 1: temp0 = bass;q=1;break;
      case 2: temp0 = treble;q=2;break;
      }
 
     if(ir.value==IR_UP){temp0++;gr1=1;gr2=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_DW){temp0--;gr1=0;gr2=1;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка <<<<<<   
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time0=millis();w=1;w2[q]=1;www=1;} 
 
     switch(menu){
      case 0: volume = temp0;vol_func();break;
      case 1: bass = temp0;bass_func();break;
      case 2: treble = temp0;treb_func();break;
      }
   
   au();
   for(int i=0;i<3;i++){if(menu==i){lcd.setCursor(0,i);lcd.write((uint8_t)3);}else{lcd.setCursor(0,i);lcd.print(" ");}}
   lcd.setCursor(1,0);lcd.print("VOLUME ");if(volume>=0){lcd.print(" ");}lcd.print(volume);lcd.print(" ");vol_d=map(volume,-95,0,1,24);
   lcd.setCursor(1,1);lcd.print("BASS   ");if(bass>=0){lcd.print(" ");}lcd.print(bass*2);lcd.print(" ");bass_d=map(bass,-7,7,1,24);
   lcd.setCursor(1,2);lcd.print("TREBLE ");if(treble>=0){lcd.print(" ");}lcd.print(treble*2);lcd.print(" ");treb_d=map(treble,-7,7,1,24);
   lcd.setCursor(0,3);lcd.print(">INPUT ");
     switch(in_set){
      case 0: lcd.print("MAIN CH_");lcd.print(in_ch+1);break;
      case 1: lcd.print("MULTI_1  7.1");in_ch;break;
    //  case 2: lcd.print("MULTI_2  7.1");in_ch;break;
      }
 
 
   for(int n=0;n<3;n++){if(w2[n]==1){
   switch(n){
    case 0: par = vol_d;break;
    case 1: par = bass_d;break;
    case 2: par = treb_d;break; 
    } 
 
   for(z=0,z0=0,z1=0;z<=par;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+12,n);lcd.write((uint8_t)0);lcd.setCursor(z0+1+12,n);z_old=7-par/3;while(z_old>0){z_old=z_old-1;lcd.write((uint8_t)4);}}}
   if(z1==3){lcd.setCursor(z0+12,n);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+12,n);lcd.write((uint8_t)2);}w2[n]=0;}
   }}// menu0 = 0
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
 
 if(menu0==1){
     switch(menu1){
      case 0: temp0 = cch_att;break;
      case 1: temp0 = srch_att;break;
      case 2: temp0 = slch_att;break;
      case 3: temp0 = swch_att;break;
      case 4: temp0 = flch_att;break;
      case 5: temp0 = frch_att;break;
      }
 
     if(ir.value==IR_UP){temp0++;gr1=1;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_DW){temp0--;gr1=0;gr2=1;cl1();time0=millis();;w=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time0=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time0=millis();w=1;www=1;} 
 
     switch(menu1){
      case 0: cch_att = temp0;cch_att_func();break;
      case 1: srch_att = temp0;srch_att_func();break;
      case 2: slch_att = temp0;slch_att_func();break;
      case 3: swch_att = temp0;swch_att_func();break;      
      case 4: flch_att  = temp0;flch_att_func();break;
      case 5: frch_att  = temp0;frch_att_func();break;
      }
 
  au();
  for(int i=0;i<6;i++){if(menu1==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(" ");}}
 
  lcd.setCursor(1,0);lcd.print("AT_C  ");lcd.print(cch_att);lcd.print(" ");lcd.setCursor(11,0);lcd.print("AT_SR ");lcd.print(srch_att);lcd.print(" ");
  lcd.setCursor(1,1);lcd.print("AT_SL ");lcd.print(slch_att);lcd.print(" ");lcd.setCursor(11,1);lcd.print("AT_SW ");lcd.print(swch_att);lcd.print(" ");
  lcd.setCursor(1,2);lcd.print("AT_FL ");lcd.print(flch_att);lcd.print(" ");lcd.setCursor(11,2);lcd.print("AT_FR ");lcd.print(frch_att);lcd.print(" ");
 // lcd.setCursor(1,3);lcd.print("LOUND ");lcd.print(abs(loun));lcd.print(" ");lcd.setCursor(11,3);

 
 } // menu0 = 1

////////////////////////// GAIN IN /////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){ menu0=100; 
 
    if (newPosition != oldPosition) {oldPosition = newPosition;
    in_ch=in_ch+newPosition;myEnc.write(0);newPosition=0;time0=millis();www=1;w=1;in_func();input_main = in_ch;
    } 

     if(ir.value==IR_UP){in_ch++;gr1=1;gr2=0;cl1();time0=millis();www=1;w=1;in_func();input_main = in_ch;}// кнопка > 
     if(ir.value==IR_DW){in_ch--;gr1=0;gr2=1;cl1();time0=millis();www=1;w=1;in_func();input_main = in_ch;}// кнопка <
 
  au();
  if(in_set==0){lcd.setCursor(5,1);lcd.print("MAIN CH_");lcd.print(in_ch+1);}
  if(in_set==1){lcd.setCursor(6,1);lcd.print("MULTI_1 ");}
 // if(in_set==2){lcd.setCursor(6,1);lcd.print("MULTI_2 ");}
  }
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){in_time=3000;}else{in_time=10000;}
if(millis()-time0>in_time&&w==1&&mute==0&&power==0){if(menu0==1){cl();}w=0;if(menu0!=0){cl();}menu0=0;menu=0;in_x=0;w2_arr();
   EEPROM.update(0,volume+95);EEPROM.update(1,bass+7);EEPROM.update(2,treble+7);
   EEPROM.update(3,cch_att);EEPROM.update(4,srch_att);EEPROM.update(5,slch_att);
   EEPROM.update(6,swch_att);EEPROM.update(7,flch_att);EEPROM.update(8,frch_att);
   EEPROM.update(9,in_set);EEPROM.update(10,in_ch);
   }
 
  }

void audio(){
   if(volume+flch_att>0){flch_volume=0;flch_volume_up=volume+flch_att;}else{flch_volume=volume+flch_att;flch_volume_up=0;}
   if(volume+flch_att>0){frch_volume=0;frch_volume_up=volume+flch_att;}else{frch_volume=volume+flch_att;frch_volume_up=0;}
   librarie_R2A15218FP_V1_1.R2A15218FP_V1_1(rec_i_o, bass*2, l_r_vol_input, input_sub, input_main, treble*2, flch_volume_up, flch_volume, rec_m_s, rec5, rec4, rec3, rec2, rec1, frch_volume_up, frch_volume, att, c_sw_v, swch_volume, cch_volume, sl_sr_vol_input, srch_volume, slch_volume, mix, bypass); 
  }

void to_Timer(){newPosition = myEnc.read()/4;}  
void vol_func(){if(volume<-95){volume=-95;}if(volume>0){volume=0;}}
void treb_func(){if(treble<-7){treble=-7;}if(treble>7){treble=7;}}
void bass_func(){if(bass<-7){bass=-7;}if(bass>7){bass=7;}}
void au(){if(www==1){audio();www=0;}}
void w2_arr(){w2[0]=1;w2[1]=1;w2[2]=1;w2[3]=1;}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);} 
void cch_att_func(){if(cch_att<0){cch_att=0;}if(cch_att>42){cch_att=42;}}
void srch_att_func(){if(srch_att<0){srch_att=0;}if(srch_att>42){srch_att=42;}}
void slch_att_func(){if(slch_att<0){slch_att=0;}if(slch_att>42){slch_att=42;}}
void swch_att_func(){if(swch_att<0){swch_att=0;}if(swch_att>42){swch_att=42;}}     
void flch_att_func(){if(flch_att<0){flch_att=0;}if(flch_att>42){flch_att=42;}}
void frch_att_func(){if(frch_att<0){frch_att=0;}if(frch_att>42){frch_att=42;}}
void in_func(){if(in_ch>5){in_ch=0;}if(in_ch<0){in_ch=0;}}

void emergencyStop(int v00, int i00) {
  // Мгновенно выключаем всё в обратном порядке
  digitalWrite(PIN_STANDBY, LOW);
  digitalWrite(PIN_SOUND, LOW);
  Serial.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
  Serial.println("!!! EMERGENCY STOP ACTIVATED !!!");
  Serial.print("V_VAL: "); Serial.println(v00);
  if(v00>=200){cl();lcd.setCursor(5,1);menu0=100;lcd.print("ERROR V");}
  if(i00>=200){cl();lcd.setCursor(5,1);menu0=100;lcd.print("ERROR I");}
  Serial.print("I_VAL: "); Serial.println(i00);
  Serial.println("Check for DC on output or Short Circuit!");
  Serial.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
  while(true) {delay(100);}
}

115

Re: M61541fp + PT2323 на Microlab H-600

«Огромное спасибо за помощь! Я очень ценю вашу время и поддержку. Если вам когда-нибудь понадобится ответная помощь — я на связи».

116

Re: M61541fp + PT2323 на Microlab H-600

ок