Темброблок состоит из двух микросхем PT2323 и PT2322, управление осуществляется при помощи Arduino Nano.
Плата Arduino Nano с аудиопроцессорами PT2323 и PT2322 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).
PT2323 представляет собой коммутатор аудио сигналов. Микросхема имеет 4-е стерео входа и один шести канальный вход формата 5.1. Стерео сигнал подаваемый на входы микросхемы преобразуется в аудио сигнал формата 5.1, а аудио сигнал формата 5.1 поступает на выход 5.1 без изменений.
PT2323 имеет следующие аудио выходы:
- FR — правый канал фронт
- FL — левый канал фронт
- SR — правый канал тыл
- SL — левый канал тыл
- CT — центральный канал
- SUB — канал сабвуфера
Параметры PT2323:
- Напряжение питания 9 В (4,5 В минимальное)
- КНИ при входном напряжении сигнала 0.2 Vrms не более 0,005 %
- Отношение сигнал / шум 100 дБ
- Максимальное входное напряжение 3,75 Vrms
PT2322 представляет собой регулятор 3-х полосной регулятор тембра и громкости, микросхема имеет 6 входов и 6 выходов (FR, FL, SR, SL, CT, SUB), по канальный аттенюатор, 3D — эффект.
- Напряжение питания от 5 до 12 В (9 рекомендуемое)
- Ток потребления 25…40 мА
- Входное сопротивление 50 кОм
- Разделение каналов 107 дБ
- Отношение сигнал / шум 98 дБ
- КНИ при входном напряжении сигнала 0.2 Vrms не более 0,005 %
- Регулировка тембра ± 14 дБ с шагом 2 дБ
- Регулировка громкости от -79 дБ до 0 дБ
- Аттенюатор (не зависимый для каждого канала) от -15 дБ до 0 дБ
Библиотеки
PT2323.zip https://github.com/liman324/PT2323.git
PT2322.zip https://github.com/liman324/PT2322.git
Пример скетча показанный ниже позволяет управлять параметрами PT2323 и PT2322 при помощи 4-х кнопок с выводом информации на LCD1602 (ЖК-дисплей на базе HD44780).
Управление параметрами темброблока достаточно простое, при помощи кнопки МЕНЮ можно выбрать регулируемый параметр и изменить его при помощи кнопок ПЛЮС и МИНУС, четвертая кнопка — выбор входа. Режим MUTE активируется одновременным нажатием кнопок ПЛЮС и МИНУС.
Все параметры заносятся в энергонезависимую память.
#include <Wire.h> #include <PT2323.h> #include <PT2322.h> #include <LiquidCrystal.h> #include <EEPROM.h> PT2323 pt0; PT2322 pt1; LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000}; byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000}; unsigned long time; int menu,w,vol,vol_d,z,in,bass,bass_d,mid,mid_d,treb,treb_d,attfl,attfl_d,attcn,attcn_d,attsub,attsub_d,ddd,tembro,x,attfr,attfr_d,atttl,atttl_d,atttr,atttr_d,mute; void setup() { Wire.begin();Serial.begin(9600); lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2); pinMode(A0,INPUT); // menu pinMode(A1,INPUT); // + pinMode(A2,INPUT); // - pinMode(A3,INPUT); // input vol = EEPROM.read(0);in = EEPROM.read(1);bass = EEPROM.read(2)-7;mid = EEPROM.read(3)-7;treb = EEPROM.read(4)-7; attfl = EEPROM.read(5)-14;attcn = EEPROM.read(7)-14;attsub = EEPROM.read(8)-14;ddd = EEPROM.read(9);tembro = EEPROM.read(10); attfr = EEPROM.read(11)-14;atttl = EEPROM.read(12)-14;atttr = EEPROM.read(13)-14; delay(500); audio1();audio2(); } void loop() { if(analogRead(A0)>900&&mute!=1){menu++;cl();time=millis();w=1;if(menu>11){menu=0;}}// меню /////////////////////////////// volume /////////////////////////////////////////////// if(menu==0){ if(analogRead(A1)>900){vol++;w=1;if(vol>79){vol=79;}audio2();cl();time=millis();}// 79 максимальная громкость if(analogRead(A2)>900){vol--;w=1;if(vol<0){vol=0;}audio2();cl();time=millis();}// 0 минимум громкости lcd.setCursor(0,0);lcd.print("Volume "); lcd.print(-79+vol);lcd.setCursor(13,0);lcd.print("dB");vol_d=vol/2-15; if(vol_d>=0){for(z=0;z<=vol_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}} if((vol_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);} lcd.setCursor(13,1);lcd.print(vol);lcd.print(" ");} ///////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр НЧ + управление кнопками -14...14 дБ /////////////////// if(menu==1){ if(analogRead(A1)>900){bass++;w=1;if(bass>7){bass=7;}audio2();cl();time=millis();} if(analogRead(A2)>900){bass--;w=1;if(bass<-7){bass=-7;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("Bass "); lcd.print(bass*2);lcd.setCursor(13,0);lcd.print("dB");bass_d=bass+7; if(bass_d>=0){for(z=0;z<=bass_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((bass_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр CЧ + управление кнопками -14...14 дБ /////////////////// if(menu==2){ if(analogRead(A1)>900){mid++;w=1;if(mid>7){mid=7;}audio2();cl();time=millis();} if(analogRead(A2)>900){mid--;w=1;if(mid<-7){mid=-7;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("Middle "); lcd.print(mid*2);lcd.setCursor(13,0);lcd.print("dB");mid_d=mid+7; if(mid_d>=0){for(z=0;z<=mid_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((mid_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// индикация тембр BЧ + управление кнопками -14...14 дБ /////////////////// if(menu==3){ if(analogRead(A1)>900){treb++;w=1;if(treb>7){treb=7;}audio2();cl();time=millis();} if(analogRead(A2)>900){treb--;w=1;if(treb<-7){treb=-7;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("Treble "); lcd.print(treb*2);lcd.setCursor(13,0);lcd.print("dB");treb_d=treb+7; if(treb_d>=0){for(z=0;z<=treb_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((treb_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////// rock pop classic ////////////////////// if(menu==4){ if(analogRead(A1)>900){tembro++;w=1;if(tembro>4){tembro=0;}cl();time=millis();} if(analogRead(A2)>900){tembro--;w=1;if(tembro<0){tembro=4;}cl();time=millis();} lcd.setCursor(0,0);lcd.print(" Preset timbre "); if(tembro==0){lcd.setCursor(0,1);lcd.print(" manual mode ");} if(tembro==1){lcd.setCursor(0,1);lcd.print(" ROCK ");bass=4,mid=-2;treb=5;x=1;} if(tembro==2){lcd.setCursor(0,1);lcd.print(" POP ");bass=-3,mid=3;treb=-2;x=1;} if(tembro==3){lcd.setCursor(0,1);lcd.print(" CLASSIC ");bass=0,mid=0;treb=-2;x=1;} if(tembro==4){lcd.setCursor(0,1);lcd.print(" default ");bass=0,mid=0;treb=0;x=1;} if(x==1){audio2();x=0;} } //////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT FL /////////////////// if(menu==5){ if(analogRead(A1)>900){attfl++;w=1;if(attfl>0){attfl=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attfl--;w=1;if(attfl<-14){attfl=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT FL "); lcd.print(attfl);lcd.setCursor(13,0);lcd.print("dB");attfl_d=attfl+14; if(attfl_d>=0){for(z=0;z<=attfl_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attfl_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT FR /////////////////// if(menu==6){ if(analogRead(A1)>900){attfr++;w=1;if(attfr>0){attfr=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attfr--;w=1;if(attfr<-14){attfr=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT FR "); lcd.print(attfr);lcd.setCursor(13,0);lcd.print("dB");attfr_d=attfr+14; if(attfr_d>=0){for(z=0;z<=attfr_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attfr_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT TL /////////////////// if(menu==7){ if(analogRead(A1)>900){atttl++;w=1;if(atttl>0){atttl=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){atttl--;w=1;if(atttl<-14){atttl=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT TL "); lcd.print(atttl);lcd.setCursor(13,0);lcd.print("dB");atttl_d=atttl+14; if(atttl_d>=0){for(z=0;z<=atttl_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((atttl_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT TR /////////////////// if(menu==8){ if(analogRead(A1)>900){atttr++;w=1;if(atttr>0){atttr=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){atttr--;w=1;if(atttr<-14){atttr=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT TR "); lcd.print(atttr);lcd.setCursor(13,0);lcd.print("dB");atttr_d=atttr+14; if(atttr_d>=0){for(z=0;z<=atttr_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((atttr_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT CN /////////////////// if(menu==9){ if(analogRead(A1)>900){attcn++;w=1;if(attcn>0){attcn=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attcn--;w=1;if(attcn<-14){attcn=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT CN "); lcd.print(attcn);lcd.setCursor(13,0);lcd.print("dB");attcn_d=attcn+14; if(attcn_d>=0){for(z=0;z<=attcn_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attcn_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// /////////////////////// ATT SUB /////////////////// if(menu==10){ if(analogRead(A1)>900){attsub++;w=1;if(attsub>0){attsub=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){attsub--;w=1;if(attsub<-14){attsub=-14;}audio2();cl();time=millis();} lcd.setCursor(0,0);lcd.print("ATT SUB "); lcd.print(attsub);lcd.setCursor(13,0);lcd.print("dB");attsub_d=attsub+14; if(attsub_d>=0){for(z=0;z<=attsub_d;z++){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)0);}} if((attsub_d)%2==0){lcd.setCursor(z/2+4,1);lcd.write((uint8_t)1);}} //////////////////////////////////////////////////////////////////////////////////// //////////////////////////// 3d /////////////////////////////////////////////// if(menu==11){ if(analogRead(A1)>900){ddd++;w=1;if(ddd>1){ddd=0;}audio2();cl();time=millis();} if(analogRead(A2)>900){ddd--;w=1;if(ddd<0){ddd=1;}audio2();cl();time=millis();} lcd.setCursor(0,0); if(ddd==0){lcd.print(" 3D ON ");}else{lcd.print(" 3D OFF ");} } //////////////////////////////////////////////////////////////////////////////// if(analogRead(A3)>900){in++;if(in>4){in=0;}audio1();cl();lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);delay(2000);time=millis();w=1;}// in // if(analogRead(A3)>900){in++;if(in>5){in=0;}audio1();cl();lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);delay(2000);time=millis();w=1;}// если in = 5 то включен шести канальный вход //////////// mute //////////////////////// if(mute==1&&(analogRead(A1)>900||analogRead(A2)>900)){mute=0;menu=0;audio1();cl();} if(analogRead(A1)>900&&analogRead(A2)>900){mute=1;menu=100;audio1();cl();} if(mute==1){lcd.setCursor(0,0);lcd.print(" MUTE ");delay(300);} ///////////////////////////////eeprom//////////////////////////////////////////////// if(millis()-time>10000&& w==1&&mute==0){ EEPROM.update(0,vol);EEPROM.update(1,in);EEPROM.update(2,bass+7);EEPROM.update(3,mid+7);EEPROM.update(4,treb+7); EEPROM.update(5,attfl+14);EEPROM.update(7,attcn+14);EEPROM.update(8,attsub+14);EEPROM.update(9,ddd);EEPROM.update(10,tembro); EEPROM.update(11,attfr+14);EEPROM.update(12,atttl+14);EEPROM.update(13,atttr+14); menu=0;w=0;cl();} ///////////////////////////////////////////////////////////////////////////////////// }// loop void cl(){delay(300);lcd.clear();} void audio1(){ pt0.setInput(in); pt0.setMute(0,0,0,0,0,0,mute); pt0.setFeature(1,1); } void audio2(){ pt1.setFront_lk_att(abs(attfl));// att front L pt1.setFront_rk_att(abs(attfr));// att front R pt1.setCenter_att(abs(attcn)); // att center pt1.setRear_lk_att(abs(atttl)); // att rear L pt1.setRear_rk_att(abs(atttr)); // att rear R pt1.setSub_att(abs(attsub)); // att sub pt1.setFunc(0,ddd,0); // mute,3d,тембр on/off pt1.setBass(bass); // BASS -14...0...14 dB (int -7...0...7) pt1.setMiddle(mid); // MIDDLE -14...0...14 dB (int -7...0...7) pt1.setTreble(treb); // TREBLE -14...0...14 dB (int -7...0...7) pt1.setVol(vol); // 0...79 }
- http://rcl-radio.ru/wp-content/uploads/2024/03/sketch_mar20a.ino — ИК пульт (пример скетча)
- Скетч протестирован. Энкодер, кнопки IN и MUTE, ИК — пульт дублирующий полностью энкодер и кнопку IN (видео работы скетча показано ниже)
#define CH_UP 0x2FDF20D #define CH_DW 0x2FDF30D #define CH 0x2FDF50D #define IN 0x2FDF70D #define VOL_UP 0x2FDF40D #define VOL_DW 0x2FDF80D #include <Wire.h> #include <PT2322.h> #include <PT2323.h> #include <LiquidCrystal.h> #include <EEPROM.h> #include <Encoder.h> #include <MsTimer2.h> #include <boarddefs.h> #include <IRremote.h> PT2322 pt; PT2323 pt0; Encoder myEnc(9, 8);//CLK, DT подключение энкодера IRrecv irrecv(13); // указываем вывод модуля IR приемника decode_results ir; LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD 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}; unsigned long newPosition,time,oldPosition = -999; int menu,menu2,w,vol,vol_d,z,z0,z1,in,bass,bass_d,mid,mid_d,treb,treb_d,attfl,attfl_d,attcn,attcn_d,attsub,attsub_d,ddd,tembro,x,attfr,attfr_d,atttl,atttl_d,atttr,atttr_d,mute; int g1,g2,inn; void setup() { Wire.begin();Serial.begin(9600);irrecv.enableIRIn(); // запускаем модуль IR lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3); pinMode(A0,INPUT); // menu кнопка энкодера pinMode(12,INPUT); // MUTE pinMode(11,INPUT); // IN MsTimer2::set(2, to_Timer);MsTimer2::start(); vol = EEPROM.read(0)-79;in = EEPROM.read(1);bass = EEPROM.read(2)-7;mid = EEPROM.read(3)-7;treb = EEPROM.read(4)-7; attfl = EEPROM.read(5)-14;attcn = EEPROM.read(7)-14;attsub = EEPROM.read(8)-14;ddd = EEPROM.read(9);tembro = EEPROM.read(10); attfr = EEPROM.read(11)-14;atttl = EEPROM.read(12)-14;atttr = EEPROM.read(13)-14; delay(500); audio();audio_in(); } void to_Timer(){newPosition = myEnc.read()/4;} void loop(){delay(10); if(analogRead(A0)<900){menu++;cl1();myEnc.write(0);time=millis();w=1;if(menu>11){menu=0;}}// меню if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);time=millis();w=1;irrecv.resume();}// IR приемник if(ir.value==CH_UP){menu++;g1=0;g2=0;cl1();time=millis();w=1;if(menu>11){menu=0;}}// меню кнопка CH+ if(ir.value==CH_DW){menu--;g1=0;g2=0;cl1();time=millis();w=1;if(menu<0){menu=11;}}// меню кнопка CH- if(ir.value==CH){menu=0;g1=0;g2=0;cl1();time=millis();w=1;}// меню кнопка CH (menu===0) if(ir.value==IN){inn=1;g1=0;g2=0;time=millis();w=1;audio();}// кнопка IN //////////////////////////////////////// Громкость -79...0 дБ ////////////////////////////////////// if(menu==0){ if(ir.value==VOL_UP){vol++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ 0xFFA857 if(ir.value==0xFFFFFFFF and g1==1){vol++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){vol--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){vol--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(vol>79){vol=79;}if(vol<0){vol=0;} if (newPosition != oldPosition) { oldPosition = newPosition; vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(vol>79){vol=79;}if(vol<0){vol=0;}audio();} lcd.setCursor(0,0);lcd.print("Volume "); lcd.print(" ");lcd.print(-79+vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol-32; for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}} //////////////////////////////////////// Тембр НЧ +-14 дБ ////////////////////////////////////// if(menu==1){ if(ir.value==VOL_UP){bass++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){bass++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){bass--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){bass--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(bass<-7){bass=-7;}if(bass>7){bass=7;} if (newPosition != oldPosition) { oldPosition = newPosition; bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(bass<-7){bass=-7;}if(bass>7){bass=7;}audio();} lcd.setCursor(0,0);lcd.print("Bass "); lcd.print(" ");lcd.print(bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=(bass+7)*2; for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////////////////// Тембр CЧ +-14 дБ ////////////////////////////////////// if(menu==2){ if(ir.value==VOL_UP){mid++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){mid++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){mid--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){mid--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(mid<-7){mid=-7;}if(mid>7){mid=7;} if (newPosition != oldPosition) { oldPosition = newPosition; mid=mid+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(mid<-7){mid=-7;}if(mid>7){mid=7;}audio();} lcd.setCursor(0,0);lcd.print("Middle "); lcd.print(" ");lcd.print(mid*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");mid_d=(mid+7)*2; for(z=0,z0=0,z1=0;z<=mid_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////////////////// Тембр BЧ +-14 дБ ////////////////////////////////////// if(menu==3){ if(ir.value==VOL_UP){treb++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){treb++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){treb--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){treb--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(treb<-7){treb=-7;}if(treb>7){treb=7;} if (newPosition != oldPosition) { oldPosition = newPosition; treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(treb<-7){treb=-7;}if(treb>7){treb=7;}audio();} lcd.setCursor(0,0);lcd.print("Treble "); lcd.print(" ");lcd.print(treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=(treb+7)*2; for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////////////// rock pop classic ////////////////////// if(menu==4){ if(ir.value==VOL_UP){tembro++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){tembro++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){tembro--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){tembro--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(tembro>4){tembro=0;}if(tembro<0){tembro=4;} if (newPosition != oldPosition) { oldPosition = newPosition; tembro=tembro+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(tembro>4){tembro=0;}if(tembro<0){tembro=4;}} lcd.setCursor(0,0);lcd.print(" Preset timbre "); if(tembro==0){lcd.setCursor(0,1);lcd.print(" manual mode ");} if(tembro==1){lcd.setCursor(0,1);lcd.print(" ROCK ");bass=4,mid=-2;treb=5;x=1;} if(tembro==2){lcd.setCursor(0,1);lcd.print(" POP ");bass=-3,mid=3;treb=-2;x=1;} if(tembro==3){lcd.setCursor(0,1);lcd.print(" CLASSIC ");bass=0,mid=0;treb=-2;x=1;} if(tembro==4){lcd.setCursor(0,1);lcd.print(" default ");bass=0,mid=0;treb=0;x=1;} if(x==1){audio();x=0;} } /////////////////////// ATT FL /////////////////// if(menu==5){ if(ir.value==VOL_UP){attfl++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attfl++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attfl--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attfl--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attfl<-14){attfl=-14;}if(attfl>0){attfl=0;} if (newPosition != oldPosition) { oldPosition = newPosition; attfl=attfl+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attfl<-14){attfl=-14;}if(attfl>0){attfl=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT FL "); lcd.print(" ");lcd.print(attfl);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attfl_d=(attfl+14)*2; for(z=0,z0=0,z1=0;z<=attfl_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT FR /////////////////// if(menu==6){ if(ir.value==VOL_UP){attfr++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attfr++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attfr--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attfr--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attfr<-14){attfr=-14;}if(attfr>0){attfr=0;} if (newPosition != oldPosition) { oldPosition = newPosition; attfr=attfr+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attfr<-14){attfr=-14;}if(attfr>0){attfr=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT FR "); lcd.print(" ");lcd.print(attfr);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attfr_d=(attfr+14)*2; for(z=0,z0=0,z1=0;z<=attfr_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT TL /////////////////// if(menu==7){ if(ir.value==VOL_UP){atttl++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){atttl++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){atttl--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){atttl--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(atttl<-14){atttl=-14;}if(atttl>0){atttl=0;} if (newPosition != oldPosition) { oldPosition = newPosition; atttl=atttl+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(atttl<-14){atttl=-14;}if(atttl>0){atttl=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT TL "); lcd.print(" ");lcd.print(atttl);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");atttl_d=(atttl+14)*2; for(z=0,z0=0,z1=0;z<=atttl_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT TR /////////////////// if(menu==8){ if(ir.value==VOL_UP){atttr++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){atttr++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){atttr--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){atttr--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(atttr<-14){atttr=-14;}if(atttr>0){atttr=0;} if (newPosition != oldPosition) { oldPosition = newPosition; atttr=atttr+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(atttr<-14){atttr=-14;}if(atttr>0){atttr=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT TR "); lcd.print(" ");lcd.print(atttr);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");atttr_d=(atttr+14)*2; for(z=0,z0=0,z1=0;z<=atttr_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT CN /////////////////// if(menu==9){ if(ir.value==VOL_UP){attcn++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attcn++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attcn--;g1=0;g2=1;cl();time=millis();w=1;audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attcn--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attcn<-14){attcn=-14;}if(attcn>0){attcn=0;} if (newPosition != oldPosition) { oldPosition = newPosition; attcn=attcn+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attcn<-14){attcn=-14;}if(attcn>0){attcn=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT CN "); lcd.print(" ");lcd.print(attcn);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attcn_d=(attcn+14)*2; for(z=0,z0=0,z1=0;z<=attcn_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} /////////////////////// ATT SUB /////////////////// if(menu==10){ if(ir.value==VOL_UP){attsub++;g1=1;g2=0;cl();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){attsub++;g2=0;cl();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){attsub--;g1=0;g2=1;cl();audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){attsub--;g1=0;cl();time=millis();w=1;audio();}// кнопка <<<<<< if(attsub<-14){attsub=-14;}if(attsub>0){attsub=0;time=millis();} if (newPosition != oldPosition) { oldPosition = newPosition; attsub=attsub+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(attsub<-14){attsub=-14;}if(attsub>0){attsub=0;}audio();} lcd.setCursor(0,0);lcd.print("ATT SUB "); lcd.print(" ");lcd.print(attsub);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");attsub_d=(attsub+14)*2; for(z=0,z0=0,z1=0;z<=attsub_d;z++,z1++){if(z1>2){z1=0;z0++;} if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}} if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);} if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}} //////////////////////////// 3d /////////////////////////////////////////////// if(menu==11){ if(ir.value==VOL_UP){ddd++;g1=1;g2=0;cl1();time=millis();w=1;audio();}// кнопка VOL+ if(ir.value==0xFFFFFFFF and g1==1){ddd++;g2=0;cl1();time=millis();w=1;audio();}// кнопка >>>>>> if(ir.value==VOL_DW){ddd--;g1=0;g2=1;cl1();audio();}// кнопка VOL- if(ir.value==0xFFFFFFFF and g2==1){ddd--;g1=0;cl1();time=millis();w=1;audio();}// кнопка <<<<<< if(ddd<0){ddd=1;}if(ddd>1){ddd=0;} if (newPosition != oldPosition) { oldPosition = newPosition; ddd=ddd+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(ddd<0){ddd=1;}if(ddd>1){ddd=0;}audio();} lcd.setCursor(0,0); if(ddd==0){lcd.print(" 3D ON ");}else{lcd.print(" 3D OFF ");} } //////////// mute //////////////////////// if(mute==1&&(digitalRead(12)==HIGH)){mute=0;menu=0;audio();cl1();} if(digitalRead(12)==HIGH){mute=1;menu=100;audio();cl1();} if(mute==1){lcd.setCursor(0,0);lcd.print(" MUTE ");delay(300);} //////////////////////////////////////////////////////////////////////////////// if(digitalRead(11)==HIGH||inn==1){in++;if(in>4){in=0;}audio_in();cl1();lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);delay(2000);time=millis();w=1;inn=0;}// in if(millis()-time>10000&& w==1&&mute==0){ EEPROM.update(0,vol+79);EEPROM.update(1,in);EEPROM.update(2,bass+7);EEPROM.update(3,mid+7);EEPROM.update(4,treb+7); EEPROM.update(5,attfl+14);EEPROM.update(7,attcn+14);EEPROM.update(8,attsub+14);EEPROM.update(9,ddd);EEPROM.update(10,tembro); EEPROM.update(11,attfr+14);EEPROM.update(12,atttl+14);EEPROM.update(13,atttr+14); menu=0;w=0;cl();} }//loop void cl(){ir.value=0;delay(100);} void cl1(){ir.value=0;delay(300);lcd.clear();} void audio_in(){ pt0.setInput(in); pt0.setMute(0,0,0,0,0,0,0); pt0.setFeature(1,1); } void audio(){ pt.setFront_lk_att(abs(attfl));// att front L pt.setFront_rk_att(abs(attfr));// att front R pt.setCenter_att(abs(attcn)); // att center pt.setRear_lk_att(abs(atttl)); // att rear L pt.setRear_rk_att(abs(atttr)); // att rear R pt.setSub_att(abs(attsub)); // att sub pt.setFunc(mute,ddd,0); // mute,3d,тембр on/off pt.setBass(bass); // BASS -14...0...14 dB (int -7...0...7) pt.setMiddle(mid); // MIDDLE -14...0...14 dB (int -7...0...7) pt.setTreble(treb); // TREBLE -14...0...14 dB (int -7...0...7) pt.setVol(abs(vol)); // -79...0 }
В мониторе порта можно получить коды кнопок Вашего пульта.
Для нормальной работы скетча необходимо скачать дополнительные библиотеки:
IRremote.zip — библиотека изменена
Нет, подтяжка к 5в не помогла. Горит пустой экран до тех пор пока не отключить линии
У меня больше нет вариантов, исправные микросхемы должны определятся в i2c сканере, у Вас одна из микросхем не определяется, проверьте монтаж, возможно где-то найдете ошибку.
privet brat dlya i2c ekran kakoy kodi nado izminit
Так у меня одна только и стоит 2322, 2323 селектор входов не установлена.
Все равно спасибо что откликнулись
Hello, I have finished this project but the output is not coming . it only outputs strange High frequency noise.The master volume is working . but its just increasing and decreasing the unwanted noise.
Проверьте I2C сканером адреса микросхем:
http://forum.rcl-radio.ru/viewtopic.php?id=64
Hi Mr.liman28,
Thanks for the great project I have made it, it is working fine execpt for very mild flikering.
I would like to add usb module with this and oprate with the existing remote what I am using now. Can you please suggest how to do it, I dont have any knowledge in programm writing a big zero.
Thanks in advance
Hi,
someting like this