PT2318 — представляет собой аудиопроцессор специально разработанный для использования в Hi-Fi системах. Аудиопроцессор имеет 4 стерео входа и один монофонический вход, 4-х канальный выход (FRONT, REAR), регулятор громкости и тембра, систему тонкомпенсации (loudness), независимый для каждого выхода аттенюатор.
Основные параметры аудиопроцессора PT2318:
- Напряжение питания от 7.5 В до 9.5 В (9 В — рекомендуемое)
- Ток потребления от 26 мА до 32 мА
- Диапазон регулировки громкости от -31 дБ до +20 дБ (шаг 1 дБ)
- Разделение каналов 96 дБ
- Коэффициент гармонических искажений не более 0,05 % (20Hz to 12.5KHz, Vi=1V, Gv=0dB )
- Отношение сигнал\шум не менее 99 дБ (Vo=2.0V, Gv=0dB)
- Перекрестные помехи -110 дБ
- Входное сопротивление 30 кОм (Input impedance)
- Максимальное входное напряжение 2,7 В (THD<0.5%, Vcc=8.5V)
- Выходное сопротивление 130 Ом (Output impedance)
- Уровень MUTE -100 дБ
- Регулировка тембра:
- BASS ±15 дБ (шаг 1,5 дБ, неточность регулирования не более 1 дБ)
- TREBLE ±12 дБ (шаг 1,5 дБ, неточность регулирования не более 1 дБ)
- Регулировка аттенюаторов от 0 до 55 дБ (независимая для каждого выхода)
- Управление цифровое I2C
Схема подключения PT2318
На базе Arduino используя PT2318 можно собрать простой регулятор громкости и тембра. Основное управление параметрами аудиопроцессора будет осуществляться при помощи энкодера (KY-040) и 3-х кнопок, так же будет применен ИК пульт который будет дублировать энкодер и кнопки управления. Вся информация будет выводится на дисплей LCD1602 + I2C (I2C модуль на базе микросхем PCF8574 позволяют подключить символьный дисплей 1602 к плате Arduino всего по двум проводам SDA и SCL (А4 и А5), что дает возможность не использовать цифровые выходы Arduino при подключении дисплея.)
В цифровая части регулятора громкости используется плата Arduino Nano, дисплей LCD1602 c I2C модулем PCF8574, энкодер KY-040 (модуль), модуль IR, модуль часов реального времени DS3213.
Меню управления регулятором громкости состоит из нескольких пунктов:
- Регулятор громкости
- Регулятор BASS
- Регулятор TREBLE
- Регулировка аттенюатора выход FR
- Регулировка аттенюатора выход FL
- Регулировка аттенюатора выход RR
- Регулировка аттенюатора выход RL
- Вкл \ выкл тонкомпенсации Loudness
Управление всеми параметрами осуществляется через кнопки и энкодер, а так же через ИК пульт. ИК пульт позволяет пролистывать пункты меню, кнопками <> менять параметры, активировать функцию MUTE, переводить регулятор громкости в режим STANDBY, так же есть кнопки прямого доступа к основным параметрам, к таким как громкость, тембр НЧ, тембр ВЧ и коммутатор входа, что позволяет например изменить тембр НЧ кнопками BASS_MIN и BASS_MAX не заходя предварительно в пункт меню BASS.
Меню имеет два режима работы, сокращенное и расширенное (MENU_SMALL, MENU_BIG). В сокращенном меню будут доступны только пункты меню громкости, тембра НЧ и тембра ВЧ. В расширенном меню будут доступны все пункты меню. Для переключения режима работы меню необходимо нажать кнопку MUTE и после кнопку энкодера.
В режиме STANDBY (POWER OFF) на дисплей выводятся часы.
Коррекция времени часов: в режиме STANDBY нажать и удерживать кнопку энкодера, далее нажать кнопки INPUT, MUTE, POWER для изменения времени часов, минут и обнуления секунд.
Так же предусмотрено изменение яркости дисплея в режиме STANDBY: выход D6 Arduino подключить к пину управления подсветки:
Подсветка — убрать перемычку с модуля I2C PCF8574 и подключить вывод модуля к цифровому выходу Arduino D6. Перед подключением замерить ток подсветки который не должен превышать 20 мА (у моего модуля ток не более 15 мА, замер производить между контактами перемычки).
Максимальный выходной ток одного выхода Arduino Nano не должен превышать 40 мА.
Яркость подсветки можно настроить через скетч:
#define BRIG_L 50 #define BRIG_H 250
- BRIG_L — яркость в режиме STANDBY (0-250)
- BRIG_H — яркость в рабочем режиме (0-250)
Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:
#define VOLUME_MAX 0x33B85AA5 // громкость прибавить #define VOLUME_MIN 0x33B8D42B // громкость убавить #define BASS_MAX 0x33B87A85 // НЧ прибавить #define BASS_MIN 0x33B854AB // НЧ убавить #define TREB_MAX 0x33B8BA45 // ВЧ прибавить #define TREB_MIN 0x33B832CD // ВЧ убавить #define IN1 0x33B88877 // выбор вход 1 #define IN2 0x33B848B7 // выбор вход 2 #define IN3 0x33B8C837 // выбор вход 3 #define IN4 0x33B828D7 // выбор вход 4 #define IN5 0x33B8A857 // выбор вход 5 (моно) #define LEFT 0x33B8E01F // убавить в любом меню #define RIGHT 0x33B810EF // прибавить в любом меню #define MENU_DOWN 0x33B8609F // навигация по меню #define MENU_UP 0x33B8A05F // навигация по меню #define LOUD 0x33B850AF // Loudness #define MUTE 0x33B8946B // MUTE #define POWER 0x33B800FF // STANDBY
Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.
#define VOLUME_MAX 0x33B85AA5 // громкость прибавить #define VOLUME_MIN 0x33B8D42B // громкость убавить #define BASS_MAX 0x33B87A85 // НЧ прибавить #define BASS_MIN 0x33B854AB // НЧ убавить #define TREB_MAX 0x33B8BA45 // ВЧ прибавить #define TREB_MIN 0x33B832CD // ВЧ убавить #define IN1 0x33B88877 // выбор вход 1 #define IN2 0x33B848B7 // выбор вход 2 #define IN3 0x33B8C837 // выбор вход 3 #define IN4 0x33B828D7 // выбор вход 4 #define IN5 0x33B8A857 // выбор вход 5 (моно) #define LEFT 0x33B8E01F // убавить в любом меню #define RIGHT 0x33B810EF // прибавить в любом меню #define MENU_DOWN 0x33B8609F // навигация по меню #define MENU_UP 0x33B8A05F // навигация по меню #define LOUD 0x33B850AF // Loudness #define MUTE 0x33B8946B // MUTE #define POWER 0x33B800FF // STANDBY #define BRIG_L 50 #define BRIG_H 250 #include <Wire.h> // Входит в состав Arduino IDE #include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip #include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip #include <EEPROM.h> // Входит в состав Arduino IDE #include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1 #include <boarddefs.h> // Входит в состав библиотеки IRremote #include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip #include <DS3231.h> // https://github.com/jarzebski/Arduino-DS3231/archive/master.zip #include <PT2318.h> // http://rcl-radio.ru/wp-content/uploads/2021/10/PT2318.zip PT2318 pt; LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей Encoder myEnc(9, 8);//CLK, DT подключение энкодера decode_results ir; IRrecv irrecv(12); // указываем вывод модуля IR приемника DS3231 clock;RTCDateTime DateTime; byte v1[8] = {0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07}; byte v2[8] = {0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00}; byte v3[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F}; byte v4[8] = {0x1F,0x1F,0x00,0x00,0x00,0x00,0x1F,0x1F}; byte v5[8] = {0x1C,0x1C,0x00,0x00,0x00,0x00,0x1C,0x1C}; byte v6[8] = {0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C}; byte v7[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07}; byte v8[8] = {0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00}; unsigned long time,oldPosition = -999,newPosition; int a[6],menu,fun_d,vol,in,bass,treb,hour,secon,minut,x,fr,fl,rl,rr,loud; byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3,w,w1,mute,power,main_menu,gr1,gr2; void setup() { Wire.begin();Serial.begin(9600);irrecv.enableIRIn(); MsTimer2::set(3, to_Timer);MsTimer2::start(); lcd.init();lcd.backlight();clock.begin(); 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); // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча pinMode(6,OUTPUT); // PWM output analogWrite(6,BRIG_H); Encoder myEnc(9, 8);//CLK, DT подключение энкодера lcd.setCursor(5,0);lcd.print("PT2318"); lcd.setCursor(0,1);lcd.print("audio processor"); delay(2000);lcd.clear(); pinMode(10,INPUT); // КНОПКА ЭНКОДЕРA pinMode(2,INPUT_PULLUP); // INPUT pinMode(3,INPUT_PULLUP); // MUTE pinMode(4,INPUT_PULLUP); // POWER pinMode(13,OUTPUT); // OUTPUT STANDBY delay(500); if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении vol = EEPROM.read(0);bass = EEPROM.read(1)-12;treb = EEPROM.read(2)-8;in = EEPROM.read(3); main_menu = EEPROM.read(4);if(main_menu>1){main_menu=0;} fr = EEPROM.read(5);fl = EEPROM.read(6);rr = EEPROM.read(7);rl = EEPROM.read(8); loud = EEPROM.read(9);if(loud>1){loud=0;} audio(); } void loop() { ////////////////// ИК приемник - обработка кодов кнопок /////////////////////////////////////// if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;w1=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта if(ir.value==VOLUME_MAX && menu!=0){vol++;menu=0;gr1=1;gr2=0;cl();time=millis();w=1;w1=1;vol_fun();audio();}// vol_max if(ir.value==VOLUME_MIN && menu!=0){vol--;menu=0;gr1=0;gr2=1;cl();time=millis();w=1;w1=1;vol_fun();audio();}// vol_min if(ir.value==BASS_MAX && menu!=1){bass++;menu=1;gr1=1;gr2=0;cl();time=millis();w=1;w1=1;vol_fun();audio();}// bass_max if(ir.value==BASS_MIN && menu!=1){bass--;menu=1;gr1=0;gr2=1;cl();time=millis();w=1;w1=1;vol_fun();audio();}// bass_min if(ir.value==TREB_MAX && menu!=2){treb++;menu=2;gr1=1;gr2=0;cl();time=millis();w=1;w1=1;vol_fun();audio();}// treb_max if(ir.value==TREB_MIN && menu!=2){treb--;menu=2;gr1=0;gr2=1;cl();time=millis();w=1;w1=1;vol_fun();audio();}// treb_min if(main_menu==0){ if(ir.value==MENU_DOWN){menu++;cl();myEnc.write(0);time=millis();gr1=0;gr2=0;w=1;w1=1;if(menu>2){menu=0;}}// menu_down if(ir.value==MENU_UP){menu--;cl();myEnc.write(0);time=millis();gr1=0;gr2=0;w=1;w1=1;if(menu<0){menu=2;}}// menu_up } if(main_menu==1){ if(ir.value==MENU_DOWN){menu++;cl();myEnc.write(0);time=millis();gr1=0;gr2=0;w=1;w1=1;if(menu>7){menu=0;}}// menu_down if(ir.value==MENU_UP){menu--;cl();myEnc.write(0);time=millis();gr1=0;gr2=0;w=1;w1=1;if(menu<0){menu=7;}}// menu_up } if(ir.value==IN1){in=0;menu=0;cl1();time=millis();w=1;w1=1;gr1=0;gr2=0;audio();}// IN1 if(ir.value==IN2){in=1;menu=0;cl1();time=millis();w=1;w1=1;gr1=0;gr2=0;audio();}// IN2 if(ir.value==IN3){in=2;menu=0;cl1();time=millis();w=1;w1=1;gr1=0;gr2=0;audio();}// IN3 if(ir.value==IN4){in=3;menu=0;cl1();time=millis();w=1;w1=1;gr1=0;gr2=0;audio();}// IN4 if(ir.value==IN5){in=4;menu=0;cl1();time=millis();w=1;w1=1;gr1=0;gr2=0;audio();}// IN5 if(ir.value==LOUD && loud==0){loud=1;cl();time=millis();w=1;w1=1;gr1=0;gr2=0;audio();cl();menu=7;}// loud_on if(ir.value==LOUD && loud==1){loud=0;cl();time=millis();w=1;w1=1;gr1=0;gr2=0;audio();cl();menu=7;}// loud_off //////// BUTTON /////////////////////////////////////////////// if(power==0){ if(digitalRead(10)==LOW && mute==0 && main_menu==0){menu++;cl();myEnc.write(0);time=millis();w=1;w1=1;if(menu>2){menu=0;}}// SMALL MENU if(digitalRead(10)==LOW && mute==0 && main_menu==1){menu++;cl();myEnc.write(0);time=millis();w=1;w1=1;if(menu>7){menu=0;}}// BIG MENU if((digitalRead(2)==LOW) && mute==0){in++;cl();myEnc.write(0);time=millis();w=1;w1=1;if(in>4){in=0;}lcd.setCursor(4,0);lcd.print("INPUT ");lcd.print(in+1);delay(2000);audio();cl();}// IN if((digitalRead(3)==LOW||ir.value==MUTE)&&mute==0){mute=1;cl();menu=100;myEnc.write(0);audio();lcd.setCursor(6,0);lcd.print("MUTE");} if((digitalRead(3)==LOW||ir.value==MUTE)&&mute==1){mute=0;cl();menu=0;w=1;myEnc.write(0);time=millis();audio();cl();} if(mute==1 && digitalRead(10)==LOW && main_menu==0){main_menu=1;mute=0;menu=0;cl();myEnc.write(0);time=millis();w=1;w1=1;lcd.setCursor(2,0);lcd.print(" BIG MENU ");audio();delay(2000);cl();} if(mute==1 && digitalRead(10)==LOW && main_menu==1){main_menu=0;mute=0;menu=0;cl();myEnc.write(0);time=millis();w=1;w1=1;lcd.setCursor(2,0);lcd.print("SMALL MENU");audio();delay(2000);cl();} }else{menu=100;} // standby output if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} /// power /// if((digitalRead(4)==LOW||ir.value==POWER)&&power==0){power=1;w=1;menu=100;analogWrite(6,BRIG_L);cl();myEnc.write(0);mute=1; lcd.setCursor(3,0);lcd.print("POWER OFF");audio();delay(2000);cl();} if((digitalRead(4)==LOW||ir.value==POWER)&&power==1&&digitalRead(10)==HIGH){power=0;w=1;menu=0;analogWrite(6,BRIG_H);cl();myEnc.write(0);mute=0; lcd.setCursor(3,0);lcd.print("POWER ON");audio();delay(2000);cl();} //////// VOLUME //////////////////////////////////////////////////////////////// if(menu==0){ if(ir.value==VOLUME_MAX || ir.value==RIGHT){vol++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка > if((ir.value==0xFFFFFFFF) and gr1==1){vol++;gr2=0;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка >>>>>> if(ir.value==VOLUME_MIN || ir.value==LEFT){vol--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка < if((ir.value==0xFFFFFFFF) and gr2==1){vol--;gr1=0;cl1();time=millis();w=1;w1=1;vol_fun();audio();}// кнопка <<<<<< if (newPosition != oldPosition){oldPosition = newPosition; vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;vol_fun();audio();} lcd.setCursor(0,0);lcd.print(F("VOLUME "));lcd.setCursor(0,1); if(in==4){lcd.print("MONO");}else{lcd.print("INPUT ");lcd.print(in+1);} fun_d = vol-12;if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} //////// BASS //////////////////////////////////////////////////////////////// if(menu==1){ if(ir.value==BASS_MAX || ir.value==RIGHT){bass++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка > if((ir.value==0xFFFFFFFF) and gr1==1){bass++;gr2=0;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка >>>>>> if(ir.value==BASS_MIN || ir.value==LEFT){bass--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка < if((ir.value==0xFFFFFFFF) and gr2==1){bass--;gr1=0;cl1();time=millis();w=1;w1=1;bass_fun();audio();}// кнопка <<<<<< if (newPosition != oldPosition){oldPosition = newPosition; bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;bass_fun();audio();} lcd.setCursor(0,0);lcd.print(F("BASS "));fun_d = bass; if(fun_d<0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(" ");} if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} //////// TREBLE //////////////////////////////////////////////////////////////// if(menu==2){ if(ir.value==TREB_MAX || ir.value==RIGHT){treb++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка > if((ir.value==0xFFFFFFFF) and gr1==1){treb++;gr2=0;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка >>>>>> if(ir.value==TREB_MIN || ir.value==LEFT){treb--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка < if((ir.value==0xFFFFFFFF) and gr2==1){treb--;gr1=0;cl1();time=millis();w=1;w1=1;treb_fun();audio();}// кнопка <<<<<< if (newPosition != oldPosition){oldPosition = newPosition; treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;treb_fun();audio();} lcd.setCursor(0,0);lcd.print(F("TREBLE "));fun_d = treb; if(fun_d<0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(" ");} if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} //////// ATT_FR //////////////////////////////////////////////////////////////// if(menu==3){ if(ir.value==RIGHT){fr++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;fr_fun();audio();}// кнопка > if((ir.value==0xFFFFFFFF) and gr1==1){fr++;gr2=0;cl1();time=millis();w=1;w1=1;fr_fun();audio();}// кнопка >>>>>> if(ir.value==LEFT){fr--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;fr_fun();audio();}// кнопка < if((ir.value==0xFFFFFFFF) and gr2==1){fr--;gr1=0;cl1();time=millis();w=1;w1=1;fr_fun();audio();}// кнопка <<<<<< if (newPosition != oldPosition){oldPosition = newPosition; fr=fr+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;fr_fun();audio();} lcd.setCursor(0,0);lcd.print(F("ATT_FR "));fun_d = fr; if(fun_d<0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(" ");} if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} //////// ATT_FL //////////////////////////////////////////////////////////////// if(menu==4){ if(ir.value==RIGHT){fl++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;fl_fun();audio();}// кнопка > if((ir.value==0xFFFFFFFF) and gr1==1){fl++;gr2=0;cl1();time=millis();w=1;w1=1;fl_fun();audio();}// кнопка >>>>>> if(ir.value==LEFT){fl--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;fl_fun();audio();}// кнопка < if((ir.value==0xFFFFFFFF) and gr2==1){fl--;gr1=0;cl1();time=millis();w=1;w1=1;fl_fun();audio();}// кнопка <<<<<< if (newPosition != oldPosition){oldPosition = newPosition; fl=fl+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;fl_fun();audio();} lcd.setCursor(0,0);lcd.print(F("ATT_FL "));fun_d = fl; if(fun_d<0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(" ");} if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} //////// ATT_RR //////////////////////////////////////////////////////////////// if(menu==5){ if(ir.value==RIGHT){rr++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;rr_fun();audio();}// кнопка > if((ir.value==0xFFFFFFFF) and gr1==1){rr++;gr2=0;cl1();time=millis();w=1;w1=1;rr_fun();audio();}// кнопка >>>>>> if(ir.value==LEFT){rr--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;rr_fun();audio();}// кнопка < if((ir.value==0xFFFFFFFF) and gr2==1){rr--;gr1=0;cl1();time=millis();w=1;w1=1;rr_fun();audio();}// кнопка <<<<<< if (newPosition != oldPosition){oldPosition = newPosition; rr=rr+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;rr_fun();audio();} lcd.setCursor(0,0);lcd.print(F("ATT_RR "));fun_d = rr; if(fun_d<0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(" ");} if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} //////// ATT_RL //////////////////////////////////////////////////////////////// if(menu==6){ if(ir.value==RIGHT){rl++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;rl_fun();audio();}// кнопка > if((ir.value==0xFFFFFFFF) and gr1==1){rl++;gr2=0;cl1();time=millis();w=1;w1=1;rl_fun();audio();}// кнопка >>>>>> if(ir.value==LEFT){rl--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;rl_fun();audio();}// кнопка < if((ir.value==0xFFFFFFFF) and gr2==1){rl--;gr1=0;cl1();time=millis();w=1;w1=1;rl_fun();audio();}// кнопка <<<<<< if (newPosition != oldPosition){oldPosition = newPosition; rl=rl+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;rl_fun();audio();} lcd.setCursor(0,0);lcd.print(F("ATT_RL "));fun_d = rl; if(fun_d<0){lcd.setCursor(7,0);fun_d=abs(fun_d);lcd.write((uint8_t)3);}else{lcd.setCursor(7,0);lcd.print(" ");} if(w==1){w=0;a[0]=(fun_d)/10;a[1]=(fun_d)%10;cif();}} //////// Loudness //////////////////////////////////////////////////////////////// if(menu==7){ if(ir.value==RIGHT){loud++;gr1=1;gr2=0;cl1();time=millis();w=1;w1=1;loud_fun();audio();}// кнопка > if(ir.value==LEFT){loud--;gr1=0;gr2=1;cl1();time=millis();w=1;w1=1;loud_fun();audio();}// кнопка < if (newPosition != oldPosition){oldPosition = newPosition; loud=loud+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w1=1;loud_fun();audio();} if(loud==0){lcd.setCursor(2,0);lcd.print(F("LOUDNESS ON "));} if(loud==1){lcd.setCursor(2,0);lcd.print(F("LOUDNESS OFF"));} } /////////////////// ЧАСЫ /////////////////////////////////////////////////////////////////// DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second; 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(x=0;x<4;x++){ switch(x){ 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; }digit();} lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(6,1);lcd.print("."); lcd.setCursor(14,1);lcd.print(a[4]);lcd.setCursor(15,1);lcd.print(a[5]); //// set time //// if(digitalRead(10)==LOW&&digitalRead(2)==LOW){hour++;if(hour>23){hour=0;} clock.setDateTime(2021, 8, 28, hour, minut, secon);delay(100);}// input button HH++ if(digitalRead(10)==LOW&&digitalRead(3)==LOW){minut++;if(minut>59){minut=0;} clock.setDateTime(2021, 8, 28, hour, minut, secon);delay(100); }// mute MM++ if(digitalRead(10)==LOW&&digitalRead(4)==LOW){secon=0; clock.setDateTime(2021, 8, 28, hour, minut, secon);delay(100); }// power SS=0 } /////// EEPROM ////////////////////////////////////////////////// if(millis()-time>10000 && w1==1&&mute==0&&power==0){ EEPROM.update(0,vol);EEPROM.update(1,bass+12);EEPROM.update(2,treb+8);EEPROM.update(3,in);EEPROM.update(4,main_menu); EEPROM.update(5,fr);EEPROM.update(6,fl);EEPROM.update(7,rr);EEPROM.update(8,rl);EEPROM.update(9,loud); if(menu!=0){lcd.clear();}menu=0;w=1;w1=0;} }// end loop void cl(){ir.value=0;delay(300);lcd.clear();} void cl1(){ir.value=0;delay(300);} void vol_fun(){if(vol>63){vol=63;}if(vol<12){vol=12;}} void bass_fun(){if(bass<-12){bass=-12;}if(bass>12){bass=12;}} void treb_fun(){if(treb<-8){treb=-8;}if(treb>8){treb=8;}} void fr_fun(){if(fr<0){fr=0;}if(fr>63){fr=63;}} void fl_fun(){if(fl<0){fl=0;}if(fl>63){fl=63;}} void rr_fun(){if(rr<0){rr=0;}if(rr>63){rr=63;}} void rl_fun(){if(rl<0){rl=0;}if(rl>63){rl=63;}} void loud_fun(){if(loud<0){loud=1;}if(loud>1){loud=0;}} void to_Timer(){newPosition = myEnc.read()/4;} void cif(){ for(i=0;i<2;i++){ switch(i){ case 0: e1=9,e2=10,e3=11;break; case 1: e1=12,e2=13,e3=14;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); }} void digit(){switch(a[x]){ case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break; case 2: d1=2,d2=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);} void audio(){ pt.setVolume(vol, loud, 0); // int 12...63 === -31...+20 dB // Loudness 0 = on, 1 = off // не менять pt.setFader_FR(fr); // int 0...63 pt.setFader_FL(fl); // int 0...63 pt.setFader_RR(rr); // int 0...63 pt.setFader_RL(rl); // int 0...63 pt.setBass(bass); // int -12...0...+12 pt.setTreble(treb);// int -8...0...+8 pt.setIn(in, mute); // IN = int 0...3, MONO = int 4 // MUTE 0 = off, 1 = on }
Datasheet - pt2318.pdf
Hello. can you give suggestions on sketches using oled screens? Like oled 128×64 ic drive ssd1306 for example?. Thanks a lot
PT2318 please share library file.