Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer
Не должно ни как повлиять
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Библиотеки → BD37534FV - Sound Processor with Built-in 3-band Equalizer
Не должно ни как повлиять
Спасибо
Здравствуйте. Можно ли обойти превышение размеров прошивки (104% от памяти контроллера) при использовании 328P-LQFP32(MiniEVB) если использовать стандартную прошивку из среды через сн340(загрузчик)?
Надо по возможности все повторяющиеся фрагменты кода перенести в функцию для уменьшения размера скетча
Спасибо
Здравствуйте собрал Ваш проект скетч из поста 260 не отключается звук в режиме MUTE на экране режим отображается
Замените
if(power==0){
if((digitalRead(MUTE_BUTTON)==LOW || ir.value==IR_MUTE)&& mute==0){mute=1;gr1=0;gr2=0;cl();
myOLED.setFont(SmallFont);myOLED.print(F("MUTE"), CENTER, 10);myOLED.update();cl();menu=100;}
if((digitalRead(MUTE_BUTTON)==LOW || ir.value==IR_MUTE)&& mute==1){mute=0;gr1=0;gr2=0;times=millis();w=1;w2=1;cl();menu=0;}
}
на
if(power==0){
if((digitalRead(MUTE_BUTTON)==LOW || ir.value==IR_MUTE)&& mute==0){mute=1;gr1=0;gr2=0;cl();
myOLED.setFont(SmallFont);myOLED.print(F("MUTE"), CENTER, 10);myOLED.update();cl();menu=100;audio();}
if((digitalRead(MUTE_BUTTON)==LOW || ir.value==IR_MUTE)&& mute==1){mute=0;gr1=0;gr2=0;times=millis();w=1;w2=1;cl();menu=0;audio();}
}
Спасибо за быстрый ответ еще хотелось добавить 2 пина на IN2 и IN3
#define IN2_OUT 6
#define IN3_OUT 7
чтобы при включении соответствующего входа на них был высокий уровень.нужны для коммутации индикатора уровня
swith(in_reg){
case 1: digitalWrite(IN2_OUT,HIGH); digitalWrite(IN3_OUT,LOW);break;
case 2: digitalWrite(IN2_OUT,LOW); digitalWrite(IN3_OUT,HIGH);break;
}
спасибо а то я уже начал пытать китайский ии вот что получилось
#define ENC_BUTTON 10
#define IN_BUTTON 2
#define SET_BUTTON 3
#define POWER_BUTTON 4
#define STANDBY_OUT 13
#define MUTE_BUTTON 5
#define IN2_OUT 6
#define IN3_OUT 7
#define IR_POWER 0x106FBA45 // КРАСНАЯ
#define IR_MUTE 0x106F02FD // 3
#define IR_UP 0x106F42BD // 1
#define IR_DW 0x106F827D // 2
#define IR_MENU 0x106F8A75 // СИНЯЯ
#define IR_INPUT 0x106F9A65 // ЗЕЛЕНАЯ
#define IR_SET 0x106FE01F // ЖЕЛТАЯ
// Константы для улучшения читаемости
#define DEBOUNCE_DELAY 50
#define DISPLAY_TIMEOUT 5000
#define ENCODER_DIVIDER 4
#define EEPROM_CLEAR_FLAG 100
#define EEPROM_CLEAR_VALUE 0
// Ограничения значений
#define VOLUME_MIN -79
#define VOLUME_MAX 15
#define EQ_MIN -20
#define EQ_MAX 20
#define GAIN_MIN 0
#define GAIN_MAX 20
#define CHANNEL_GAIN_MIN -79
#define CHANNEL_GAIN_MAX 15
#include <Wire.h>
#include <OLED_I2C.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <BD37534FV.h>
BD37534FV tda;
OLED myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[], BigNumbers[];
IRrecv irrecv(12);
Encoder myEnc(9, 8);
decode_results ir;
// Переменные состояния
long times, oldPosition = -999, newPosition;
int menu, vol_reg, in_reg, treb_reg, bass_reg, mid_reg, gain0, gain1, gain2, gain3;
bool w2, w, www, gr1, gr2, power = 1, mute;
int f_treb, q_treb, f_mid, q_mid, f_bass, q_bass, set = 0, f_sub, f_lon, gain_lon;
int gain_lf, gain_rf, gain_lr, gain_rr, gain_sub;
// Прототипы функций
void to_Timer();
void handlePower();
void handleMenuNavigation();
void handleVolume();
void handleToneControls();
void handleInputGain();
void handleSettingsMenu();
void saveToEEPROM();
void updateDisplay();
void audio();
void cl();
void en_low();
void ir_low();
void ir_low1();
void ir_low2();
void ir_low3();
void enc_err();
// Функции ограничения значений
void gain_lf_func() { gain_lf = constrain(gain_lf, CHANNEL_GAIN_MIN, CHANNEL_GAIN_MAX); }
void gain_rf_func() { gain_rf = constrain(gain_rf, CHANNEL_GAIN_MIN, CHANNEL_GAIN_MAX); }
void gain_lr_func() { gain_lr = constrain(gain_lr, CHANNEL_GAIN_MIN, CHANNEL_GAIN_MAX); }
void gain_rr_func() { gain_rr = constrain(gain_rr, CHANNEL_GAIN_MIN, CHANNEL_GAIN_MAX); }
void gain_sub_func() { gain_sub = constrain(gain_sub, CHANNEL_GAIN_MIN, CHANNEL_GAIN_MAX); }
void gain_lon_func() { gain_lon = constrain(gain_lon, GAIN_MIN, GAIN_MAX); }
void f_lon_func() { f_lon = constrain(f_lon, 0, 3); }
void f_sub_func() { f_sub = constrain(f_sub, 0, 4); }
void f_treb_func() { f_treb = constrain(f_treb, 0, 3); }
void f_mid_func() { f_mid = constrain(f_mid, 0, 3); }
void f_bass_func() { f_bass = constrain(f_bass, 0, 3); }
void q_mid_func() { q_mid = constrain(q_mid, 0, 3); }
void q_bass_func() { q_bass = constrain(q_bass, 0, 3); }
void q_treb_func() { q_treb = constrain(q_treb, 0, 1); }
void bass_func() { bass_reg = constrain(bass_reg, EQ_MIN, EQ_MAX); }
void mid_func() { mid_reg = constrain(mid_reg, EQ_MIN, EQ_MAX); }
void treb_func() { treb_reg = constrain(treb_reg, EQ_MIN, EQ_MAX); }
void gain_func() { gain0 = constrain(gain0, GAIN_MIN, GAIN_MAX); }
void vol_func() { vol_reg = constrain(vol_reg, VOLUME_MIN, VOLUME_MAX); }
void setup() {
Wire.begin();
Wire.setClock(400000L);
irrecv.enableIRIn();
myOLED.begin();
myOLED.setBrightness(100);
// Настройка пинов
pinMode(ENC_BUTTON, INPUT);
pinMode(IN_BUTTON, INPUT_PULLUP);
pinMode(SET_BUTTON, INPUT_PULLUP);
pinMode(MUTE_BUTTON, INPUT_PULLUP);
pinMode(POWER_BUTTON, INPUT_PULLUP);
pinMode(STANDBY_OUT, OUTPUT);
pinMode(IN2_OUT, OUTPUT);
pinMode(IN3_OUT, OUTPUT);
// Таймер для энкодера
MsTimer2::set(3, to_Timer);
MsTimer2::start();
// Инициализация EEPROM
if (EEPROM.read(EEPROM_CLEAR_FLAG) != EEPROM_CLEAR_VALUE) {
for (int i = 0; i < EEPROM_CLEAR_FLAG; i++) {
EEPROM.update(i, EEPROM_CLEAR_VALUE);
}
}
// Загрузка настроек из EEPROM
vol_reg = EEPROM.read(0) - 79;
in_reg = EEPROM.read(1);
gain1 = EEPROM.read(2);
gain2 = EEPROM.read(3);
gain3 = EEPROM.read(4);
treb_reg = EEPROM.read(5) - 20;
f_treb = EEPROM.read(6);
q_treb = EEPROM.read(7);
mid_reg = EEPROM.read(8) - 20;
f_mid = EEPROM.read(9);
q_mid = EEPROM.read(10);
bass_reg = EEPROM.read(11) - 20;
f_bass = EEPROM.read(12);
q_bass = EEPROM.read(13);
f_sub = EEPROM.read(14);
f_lon = EEPROM.read(15);
gain_lon = EEPROM.read(16);
gain_lf = EEPROM.read(17) - 79;
gain_rf = EEPROM.read(18) - 79;
gain_lr = EEPROM.read(19) - 79;
gain_rr = EEPROM.read(20) - 79;
gain_sub = EEPROM.read(21) - 79;
// Применение ограничений
vol_func();
treb_func();
mid_func();
bass_func();
gain_func();
// Установка начального gain0
switch (in_reg) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
}
// Стартовый экран
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Sound Processors"), CENTER, 10);
myOLED.print(F("BD37534FV"), CENTER, 30);
myOLED.update();
delay(2000);
}
void to_Timer() {
newPosition = myEnc.read() / ENCODER_DIVIDER;
}
void updateInputOutputs() {
switch (in_reg) {
case 0:
// Вход 1 - оба выхода LOW
digitalWrite(IN2_OUT, LOW);
digitalWrite(IN3_OUT, LOW);
break;
case 1:
// Вход 2 - IN2_OUT HIGH, IN3_OUT LOW
digitalWrite(IN2_OUT, HIGH);
digitalWrite(IN3_OUT, LOW);
break;
case 2:
// Вход 3 - IN2_OUT LOW, IN3_OUT HIGH
digitalWrite(IN2_OUT, LOW);
digitalWrite(IN3_OUT, HIGH);
break;
}
}
void loop() {
// Обработка ИК-сигналов
if (irrecv.decode(&ir)) {
irrecv.resume();
times = millis();
w = true;
w2 = true;
}
if (ir.value == 0) {
gr1 = false;
gr2 = false;
}
// Основные обработчики
handlePower();
handleMenuNavigation();
if (power == 0 && mute == 0) {
handleVolume();
handleToneControls();
handleInputGain();
handleSettingsMenu();
}
// Управление standby
digitalWrite(STANDBY_OUT, (power == 0) ? HIGH : LOW);
// Автосохранение в EEPROM
if (millis() - times > DISPLAY_TIMEOUT && w2 && power == 0 && mute == 0) {
saveToEEPROM();
set = 0;
menu = 0;
w2 = false;
w = true;
cl();
}
}
void handlePower() {
if ((digitalRead(POWER_BUTTON) == LOW || ir.value == IR_POWER) && power == 0) {
power = true;
mute = true;
gr1 = false;
gr2 = false;
cl();
myOLED.setFont(SmallFont);
myOLED.print(F("POWER OFF"), CENTER, 10);
myOLED.update();
delay(1500);
cl();
menu = 100;
myOLED.setBrightness(0);
audio();
}
if ((digitalRead(POWER_BUTTON) == LOW || ir.value == IR_POWER) && power == 1) {
power = false;
mute = false;
myOLED.setBrightness(100);
gr1 = false;
gr2 = false;
times = millis();
w = true;
w2 = true;
myOLED.setFont(SmallFont);
myOLED.print(F("POWER ON"), CENTER, 10);
myOLED.update();
delay(1500);
cl();
menu = 0;
audio();
}
// Обработка MUTE
if (power == 0) {
if ((digitalRead(MUTE_BUTTON) == LOW || ir.value == IR_MUTE) && mute == 0) {
mute = true;
gr1 = false;
gr2 = false;
cl();
myOLED.setFont(SmallFont);
myOLED.print(F("MUTE"), CENTER, 10);
myOLED.update();
cl();
menu = 100;
audio();
}
if ((digitalRead(MUTE_BUTTON) == LOW || ir.value == IR_MUTE) && mute == 1) {
mute = false;
gr1 = false;
gr2 = false;
times = millis();
w = true;
w2 = true;
cl();
menu = 0;
audio();
}
}
}
void handleMenuNavigation() {
if (power == 0 && mute == 0) {
if (digitalRead(SET_BUTTON) == LOW || ir.value == IR_SET) {
set = 1;
gr1 = false;
gr2 = false;
cl();
delay(DEBOUNCE_DELAY);
times = millis();
w = true;
w2 = true;
myOLED.setFont(SmallFont);
myOLED.print(F("SETTING MENU"), CENTER, 10);
myOLED.update();
delay(1500);
cl();
menu = 10;
}
if ((digitalRead(ENC_BUTTON) == LOW || ir.value == IR_MENU) && set == 0) {
menu++;
gr1 = false;
gr2 = false;
cl();
delay(DEBOUNCE_DELAY);
times = millis();
w = true;
w2 = true;
if (menu > 3) menu = 0;
}
if ((digitalRead(ENC_BUTTON) == LOW || ir.value == IR_MENU) && set == 1) {
menu++;
gr1 = false;
gr2 = false;
cl();
delay(DEBOUNCE_DELAY);
times = millis();
w = true;
w2 = true;
if (menu > 23) menu = 10;
}
if (digitalRead(IN_BUTTON) == LOW || ir.value == IR_INPUT) {
in_reg++;
menu = 5;
cl();
times = millis();
w = true;
w2 = true;
www = true;
if (in_reg > 2) in_reg = 0;
// Обновление gain0 при смене входа
switch (in_reg) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
}
audio();
}
}
}
void handleVolume() {
if (menu != 0) return;
// Обработка энкодера
if (newPosition != oldPosition) {
oldPosition = newPosition;
enc_err();
vol_reg += newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = true;
w2 = true;
vol_func();
audio();
}
// Обработка ИК-пульта
if (ir.value == IR_UP) {
vol_reg++;
ir_low();
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF && gr1) {
vol_reg++;
ir_low2();
vol_func();
audio();
}
if (ir.value == IR_DW) {
vol_reg--;
ir_low1();
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF && gr2) {
vol_reg--;
ir_low3();
vol_func();
audio();
}
// Обновление дисплея
if (w) {
w = false;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("VOLUME"), LEFT, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(vol_reg + 79, 75, 0);
myOLED.setFont(SmallFont);
myOLED.print(F("IN"), LEFT, 10);
myOLED.printNumI(in_reg + 1, 30, 10);
myOLED.print(F("GAIN"), LEFT, 20);
myOLED.printNumI(gain0, 30, 20);
myOLED.drawLine(0, 30, 128, 30);
myOLED.setFont(SmallFont);
myOLED.print(F("TREBLE"), LEFT, 35);
myOLED.printNumI(treb_reg, 75, 35);
myOLED.print(F("MIDDLE"), LEFT, 45);
myOLED.printNumI(mid_reg, 75, 45);
myOLED.print(F("BASS"), LEFT, 55);
myOLED.printNumI(bass_reg, 75, 55);
myOLED.update();
}
}
void handleToneControls() {
// TREBLE (меню 1)
if (menu == 1) {
if (newPosition != oldPosition) {
oldPosition = newPosition;
enc_err();
treb_reg += newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = true;
w2 = true;
treb_func();
audio();
}
// Обработка ИК... (аналогично handleVolume)
// ... остальной код для treble, mid, bass
}
// MIDDLE (меню 2) и BASS (меню 3) - аналогичная структура
}
void handleInputGain() {
if (menu != 5) return;
// Обновление gain0 в зависимости от входа
switch (in_reg) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
}
// Обработка ИК-пульта
if (ir.value == IR_UP) {
gain0++;
ir_low();
gain_func();
audio();
}
if (ir.value == 0xFFFFFFFF && gr1) {
gain0++;
ir_low2();
gain_func();
audio();
}
if (ir.value == IR_DW) {
gain0--;
ir_low1();
gain_func();
audio();
}
if (ir.value == 0xFFFFFFFF && gr2) {
gain0--;
ir_low3();
gain_func();
audio();
}
// Обработка энкодера
if (newPosition != oldPosition) {
oldPosition = newPosition;
enc_err();
gain0 += newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
www = true;
w = true;
w2 = true;
gain_func();
}
// Сохранение gain для текущего входа
switch (in_reg) {
case 0: gain1 = gain0; break;
case 1: gain2 = gain0; break;
case 2: gain3 = gain0; break;
}
if (www) {
audio();
www = false;
}
// Обновление дисплея
if (w) {
w = false;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("INPUT"), LEFT, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(in_reg + 1, 65, 0);
myOLED.drawLine(0, 30, 128, 30);
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN"), LEFT, 35);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain0, 65, 35);
myOLED.update();
}
}
void handleSettingsMenu() {
// Обработка подменю настроек (10-23)
// Структура аналогична предыдущим обработчикам
// ... (код для меню 10-23)
}
void saveToEEPROM() {
EEPROM.update(0, vol_reg + 79);
EEPROM.update(1, in_reg);
EEPROM.update(2, gain1);
EEPROM.update(3, gain2);
EEPROM.update(4, gain3);
EEPROM.update(5, treb_reg + 20);
EEPROM.update(6, f_treb);
EEPROM.update(7, q_treb);
EEPROM.update(8, mid_reg + 20);
EEPROM.update(9, f_mid);
EEPROM.update(10, q_mid);
EEPROM.update(11, bass_reg + 20);
EEPROM.update(12, f_bass);
EEPROM.update(13, q_bass);
EEPROM.update(14, f_sub);
EEPROM.update(15, f_lon);
EEPROM.update(16, gain_lon);
EEPROM.update(17, gain_lf + 79);
EEPROM.update(18, gain_rf + 79);
EEPROM.update(19, gain_lr + 79);
EEPROM.update(20, gain_rr + 79);
EEPROM.update(21, gain_sub + 79);
}
// Вспомогательные функции
void en_low() {
myEnc.write(0);
newPosition = 0;
times = millis();
myOLED.clrScr();
w = true;
w2 = true;
}
void ir_low3() {
gr1 = false;
cl();
times = millis();
w = true;
w2 = true;
}
void ir_low2() {
gr2 = false;
cl();
times = millis();
w = true;
w2 = true;
}
void ir_low1() {
gr1 = false;
gr2 = true;
cl();
times = millis();
w = true;
w2 = true;
}
void ir_low() {
gr1 = true;
ir_low2();
}
void enc_err() {
newPosition = constrain(newPosition, -1, 1);
}
void cl() {
myOLED.clrScr();
ir.value = 0;
delay(300);
}
void audio() {
tda.setSetup_1(1, 2, 0);
tda.setSetup_2(f_sub, 0, 0, 0);
tda.setLoudness_f(f_lon);
tda.setIn(in_reg);
tda.setIn_gain(gain0, mute);
tda.setVol(vol_reg);
tda.setFront_1(gain_lf);
tda.setFront_2(gain_rf);
tda.setRear_1(gain_lr);
tda.setRear_2(gain_rr);
tda.setSub(gain_sub);
tda.mix();
tda.setBass_setup(q_bass, f_bass);
tda.setMiddle_setup(q_mid, f_mid);
tda.setTreble_setup(q_treb, f_treb);
tda.setBass_gain(bass_reg);
tda.setMiddle_gain(mid_reg);
tda.setTreble_gain(treb_reg);
tda.setLoudness_gain(gain_lon);
}
Скетч использует 19852 байт (61%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1599 байт (78%) динамической памяти, оставляя 449 байт для локальных переменных. Максимум: 2048 байт.
буду тестировать
пытка апельсинами продолжалась 7 часов в итоге ии раскололся
#define STANDBY_OUT 13
#define IN2_OUT 6
#define IN3_OUT 7
#define IR_POWER 0x106FBA45 //КРАСНАЯ
#define IR_MUTE 0x106F02FD // 3
#define IR_UP 0x106F42BD //1
#define IR_DW 0x106F827D //2
#define IR_MENU 0x106F8A75 //СИНЯЯ
#define IR_INPUT 0x106F9A65 //ЗЕЛЕНАЯ
#define IR_SET 0x106FE01F //ЖЕЛТАЯ
#include <Wire.h>
#include <OLED_I2C.h> // http://rcl-radio.ru/wp-content/uploads/ … ED_I2C.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <boarddefs.h> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/ … remote.zip
#include <BD37534FV.h>
BD37534FV tda;
OLED myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[], BigNumbers[];
IRrecv irrecv(12); // указываем вывод модуля IR приемника
decode_results ir;
long times;
int menu, vol_reg, in_reg, treb_reg, bass_reg, mid_reg, gain0, gain1, gain2, gain3;
bool w2, w, www, gr1, gr2, power = 1, mute;
int f_treb, q_treb, f_mid, q_mid, f_bass, q_bass, set = 0, f_sub, f_lon, gain_lon;
int gain_lf, gain_rf, gain_lr, gain_rr, gain_sub;
void setup() {
Wire.begin();
Wire.setClock(400000L);
irrecv.enableIRIn();
myOLED.begin();
myOLED.setBrightness(100);
pinMode(STANDBY_OUT, OUTPUT);
pinMode(IN2_OUT, OUTPUT);
pinMode(IN3_OUT, OUTPUT);
// ИНИЦИАЛИЗАЦИЯ ВЫХОДОВ
digitalWrite(IN2_OUT, LOW);
digitalWrite(IN3_OUT, LOW);
MsTimer2::set(3, to_Timer);
MsTimer2::start();
if (EEPROM.read(100) != 0) {
for (int i = 0; i < 101; i++) {
EEPROM.update(i, 0); // очистка памяти при первом включении
}
}
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Sound Processors"), CENTER, 10);
myOLED.print(F("BD37534FV"), CENTER, 30);
myOLED.update();
delay(2000);
// ЗАГРУЗКА ДАННЫХ ИЗ EEPROM
vol_reg = EEPROM.read(0) - 79;
in_reg = EEPROM.read(1);
gain1 = EEPROM.read(2);
gain2 = EEPROM.read(3);
gain3 = EEPROM.read(4);
treb_reg = EEPROM.read(5) - 20;
f_treb = EEPROM.read(6);
q_treb = EEPROM.read(7);
mid_reg = EEPROM.read(8) - 20;
f_mid = EEPROM.read(9);
q_mid = EEPROM.read(10);
bass_reg = EEPROM.read(11) - 20;
f_bass = EEPROM.read(12);
q_bass = EEPROM.read(13);
f_sub = EEPROM.read(14);
f_lon = EEPROM.read(15);
gain_lon = EEPROM.read(16);
gain_lf = EEPROM.read(17) - 79;
gain_rf = EEPROM.read(18) - 79;
gain_lr = EEPROM.read(19) - 79;
gain_rr = EEPROM.read(20) - 79;
gain_sub = EEPROM.read(21) - 79;
switch (in_reg) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
}
// ОБНОВЛЕНИЕ ВЫХОДОВ ПРИ ЗАГРУЗКЕ
updateInputOutputs();
}
// ФУНКЦИЯ ОБНОВЛЕНИЯ ВЫХОДОВ ДЛЯ ПЕРЕКЛЮЧЕНИЯ ВХОДОВ
void updateInputOutputs() {
switch (in_reg) {
case 0:
// Вход 1 - оба выхода LOW
digitalWrite(IN2_OUT, LOW);
digitalWrite(IN3_OUT, LOW);
break;
case 1:
// Вход 2 - IN2_OUT HIGH, IN3_OUT LOW
digitalWrite(IN2_OUT, HIGH);
digitalWrite(IN3_OUT, LOW);
break;
case 2:
// Вход 3 - IN2_OUT LOW, IN3_OUT HIGH
digitalWrite(IN2_OUT, LOW);
digitalWrite(IN3_OUT, HIGH);
break;
}
}
void to_Timer() {
// Таймер оставлен для совместимости
}
// ФУНКЦИЯ ОЧИСТКИ ЭКРАНА
void cl() {
myOLED.clrScr();
ir.value = 0;
delay(300);
}
// ФУНКЦИЯ AUDIO ДЛЯ НАСТРОЙКИ BD37534FV
void audio() {
tda.setSetup_1(1, 2, 0); // default (1,2,0)
tda.setSetup_2(f_sub, 0, 0, 0);
tda.setLoudness_f(f_lon); // 250Hz 400Hz 800Hz Prohibition = int 0...3
tda.setIn(in_reg); // 0...2
tda.setIn_gain(gain0, mute); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default
tda.setVol(vol_reg); // -79...+15 dB = int -79...15
tda.setFront_1(gain_lf); // -79...+15 dB = int -79...15
tda.setFront_2(gain_rf); // -79...+15 dB = int -79...15
tda.setRear_1(gain_lr); // -79...+15 dB = int -79...15
tda.setRear_2(gain_rr); // -79...+15 dB = int -79...15
tda.setSub(gain_sub); // -79...+15 dB = int -79...15
tda.mix();
tda.setBass_setup(q_bass, f_bass); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
tda.setMiddle_setup(q_mid, f_mid); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
tda.setTreble_setup(q_treb, f_treb); // 0.75 1.25 --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
tda.setBass_gain(bass_reg); // --20 ... +20 dB = int -20 ... 20
tda.setMiddle_gain(mid_reg); // --20 ... +20 dB = int -20 ... 20
tda.setTreble_gain(treb_reg); // --20 ... +20 dB = int -20 ... 20
tda.setLoudness_gain(gain_lon); // 0 ... 20 dB = int 0 ... 20
}
void loop() {
/// IR ////////////////////////////////////////
if (irrecv.decode(&ir)) {
irrecv.resume();
times = millis();
w = 1;
w2 = 1;
}
if (ir.value == 0) {
gr1 = 0; // запрет нажатий не активных кнопок пульта
gr2 = 0;
}
//////// POWER //////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (ir.value == IR_POWER && power == 0) {
power = 1;
mute = 1;
gr1 = 0;
gr2 = 0;
cl();
myOLED.setFont(SmallFont);
myOLED.print(F("POWER OFF"), CENTER, 10);
myOLED.update();
delay(1500);
cl();
menu = 100;
myOLED.setBrightness(0);
}
if (ir.value == IR_POWER && power == 1) {
power = 0;
mute = 0;
myOLED.setBrightness(100);
gr1 = 0;
gr2 = 0;
times = millis();
w = 1;
w2 = 1;
myOLED.setFont(SmallFont);
myOLED.print(F("POWER ON"), CENTER, 10);
myOLED.update();
delay(1500);
cl();
menu = 0;
}
if (power == 0 && mute == 0) {
// SET BUTTON - ВХОД В SETTING MENU
if (ir.value == IR_SET) {
set = 1;
gr1 = 0;
gr2 = 0;
cl();
delay(200);
times = millis();
w = 1;
w2 = 1;
myOLED.setFont(SmallFont);
myOLED.print(F("SETTING MENU"), CENTER, 10);
myOLED.update();
delay(1500);
cl();
menu = 10; // Начинаем с первого пункта настроек
}
// MENU BUTTON - ПЕРЕКЛЮЧЕНИЕ МЕЖДУ ОСНОВНЫМИ МЕНЮ И НАСТРОЙКАМИ
if (ir.value == IR_MENU && set == 0) {
menu++;
gr1 = 0;
gr2 = 0;
cl();
delay(200);
times = millis();
w = 1;
w2 = 1;
if (menu > 3) {
menu = 0;
}
}
if (ir.value == IR_MENU && set == 1) {
menu++;
gr1 = 0;
gr2 = 0;
cl();
delay(200);
times = millis();
w = 1;
w2 = 1;
if (menu > 23) {
menu = 10; // Циклическое переключение в настройках
}
}
// INPUT BUTTON - ПЕРЕКЛЮЧЕНИЕ ВХОДОВ
if (ir.value == IR_INPUT) {
in_reg++;
if (in_reg > 2) {
in_reg = 0;
}
menu = 5;
cl();
times = millis();
w = 1;
w2 = 1;
www = 1;
// ОБНОВЛЯЕМ ВЫХОДЫ ПРИ СМЕНЕ ВХОДА
updateInputOutputs();
// Обновляем gain0 для текущего входа
switch (in_reg) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
}
audio();
}
}
// MUTE BUTTON
if (power == 0) {
if (ir.value == IR_MUTE && mute == 0) {
mute = 1; gr1 = 0; gr2 = 0; cl();
myOLED.setFont(SmallFont); myOLED.print(F("MUTE"), CENTER, 10); myOLED.update(); cl(); menu = 100; audio();
}
if (ir.value == IR_MUTE && mute == 1) {
mute = 0;
gr1 = 0;
gr2 = 0;
times = millis();
w = 1;
w2 = 1;
cl();
menu = 0;
audio();
}
}
// STANDBY CONTROL
if (power == 0) {
digitalWrite(STANDBY_OUT, HIGH);
} else {
digitalWrite(STANDBY_OUT, LOW);
}
////////////// VOLUME MENU ///////////////////////////////////////////////////////////////////
if (menu == 0) {
if (ir.value == IR_UP) {
vol_reg++; // кнопка >
ir_low();
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
vol_reg++; // кнопка >>>>>>
ir_low2();
vol_func();
audio();
}
if (ir.value == IR_DW) {
vol_reg--; // кнопка <
ir_low1();
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
vol_reg--; // кнопка <<<<<<
ir_low3();
vol_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("VOLUME"), LEFT, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(vol_reg + 79, 75, 0);
myOLED.setFont(SmallFont);
myOLED.print(F("IN"), LEFT, 10);
myOLED.printNumI(in_reg + 1, 30, 10);
myOLED.print(F("GAIN"), LEFT, 20);
myOLED.printNumI(gain0, 30, 20);
myOLED.drawLine(0, 30, 128, 30);
myOLED.setFont(SmallFont);
myOLED.print(F("TREBLE"), LEFT, 35);
myOLED.printNumI(treb_reg, 75, 35);
myOLED.setFont(SmallFont);
myOLED.print(F("MIDDLE"), LEFT, 45);
myOLED.printNumI(mid_reg, 75, 45);
myOLED.setFont(SmallFont);
myOLED.print(F("BASS"), LEFT, 55);
myOLED.printNumI(bass_reg, 75, 55);
myOLED.update();
}
}
////////////// TREBLE MENU ///////////////////////////////////////////////////////////////////
if (menu == 1) {
if (ir.value == IR_UP) {
treb_reg++; // кнопка >
ir_low();
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
treb_reg++; // кнопка >>>>>>
ir_low2();
treb_func();
audio();
}
if (ir.value == IR_DW) {
treb_reg--; // кнопка <
ir_low1();
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
treb_reg--; // кнопка <<<<<<
ir_low3();
treb_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("TREBLE"), LEFT, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(treb_reg, 75, 0);
myOLED.setFont(SmallFont);
switch (f_treb) {
case 0: myOLED.print(F("F 7.5 kHz"), LEFT, 10); break;
case 1: myOLED.print(F("F 10 kHz"), LEFT, 10); break;
case 2: myOLED.print(F("F 12.5kHz"), LEFT, 10); break;
case 3: myOLED.print(F("F 15 kHz"), LEFT, 10); break;
}
myOLED.setFont(SmallFont);
switch (q_treb) {
case 0: myOLED.print(F("Q 0.75"), LEFT, 20); break;
case 1: myOLED.print(F("Q 1.25"), LEFT, 20); break;
}
myOLED.drawLine(0, 30, 128, 30);
myOLED.setFont(SmallFont);
myOLED.print(F("MIDDLE"), LEFT, 35);
myOLED.printNumI(mid_reg, 75, 35);
myOLED.print(F("BASS"), LEFT, 45);
myOLED.printNumI(bass_reg, 75, 45);
myOLED.print(F("VOLUME"), LEFT, 55);
myOLED.printNumI(vol_reg + 79, 75, 55);
myOLED.update();
}
}
////////////// MIDDLE MENU ///////////////////////////////////////////////////////////////////
if (menu == 2) {
if (ir.value == IR_UP) {
mid_reg++; // кнопка >
ir_low();
mid_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
mid_reg++; // кнопка >>>>>>
ir_low2();
mid_func();
audio();
}
if (ir.value == IR_DW) {
mid_reg--; // кнопка <
ir_low1();
mid_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
mid_reg--; // кнопка <<<<<<
ir_low3();
mid_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("MIDDLE"), LEFT, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(mid_reg, 75, 0);
myOLED.setFont(SmallFont);
switch (f_mid) {
case 0: myOLED.print(F("F 500 Hz"), LEFT, 10); break;
case 1: myOLED.print(F("F 1 kHz"), LEFT, 10); break;
case 2: myOLED.print(F("F 1.5kHz"), LEFT, 10); break;
case 3: myOLED.print(F("F 2.5kHz"), LEFT, 10); break;
}
myOLED.setFont(SmallFont);
switch (q_mid) {
case 0: myOLED.print(F("Q 0.75"), LEFT, 20); break;
case 1: myOLED.print(F("Q 1.00"), LEFT, 20); break;
case 2: myOLED.print(F("Q 1.25"), LEFT, 20); break;
case 3: myOLED.print(F("Q 1.50"), LEFT, 20); break;
}
myOLED.drawLine(0, 30, 128, 30);
myOLED.setFont(SmallFont);
myOLED.print(F("BASS"), LEFT, 35);
myOLED.printNumI(bass_reg, 75, 35);
myOLED.print(F("VOLUME"), LEFT, 45);
myOLED.printNumI(vol_reg + 79, 75, 45);
myOLED.print(F("TERBLE"), LEFT, 55);
myOLED.printNumI(treb_reg, 75, 55);
myOLED.update();
}
}
////////////// BASS MENU ///////////////////////////////////////////////////////////////////
if (menu == 3) {
if (ir.value == IR_UP) {
bass_reg++; // кнопка >
ir_low();
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
bass_reg++; // кнопка >>>>>>
ir_low2();
bass_func();
audio();
}
if (ir.value == IR_DW) {
bass_reg--; // кнопка <
ir_low1();
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
bass_reg--; // кнопка <<<<<<
ir_low3();
bass_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("BASS"), LEFT, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(bass_reg, 75, 0);
myOLED.setFont(SmallFont);
switch (f_bass) {
case 0: myOLED.print(F("F 60 Hz"), LEFT, 10); break;
case 1: myOLED.print(F("F 80 Hz"), LEFT, 10); break;
case 2: myOLED.print(F("F 100kHz"), LEFT, 10); break;
case 3: myOLED.print(F("F 120kHz"), LEFT, 10); break;
}
switch (q_bass) {
case 0: myOLED.print(F("Q 0.50"), LEFT, 20); break;
case 1: myOLED.print(F("Q 1.00"), LEFT, 20); break;
case 2: myOLED.print(F("Q 1.50"), LEFT, 20); break;
case 3: myOLED.print(F("Q 2.00"), LEFT, 20); break;
}
myOLED.drawLine(0, 30, 128, 30);
myOLED.setFont(SmallFont);
myOLED.print(F("VOLUME"), LEFT, 35);
myOLED.printNumI(vol_reg + 79, 75, 35);
myOLED.print(F("TREBLE"), LEFT, 45);
myOLED.printNumI(treb_reg, 75, 45);
myOLED.print(F("MIDDLE"), LEFT, 55);
myOLED.printNumI(mid_reg, 75, 55);
myOLED.update();
}
}
////////////// INPUT GAIN MENU ///////////////////////////////////////////////////////////////////
if (menu == 5) {
switch (in_reg) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
}
if (ir.value == IR_UP) {
gain0++; // кнопка >
ir_low();
gain_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain0++; // кнопка >>>>>>
ir_low2();
gain_func();
audio();
}
if (ir.value == IR_DW) {
gain0--; // кнопка <
ir_low1();
gain_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain0--; // кнопка <<<<<<
ir_low3();
gain_func();
audio();
}
switch (in_reg) {
case 0: gain1 = gain0; break;
case 1: gain2 = gain0; break;
case 2: gain3 = gain0; break;
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("INPUT"), LEFT, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(in_reg + 1, 65, 0);
myOLED.drawLine(0, 30, 128, 30);
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN"), LEFT, 35);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain0, 65, 35);
myOLED.update();
}
}
////////////// SETTING MENU ITEMS ///////////////////////////////////////////////////////////////////
////////////// SET F_TREB ///////////////////////////////////////////////////////////////////
if (menu == 10) {
if (ir.value == IR_UP) {
f_treb++; // кнопка >
ir_low();
f_treb_func();
audio();
}
if (ir.value == IR_DW) {
f_treb--; // кнопка <
ir_low1();
f_treb_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Frequency TREBLE"), CENTER, 0);
myOLED.setFont(BigNumbers);
switch (f_treb) {
case 0: myOLED.print(F("7.50"), CENTER, 20); break;
case 1: myOLED.print(F("10.0"), CENTER, 20); break;
case 2: myOLED.print(F("12.5"), CENTER, 20); break;
case 3: myOLED.print(F("15.0"), CENTER, 20); break;
}
myOLED.setFont(SmallFont);
myOLED.print(F("kHz"), CENTER, 50);
myOLED.update();
}
}
////////////// SET F_MID ///////////////////////////////////////////////////////////////////
if (menu == 11) {
if (ir.value == IR_UP) {
f_mid++; // кнопка >
ir_low();
f_mid_func();
audio();
}
if (ir.value == IR_DW) {
f_mid--; // кнопка <
ir_low1();
f_mid_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Frequency MIDDLE"), CENTER, 0);
myOLED.setFont(BigNumbers);
switch (f_mid) {
case 0: myOLED.print(F("0.5"), CENTER, 20); break;
case 1: myOLED.print(F("1.0"), CENTER, 20); break;
case 2: myOLED.print(F("1.5"), CENTER, 20); break;
case 3: myOLED.print(F("2.5"), CENTER, 20); break;
}
myOLED.setFont(SmallFont);
myOLED.print(F("kHz"), CENTER, 50);
myOLED.update();
}
}
////////////// SET F_BASS ///////////////////////////////////////////////////////////////////
if (menu == 12) {
if (ir.value == IR_UP) {
f_bass++; // кнопка >
ir_low();
f_bass_func();
audio();
}
if (ir.value == IR_DW) {
f_bass--; // кнопка <
ir_low1();
f_bass_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Frequency BASS"), CENTER, 0);
myOLED.setFont(BigNumbers);
switch (f_bass) {
case 0: myOLED.print(F("60"), CENTER, 20); break;
case 1: myOLED.print(F("80"), CENTER, 20); break;
case 2: myOLED.print(F("100"), CENTER, 20); break;
case 3: myOLED.print(F("120"), CENTER, 20); break;
}
myOLED.setFont(SmallFont);
myOLED.print(F("Hz"), CENTER, 50);
myOLED.update();
}
}
////////////// SET F_SUB ///////////////////////////////////////////////////////////////////
if (menu == 13) {
if (ir.value == IR_UP) {
f_sub++; // кнопка >
ir_low();
f_sub_func();
audio();
}
if (ir.value == IR_DW) {
f_sub--; // кнопка <
ir_low1();
f_sub_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Frequency SUBWOOFER"), CENTER, 0);
switch (f_sub) {
case 0:
myOLED.setFont(SmallFont);
myOLED.print(F("OFF"), CENTER, 20);
break;
case 1:
myOLED.setFont(BigNumbers);
myOLED.print(F("55"), CENTER, 20);
break;
case 2:
myOLED.setFont(BigNumbers);
myOLED.print(F("85"), CENTER, 20);
break;
case 3:
myOLED.setFont(BigNumbers);
myOLED.print(F("120"), CENTER, 20);
break;
case 4:
myOLED.setFont(BigNumbers);
myOLED.print(F("160"), CENTER, 20);
break;
}
if (f_sub > 0) {
myOLED.setFont(SmallFont);
myOLED.print(F("Hz"), CENTER, 50);
}
myOLED.update();
}
}
////////////// SET F_LOUDNESS ///////////////////////////////////////////////////////////////////
if (menu == 14) {
if (ir.value == IR_UP) {
f_lon++; // кнопка >
ir_low();
f_lon_func();
audio();
}
if (ir.value == IR_DW) {
f_lon--; // кнопка <
ir_low1();
f_lon_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Frequency LOUDNESS"), CENTER, 0);
switch (f_lon) {
case 0:
myOLED.setFont(BigNumbers);
myOLED.print(F("250"), CENTER, 20);
break;
case 1:
myOLED.setFont(BigNumbers);
myOLED.print(F("400"), CENTER, 20);
break;
case 2:
myOLED.setFont(BigNumbers);
myOLED.print(F("800"), CENTER, 20);
break;
case 3:
myOLED.setFont(SmallFont);
myOLED.print(F("Prohibition"), CENTER, 20);
break;
}
if (f_lon < 3) {
myOLED.setFont(SmallFont);
myOLED.print(F("Hz"), CENTER, 50);
}
myOLED.update();
}
}
////////////// SET Q_TREB ///////////////////////////////////////////////////////////////////
if (menu == 15) {
if (ir.value == IR_UP) {
q_treb++; // кнопка >
ir_low();
q_treb_func();
audio();
}
if (ir.value == IR_DW) {
q_treb--; // кнопка <
ir_low1();
q_treb_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Q TREBLE"), CENTER, 0);
myOLED.setFont(BigNumbers);
switch (q_treb) {
case 0: myOLED.print(F("0.75"), CENTER, 20); break;
case 1: myOLED.print(F("1.25"), CENTER, 20); break;
}
myOLED.update();
}
}
////////////// SET Q_MIDDLE ///////////////////////////////////////////////////////////////////
if (menu == 16) {
if (ir.value == IR_UP) {
q_mid++; // кнопка >
ir_low();
q_mid_func();
audio();
}
if (ir.value == IR_DW) {
q_mid--; // кнопка <
ir_low1();
q_mid_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Q MIDDLE"), CENTER, 0);
myOLED.setFont(BigNumbers);
switch (q_mid) {
case 0: myOLED.print(F("0.75"), CENTER, 20); break;
case 1: myOLED.print(F("1.00"), CENTER, 20); break;
case 2: myOLED.print(F("1.25"), CENTER, 20); break;
case 3: myOLED.print(F("1.50"), CENTER, 20); break;
}
myOLED.update();
}
}
////////////// SET Q_BASS ///////////////////////////////////////////////////////////////////
if (menu == 17) {
if (ir.value == IR_UP) {
q_bass++; // кнопка >
ir_low();
q_bass_func();
audio();
}
if (ir.value == IR_DW) {
q_bass--; // кнопка <
ir_low1();
q_bass_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("Q BASS"), CENTER, 0);
myOLED.setFont(BigNumbers);
switch (q_bass) {
case 0: myOLED.print(F("0.50"), CENTER, 20); break;
case 1: myOLED.print(F("1.00"), CENTER, 20); break;
case 2: myOLED.print(F("1.50"), CENTER, 20); break;
case 3: myOLED.print(F("2.00"), CENTER, 20); break;
}
myOLED.update();
}
}
////////////// SET GAIN LOUDNESS ///////////////////////////////////////////////////////////////////
if (menu == 18) {
if (ir.value == IR_UP) {
gain_lon++; // кнопка >
ir_low();
gain_lon_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain_lon++; // кнопка >>>>>>
ir_low2();
gain_lon_func();
audio();
}
if (ir.value == IR_DW) {
gain_lon--; // кнопка <
ir_low1();
gain_lon_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain_lon--; // кнопка <<<<<<
ir_low3();
gain_lon_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN LOUDNESS"), CENTER, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain_lon, CENTER, 20);
myOLED.setFont(SmallFont);
myOLED.print(F("dB"), CENTER, 50);
myOLED.update();
}
}
////////////// SET GAIN LEFT FRONT ///////////////////////////////////////////////////////////////////
if (menu == 19) {
if (ir.value == IR_UP) {
gain_lf++; // кнопка >
ir_low();
gain_lf_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain_lf++; // кнопка >>>>>>
ir_low2();
gain_lf_func();
audio();
}
if (ir.value == IR_DW) {
gain_lf--; // кнопка <
ir_low1();
gain_lf_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain_lf--; // кнопка <<<<<<
ir_low3();
gain_lf_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN LEFT FRONT"), CENTER, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain_lf, CENTER, 20);
myOLED.setFont(SmallFont);
myOLED.print(F("dB"), CENTER, 50);
myOLED.update();
}
}
////////////// SET GAIN RIGHT FRONT ///////////////////////////////////////////////////////////////////
if (menu == 20) {
if (ir.value == IR_UP) {
gain_rf++; // кнопка >
ir_low();
gain_rf_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain_rf++; // кнопка >>>>>>
ir_low2();
gain_rf_func();
audio();
}
if (ir.value == IR_DW) {
gain_rf--; // кнопка <
ir_low1();
gain_rf_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain_rf--; // кнопка <<<<<<
ir_low3();
gain_rf_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN RIGHT FRONT"), CENTER, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain_rf, CENTER, 20);
myOLED.setFont(SmallFont);
myOLED.print(F("dB"), CENTER, 50);
myOLED.update();
}
}
////////////// SET GAIN LEFT REAR ///////////////////////////////////////////////////////////////////
if (menu == 21) {
if (ir.value == IR_UP) {
gain_lr++; // кнопка >
ir_low();
gain_lr_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain_lr++; // кнопка >>>>>>
ir_low2();
gain_lr_func();
audio();
}
if (ir.value == IR_DW) {
gain_lr--; // кнопка <
ir_low1();
gain_lr_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain_lr--; // кнопка <<<<<<
ir_low3();
gain_lr_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN LEFT REAR"), CENTER, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain_lr, CENTER, 20);
myOLED.setFont(SmallFont);
myOLED.print(F("dB"), CENTER, 50);
myOLED.update();
}
}
////////////// SET GAIN RIGHT REAR ///////////////////////////////////////////////////////////////////
if (menu == 22) {
if (ir.value == IR_UP) {
gain_rr++; // кнопка >
ir_low();
gain_rr_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain_rr++; // кнопка >>>>>>
ir_low2();
gain_rr_func();
audio();
}
if (ir.value == IR_DW) {
gain_rr--; // кнопка <
ir_low1();
gain_rr_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain_rr--; // кнопка <<<<<<
ir_low3();
gain_rr_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN RIGHT REAR"), CENTER, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain_rr, CENTER, 20);
myOLED.setFont(SmallFont);
myOLED.print(F("dB"), CENTER, 50);
myOLED.update();
}
}
////////////// SET GAIN SUBWOOFER ///////////////////////////////////////////////////////////////////
if (menu == 23) {
if (ir.value == IR_UP) {
gain_sub++; // кнопка >
ir_low();
gain_sub_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain_sub++; // кнопка >>>>>>
ir_low2();
gain_sub_func();
audio();
}
if (ir.value == IR_DW) {
gain_sub--; // кнопка <
ir_low1();
gain_sub_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain_sub--; // кнопка <<<<<<
ir_low3();
gain_sub_func();
audio();
}
if (w == 1) {
w = 0;
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print(F("GAIN SUBWOOFER"), CENTER, 0);
myOLED.setFont(BigNumbers);
myOLED.printNumI(gain_sub, CENTER, 20);
myOLED.setFont(SmallFont);
myOLED.print(F("dB"), CENTER, 50);
myOLED.update();
}
}
////////////////// EEPROM //////////////////////////////////////////////////////////////
if (millis() - times > 5000 && w2 == 1 && power == 0 && mute == 0) {
EEPROM.update(0, vol_reg + 79);
EEPROM.update(1, in_reg);
EEPROM.update(2, gain1);
EEPROM.update(3, gain2);
EEPROM.update(4, gain3);
EEPROM.update(5, treb_reg + 20);
EEPROM.update(6, f_treb);
EEPROM.update(7, q_treb);
EEPROM.update(8, mid_reg + 20);
EEPROM.update(9, f_mid);
EEPROM.update(10, q_mid);
EEPROM.update(11, bass_reg + 20);
EEPROM.update(12, f_bass);
EEPROM.update(13, q_bass);
EEPROM.update(14, f_sub);
EEPROM.update(15, f_lon);
EEPROM.update(16, gain_lon);
EEPROM.update(17, gain_lf + 79);
EEPROM.update(18, gain_rf + 79);
EEPROM.update(19, gain_lr + 79);
EEPROM.update(20, gain_rr + 79);
EEPROM.update(21, gain_sub + 79);
cl();
set = 0;
menu = 0;
w2 = 0;
w = 1;
}
} // loop end
// ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ
void ir_low3() {
gr1 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
}
void ir_low2() {
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
}
void ir_low1() {
gr1 = 0;
gr2 = 1;
cl();
times = millis();
w = 1;
w2 = 1;
}
void ir_low() {
gr1 = 1;
ir_low2();
}
void gain_lf_func() {
if (gain_lf < -79) {
gain_lf = -79;
}
if (gain_lf > 15) {
gain_lf = 15;
}
}
void gain_rf_func() {
if (gain_rf < -79) {
gain_rf = -79;
}
if (gain_rf > 15) {
gain_rf = 15;
}
}
void gain_lr_func() {
if (gain_lr < -79) {
gain_lr = -79;
}
if (gain_lr > 15) {
gain_lr = 15;
}
}
void gain_rr_func() {
if (gain_rr < -79) {
gain_rr = -79;
}
if (gain_rr > 15) {
gain_rr = 15;
}
}
void gain_sub_func() {
if (gain_sub < -79) {
gain_sub = -79;
}
if (gain_sub > 15) {
gain_sub = 15;
}
}
void gain_lon_func() {
if (gain_lon < 0) {
gain_lon = 0;
}
if (gain_lon > 20) {
gain_lon = 20;
}
}
void f_lon_func() {
if (f_lon < 0) {
f_lon = 0;
}
if (f_lon > 3) {
f_lon = 3;
}
}
void f_sub_func() {
if (f_sub < 0) {
f_sub = 0;
}
if (f_sub > 4) {
f_sub = 4;
}
}
void f_treb_func() {
if (f_treb < 0) {
f_treb = 0;
}
if (f_treb > 3) {
f_treb = 3;
}
}
void f_mid_func() {
if (f_mid < 0) {
f_mid = 0;
}
if (f_mid > 3) {
f_mid = 3;
}
}
void f_bass_func() {
if (f_bass < 0) {
f_bass = 0;
}
if (f_bass > 3) {
f_bass = 3;
}
}
void q_mid_func() {
if (q_mid < 0) {
q_mid = 0;
}
if (q_mid > 3) {
q_mid = 3;
}
}
void q_bass_func() {
if (q_bass < 0) {
q_bass = 0;
}
if (q_bass > 3) {
q_bass = 3;
}
}
void q_treb_func() {
if (q_treb < 0) {
q_treb = 0;
}
if (q_treb > 1) {
q_treb = 1;
}
}
void bass_func() {
if (bass_reg < -20) {
bass_reg = -20;
}
if (bass_reg > 20) {
bass_reg = 20;
}
}
void mid_func() {
if (mid_reg < -20) {
mid_reg = -20;
}
if (mid_reg > 20) {
mid_reg = 20;
}
}
void treb_func() {
if (treb_reg < -20) {
treb_reg = -20;
}
if (treb_reg > 20) {
treb_reg = 20;
}
}
void gain_func() {
if (gain0 < 0) {
gain0 = 0;
}
if (gain0 > 20) {
gain0 = 20;
}
}
void vol_func() {
if (vol_reg < -79) {
vol_reg = -79;
}
if (vol_reg > 15) {
vol_reg = 15;
}
}
убран энкодер и кнопки .протестировано
forum.rcl-radio.ru → Библиотеки → BD37534FV - Sound Processor with Built-in 3-band Equalizer
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|