// ИК датчик
#define IR 12
// кнопки управления
#define IN_BUTTON 2
#define POWER_BUTTON 3
#define MUTE_BUTTON 4
#define UP_BUTTON 5
#define DW_BUTTON 6
#define LEFT_BUTTON 7
#define RIGHT_BUTTON 8
// выход управления standby
#define STANDBY_OUT 13
// выход управления input
#define IN_OUT 11
// коды кнопок ИК пульта
#define MENU_UP 0xFF906F // button encoder
#define MENU_DW 0xFFA857 // button encoder
#define UP 0xFFC23D // >>>
#define DW 0xFF02FD // <<<
#define INPUT_IR 0xFF629D // IN
#define POWER_IR 0xFFA25D // POWER
#define MUTE_IR 0xFFE21D // MUTE
#include <Wire.h>
#include <U8glib.h> // https://github.com/olikraus/u8glib/
#include <EEPROM.h>
#include <boarddefs.h> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/ … remote.zip
#include <TDA8425.h> // http://rcl-radio.ru/wp-content/uploads/ … DA8425.zip
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);
IRrecv irrecv(IR);
decode_results ir;
TDA8425 tda;
extern uint8_t SmallFont[],BigNumbers[];
long times,times0,oldPosition = -999,newPosition;
int vol,balans,bass,treb,in,menu=0;
bool mute=0,gr1,gr2,w=1,w1,power=0;
bool in_flag,w2;
void setup(){
Wire.begin();
irrecv.enableIRIn();
Serial.begin(9600);
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
pinMode(IN_BUTTON,INPUT_PULLUP);
pinMode(POWER_BUTTON,INPUT_PULLUP);
pinMode(MUTE_BUTTON,INPUT_PULLUP);
pinMode(STANDBY_OUT,OUTPUT);
pinMode(IN_OUT,OUTPUT);
pinMode(UP_BUTTON,INPUT_PULLUP);
pinMode(DW_BUTTON,INPUT_PULLUP);
pinMode(LEFT_BUTTON,INPUT_PULLUP);
pinMode(RIGHT_BUTTON,INPUT_PULLUP);
u8g.firstPage(); do {
u8g.setFont(u8g_font_profont29r);u8g.drawStr(5,45,"TDA8425");
}while( u8g.nextPage() );
delay(300);
digitalWrite(STANDBY_OUT,HIGH);
vol = EEPROM.read(0);bass = EEPROM.read(1);treb = EEPROM.read(2);balans = EEPROM.read(3)-4;in = EEPROM.read(4);
if(in==0){digitalWrite(IN_OUT,HIGH);}
if(in==1){digitalWrite(IN_OUT,LOW);}
audio();
}
void loop(){
// IR ////////////////////////////////////////
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
if(power==0){
if(digitalRead(UP_BUTTON)==LOW || ir.value==MENU_UP){menu++;cl();delay(200);times=millis();w1=1;w=1;if(menu>3){menu=0;}} // меню
if(digitalRead(DW_BUTTON)==LOW || ir.value==MENU_DW){menu--;cl();delay(200);times=millis();w1=1;w=1;if(menu<0){menu=3;}} // меню
if((digitalRead(IN_BUTTON)==LOW || ir.value==INPUT_IR) && mute==0){in++;cl();if(in>1){in=0;}audio();times0=millis();in_flag=1;
u8g.firstPage(); do {u8g.setFont(u8g_font_profont29r);
if(in==0){u8g.drawStr(0,45," AUX ON ");digitalWrite(IN_OUT,HIGH);}
if(in==1){u8g.drawStr(0,45," BT ON ");digitalWrite(IN_OUT,LOW);}
}while( u8g.nextPage() );delay(200);} // input
if(millis()-times0<3000 && in_flag==1){menu=100;}
if(millis()-times0>=3000 && in_flag==1){menu=0;w=1;in_flag=0;}
if((digitalRead(MUTE_BUTTON)==LOW || ir.value==MUTE_IR)&& mute==0){mute=1;cl();times=millis();w1=1;w=1;audio();
u8g.firstPage(); do {u8g.setFont(u8g_font_profont29r);u8g.drawStr(32,42,"MUTE");}while( u8g.nextPage() );delay(300);menu=100;} // mute on
if((digitalRead(MUTE_BUTTON)==LOW || ir.value==MUTE_IR)&& mute==1){mute=0;cl();times=millis();w1=1;w=1;audio();
delay(300);menu=0;} // mute off
}
if((digitalRead(POWER_BUTTON)==LOW || ir.value==POWER_IR)&& power==0){power=1;cl();times=millis();w1=1;w=1;mute=1;audio();digitalWrite(STANDBY_OUT,HIGH);
u8g.firstPage(); do {u8g.setFont(u8g_font_profont29r);u8g.drawStr(10,45,"STANDBY");}while( u8g.nextPage() );delay(2000);menu=100;
u8g.firstPage(); do {}while( u8g.nextPage() );} // power on
if((digitalRead(POWER_BUTTON)==LOW || ir.value==POWER_IR)&& power==1){power=0;cl();times=millis();w1=1;w=1;mute=0;audio();digitalWrite(STANDBY_OUT,LOW);delay(300);menu=0;} // power off
//////// VOLUME //////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(menu==0){
if(ir.value==UP||digitalRead(RIGHT_BUTTON)==LOW){vol++;gr1=1;gr2=0;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==DW||digitalRead(LEFT_BUTTON)==LOW){vol--;gr1=0;gr2=1;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl();times=millis();w=1;w1=1;vol_func();audio();}// кнопка <<<<<<
if(w==1){w=0;
// Serial.println(63-vol+balans);
u8g.firstPage();
do {
u8g.setFont(u8g_font_profont12r);u8g.drawStr(45,55,"VOLUME");
u8g.setFont(u8g_font_profont29r); u8g.setPrintPos(95, 32);u8g.print(vol-4);
for(int v_pos=0; v_pos<(59-3)*1.5;v_pos+=4){u8g.drawBox(v_pos+0,16, 2, 1);}
for(int v_pos=0; v_pos<(vol-3)*1.5;v_pos+=4){u8g.drawBox(v_pos+0,18, 2, 9);}
for(int v_pos=0; v_pos<(59-3)*1.5;v_pos+=4){u8g.drawBox(v_pos+0,28, 2, 1);}
} while( u8g.nextPage() );
}}
///////// BASS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(menu==1){
// if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
// bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;bass_func();audio();}
if(ir.value==UP||digitalRead(RIGHT_BUTTON)==LOW){bass++;gr1=1;gr2=0;cl();times=millis();w=1;w1=1;bass_func();audio();}// кнопка >
if(ir.value==DW||digitalRead(LEFT_BUTTON)==LOW){bass--;gr1=0;gr2=1;cl();times=millis();w=1;w1=1;bass_func();audio();}// кнопка <
if(w==1){w=0;
u8g.firstPage();
do {
u8g.setFont(u8g_font_profont12r);u8g.drawStr(45,55,"BASS");
u8g.setFont(u8g_font_profont29r); u8g.setPrintPos(95, 32);u8g.print(bass-6);
for(int v_pos=0; v_pos<(11-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,16, 2, 1);}
for(int v_pos=0; v_pos<(bass-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,18, 2, 9);}
for(int v_pos=0; v_pos<(11-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,28, 2, 1);}
} while( u8g.nextPage() );
}}
///////// TREB /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(menu==2){
if(ir.value==UP||digitalRead(RIGHT_BUTTON)==LOW){treb++;gr1=1;gr2=0;cl();times=millis();w=1;w1=1;treb_func();audio();}// кнопка >
if(ir.value==DW||digitalRead(LEFT_BUTTON)==LOW){treb--;gr1=0;gr2=1;cl();times=millis();w=1;w1=1;treb_func();audio();}// кнопка <
if(w==1){w=0;
u8g.firstPage();
do {
u8g.setFont(u8g_font_profont12r);u8g.drawStr(45,55,"TREBLE");
u8g.setFont(u8g_font_profont29r); u8g.setPrintPos(95, 32);u8g.print(treb-6);
for(int v_pos=0; v_pos<(10-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,16, 2, 1);}
for(int v_pos=0; v_pos<(treb-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,18, 2, 9);}
for(int v_pos=0; v_pos<(10-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,28, 2, 1);}
} while( u8g.nextPage() );
}}
///////// BALL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(menu==3){
if(ir.value==UP||digitalRead(RIGHT_BUTTON)==LOW){balans++;gr1=1;gr2=0;cl();times=millis();w=1;w1=1;ball_func();audio();}// кнопка >
if(ir.value==DW||digitalRead(LEFT_BUTTON)==LOW){balans--;gr1=0;gr2=1;cl();times=millis();w=1;w1=1;ball_func();audio();}// кнопка <
if(w==1){w=0;
// Serial.println(63-vol+balans);
// Serial.println(63-vol-balans);
u8g.firstPage();
do {
u8g.setFont(u8g_font_profont12r);u8g.drawStr(45,55,"BALANCE");
u8g.setFont(u8g_font_profont29r);
if(balans>=0){u8g.setPrintPos(112, 32);u8g.print(balans);u8g.drawStr(95,32,"+");}
else{u8g.setPrintPos(95, 24);u8g.print(balans);}
for(int v_pos=0; v_pos<(12-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,16, 2, 1);}
const int SCREEN_WIDTH = 84;
u8g.drawBox(43,18, 1, 9);// 0 dB
if(balans >= 0){for(int v_pos=0; v_pos<(balans*8);v_pos+=4){u8g.drawBox(v_pos+48,18, 2, 9);}}
else{for(int v_pos=SCREEN_WIDTH-48; v_pos>(SCREEN_WIDTH-(abs(balans)*8)-48); v_pos-=4){u8g.drawBox(v_pos,18, 2, 9);}}
for(int v_pos=0; v_pos<(12-1)*8;v_pos+=4){u8g.drawBox(v_pos+0,28, 2, 1);}
} while( u8g.nextPage() );
}}
////////////// EEPROM /////////////////////////////////////////////////////////////////////
if(millis()-times>5000 && w1==1 && power==0 && mute==0){
EEPROM.update(0,vol);EEPROM.update(1,bass);EEPROM.update(2,treb);EEPROM.update(3,balans+4);EEPROM.update(4,in);
menu=0;w1=0;w=1;}
}
void audio(){
tda.setVolumeL(vol+balans);
tda.setVolumeR(vol-balans);
tda.setBass(bass);
tda.setTreble(treb);
tda.setMute(mute);
tda.setSource(in);
}
void vol_func(){if(vol>59){vol=59;}if(vol<=4){vol=4;}} // int 0 = min ... int 63 = max + ballans 4 dB
void bass_func(){if(bass>11){bass=11;}if(bass<2){bass=2;}} // int 6 = 0 dB | int 2 = -12 dB | int 11 = 15 dB
void treb_func(){if(treb>10){treb=10;}if(treb<2){treb=2;}} // int 6 = 0 dB | int 2 = -12 dB | int 10 = 12 dB
void ball_func(){if(balans>4){balans=4;}if(balans<=-4){balans=-4;}}
void cl(){ir.value=0;delay(200);}
Поправил скетч под кнопки, выровнял все надписи по середине для дисплея 1.3. Выход на усилитель D13 изменил на логическую 1, так же D11 включается при переходе на блютус. Вопрос такой ,не могу найти увеличение надписи в меню VOL BAS TRE BALANCE,очень мелкие плохо видно ,хотелось бы увеличить, как это сделать?