Re: PT2314
Я не вижу ошибок, опубликуйте весь скетч который Вы используете.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Библиотеки → PT2314
Я не вижу ошибок, опубликуйте весь скетч который Вы используете.
#define IR_1 0x807F6897 // Кнопка вверх
#define IR_2 0x807F58A7 // Кнопка вниз
#define IR_3 0x807F0AF5 // Кнопка >
#define IR_4 0x807F8A75 // Кнопка <
#define IR_5 0x807F9867 // Кнопка IN
#define IR_6 0x807FC837 // Кнопка SET
#define IR_7 0x807F827D // Кнопка MUTE
#define IR_8 0x807F02FD // Кнопка STANDBY (POWER)
#define IR_9 0x807F728D // Кнопка сон 10 минут
//#define IR_10 0x807FB04F // Кнопка сон 20 минут
//#define IR_11 0x807F30CF // Кнопка сон 30 минут
#define BRIG 100 // Яркость подсветки экрана в режиме POWER OFF (0...255)
#include <Wire.h>
#include <PT2314.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=434&download=1
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>
#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
DS3231 clock; RTCDateTime DateTime;
unsigned long times_son;
bool son_k,son;
PT2314 pt;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
IRrecv irrecv(12); // указываем вывод модуля IR приемника
Encoder myEnc(8, 9);// DT, CLK
decode_results ir;
byte v1[8] = {0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111};
byte v2[8] = {0b00111, 0b00111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};
byte v3[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte v4[8] = {0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte v5[8] = {0b11100, 0b11100, 0b00000, 0b00000, 0b00000, 0b00000, 0b11100, 0b11100};
byte v6[8] = {0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100};
byte v7[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00111, 0b00111};
byte v8[8] = {0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};
byte a[6], d1, d2, d3, d4, d5, d6, e1, e2, e3, w, w2, i, www, power, save, gr1, gr2;
int menu, menu0, menu1 = 1, menu2 = 0, vol, bass, treb, att_l, att_r, in, loud_on, gain0, gain1, gain2, gain3, gain4, mute, mute1, mute2, brig, hour, minut, secon;
unsigned long times, oldPosition = -999, newPosition;
void setup() {
irrecv.enableIRIn(); lcd.init(); lcd.backlight(); clock.begin(); Serial.begin(9600);
pinMode(10, INPUT); // МЕНЮ КНОПКА SW энкодера
pinMode(2, INPUT); // КНОПКА SET
pinMode(3, INPUT); // КНОПКА IN
pinMode(4, INPUT); // КНОПКА MUTE
pinMode(5, INPUT); // КНОПКА STANDBY
pinMode(7, OUTPUT); // ВЫХОД УПРАВЛЕНИЯ STANDBY
pinMode(6, OUTPUT); // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
analogWrite(6, 255);
lcd.setCursor(0, 0); lcd.print("AmplifieR ClassA"); lcd.setCursor(0, 1); lcd.print(" JLH 1969"); delay(2000); lcd.clear();
MsTimer2::set(1, to_Timer); MsTimer2::start();
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
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);
if (EEPROM.read(100) != 0) {
for (int i = 0; i < 101; i++) {
EEPROM.update(i, 0); // очистка памяти при первом включении
}
}
vol = EEPROM.read(0); treb = EEPROM.read(1) - 7; bass = EEPROM.read(2) - 7; in = EEPROM.read(3);
att_l = EEPROM.read(4); att_r = EEPROM.read(5); gain1 = EEPROM.read(6); gain2 = EEPROM.read(7);
gain3 = EEPROM.read(8); gain4 = EEPROM.read(9); loud_on = EEPROM.read(10); brig = EEPROM.read(11);
audio();
analogWrite(6, brig);
}
void loop() {
DateTime = clock.getDateTime(); hour = DateTime.hour; minut = DateTime.minute; secon = DateTime.second;
////////////////////// IR ///////////////////////////////////////////////////////////////
if ( irrecv.decode( &ir )) {
Serial.print("0x"); // IR приемник - чтение, в мониторе порта отображаются коды кнопок
Serial.println( ir.value, HEX);
irrecv.resume();
times = millis();
w = 1;
}
if (ir.value == 0) {
gr1 = 0; // запрет нажатий не активных кнопок пульта
gr2 = 0;
}
if (mute == 0 && power == 0) {
if (ir.value == IR_6 && menu1 == 1) {
menu1 = 0;
menu2 = 1;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("SYSTEM");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (ir.value == IR_6 && menu2 == 1) {
menu1 = 1;
menu2 = 0;
menu = 0;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("AUDIO");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (ir.value == IR_1 && menu1 == 1) {
menu++; //меню 1
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu > 2) {
menu = 0;
}
}
if (ir.value == IR_2 && menu1 == 1) {
menu--; //меню 1
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu < 0) {
menu = 2;
}
}
if (ir.value == IR_1 && menu2 == 1) {
menu0++; //меню 2
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 > 4) {
menu0 = 0;
}
}
if (ir.value == IR_2 && menu2 == 1) {
menu0--; //меню 2
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 < 0) {
menu0 = 4;
}
}
if (ir.value == IR_5) {
in++; // IN
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (in > 3) {
in = 0;
} lcd.setCursor(4, 0);
lcd.print("INPUT ");
lcd.print(in + 1);
audio();
delay(1000);
lcd.clear();
}
}
if (ir.value == IR_7 && mute == 0 && power == 0) {
mute = 1; // MUTE
pt.setAttR(31);
pt.setAttL(31);
gr1 = 0;
gr2 = 0;
cl();
lcd.setCursor(6, 0);
lcd.print("MUTE");
menu1 = 100;
menu2 = 100;
delay(500);
}
if (ir.value == IR_7 && mute == 1 && power == 0) {
mute = 0; // MUTE
cl();
menu1 = 1;
menu = 0;
gr1 = 0;
gr2 = 0;
cl();
audio();
}
if (ir.value == IR_8 && power == 0) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
gr1 = 0;
gr2 = 0;
cl();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(2000);
lcd.clear();
}
if (ir.value == IR_8 && power == 1) {
power = 0; // power on
gr1 = 0;
gr2 = 0;
cl();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(2000);
lcd.clear();
}
if (ir.value == IR_9) {
son_k = 1;
}
if (son_k == 0) {
times_son = millis();
}
if (millis() - times_son > 600000) { //Время таймера в милисек
son = 1;
}
if ((ir.value == IR_8 && power == 0) || son == 1) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
audio();
gr1 = 0;
gr2 = 0;
cl();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(3000);
lcd.clear();
}
if (ir.value == IR_8 && power == 1) {
son = 0; // power on
son_k = 0;
times_son = millis();
power = 0;
gr1 = 0;
gr2 = 0;
cl();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(3000);
lcd.clear();
}
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// УПРАВЛЕНИЕ //////////////////////////////////////////////
if (mute == 0 && power == 0) {
if (digitalRead(2) == HIGH && menu1 == 1) {
menu1 = 0;
menu2 = 1;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("SYSTEM");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (digitalRead(2) == HIGH && menu2 == 1) {
menu1 = 1;
menu2 = 0;
menu = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("AUDIO");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (digitalRead(10) == LOW && menu1 == 1) {
menu++; //меню 1
cl();
times = millis();
w = 1;
w2 = 1;
if (menu > 2) {
menu = 0;
}
}
if (digitalRead(10) == LOW && menu2 == 1) {
menu0++; //меню 2
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 > 4) {
menu0 = 0;
}
}
if (digitalRead(3) == HIGH) {
in++; // IN
cl();;
times = millis();
w = 1;
w2 = 1;
if (in > 3) {
in = 0;
} lcd.setCursor(4, 0);
lcd.print("INPUT ");
lcd.print(in + 1);
audio();
delay(1000);
lcd.clear();
}
}
if (digitalRead(4) == HIGH && mute == 0 && power == 0) {
mute = 1; // MUTE
pt.setAttR(31);
pt.setAttL(31);
cl();
lcd.setCursor(6, 0);
lcd.print("MUTE");
menu1 = 100;
menu2 = 100;
delay(500);
}
if (digitalRead(4) == HIGH && mute == 1 && power == 0) {
mute = 0; // MUTE
cl();
menu1 = 1;
menu = 0;
cl();
audio();
}
if (digitalRead(5) == HIGH && power == 0) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(3000);
lcd.clear();
}
if (digitalRead(5) == HIGH && power == 1) {
power = 0; // power on
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(3000);
lcd.clear();
}
if (power == 0) {
digitalWrite(7, HIGH);
}
//if(power==0){digitalWrite(7,LOW);}// инверсия выхода STANDBY
if (save == 1 && w2 == 1) {
save = 0; w2 = 0;
EEPROM.update(0, vol); EEPROM.update(1, treb + 7); EEPROM.update(2, bass + 7); EEPROM.update(3, in);
EEPROM.update(4, att_l); EEPROM.update(5, att_r); EEPROM.update(6, gain1); EEPROM.update(7, gain2);
EEPROM.update(8, gain3); EEPROM.update(9, gain4); EEPROM.update(10, loud_on); EEPROM.update(11, brig);
}
/////////////////////////////////////////////////////////////////////////////////////////
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if (menu == 0 && menu1 == 1) {
if (ir.value == IR_3) {
vol++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
vol++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == IR_4) {
vol--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
vol--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
vol = vol + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
a[0] = vol / 10; a[1] = vol % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("IN"); lcd.print(in + 1); lcd.print(" VOL");
if (vol < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BASS ///////////////////////////////////////////////////////////////////
if (menu == 1 && menu1 == 1) {
if (ir.value == IR_3) {
bass++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
bass++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == IR_4) {
bass--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
bass--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
bass = bass + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
a[0] = abs(bass * 2) / 10; a[1] = abs(bass * 2) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("BASS dB");
if (bass < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if (menu == 2 && menu1 == 1) {
if (ir.value == IR_3) {
treb++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
treb++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == IR_4) {
treb--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
treb--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
treb = treb + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
a[0] = abs(treb * 2) / 10; a[1] = abs(treb * 2) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("TREBLE dB");
if (treb < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if (menu0 == 0 && menu2 == 1) {
if (ir.value == IR_3) {
att_l++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
att_l++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == IR_4) {
att_l--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
att_l--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
att_l = att_l + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
a[0] = abs(att_l) / 10; a[1] = abs(att_l) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("ATT_L");
lcd.setCursor(0, 1); lcd.print(-att_l * 1.25, 2); lcd.print(" "); lcd.setCursor(6, 1); lcd.print("dB");
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if (menu0 == 1 && menu2 == 1) {
if (ir.value == IR_3) {
att_r++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
att_r++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == IR_4) {
att_r--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
att_r--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
att_r = att_r + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
a[0] = abs(att_r) / 10; a[1] = abs(att_r) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("ATT_R");
lcd.setCursor(0, 1); lcd.print(-att_r * 1.25, 2); lcd.print(" "); lcd.setCursor(6, 1); lcd.print("dB");
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// INPUT GAIN ///////////////////////////////////////////////////////////////////
if (menu0 == 2 && menu2 == 1) {
switch (in) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
case 3: gain0 = gain4; break;
}
if (ir.value == IR_3) {
gain0++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain0++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == IR_4) {
gain0--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain0--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
gain0 = gain0 + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
www = 1;
w = 1;
w2 = 1;
gain_func();
}
switch (in) {
case 0: gain1 = gain0; break;
case 1: gain2 = gain0; break;
case 2: gain3 = gain0; break;
case 3: gain4 = gain0; break;
}
a[0] = abs(gain0);
for (i = 0; i < 1; i++) {
switch (i) {
case 0: e1 = 13, e2 = 14, e3 = 15;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 1); lcd.print("GAIN "); lcd.print(gain0 * 3.75, 2); lcd.print(" "); lcd.setCursor(10, 1); lcd.print("dB");
if (www == 1) {
audio();
www = 0;
}
lcd.setCursor(0, 0); lcd.print("INPUT "); lcd.print(in + 1);
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// LOUDNESS ///////////////////////////////////////////////////////////////////
if (menu0 == 3 && menu2 == 1) {
if (ir.value == IR_3) {
loud_on++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
loud_on++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == IR_4) {
loud_on--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
loud_on--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
loud_on = loud_on + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
};
audio();
}
if (loud_on == 1) {
lcd.setCursor(2, 0);
lcd.print("LOUDNESS ON ");
}
else {
lcd.setCursor(2, 0);
lcd.print("LOUDNESS OFF");
}
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BRIGHTNESS ///////////////////////////////////////////////////////////////////
if (menu0 == 4 && menu2 == 1) {
if (ir.value == IR_3) {
brig++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
brig++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == IR_4) {
brig--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
brig--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
brig = brig + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
a[0] = abs(brig) / 100; a[1] = abs(brig) / 10 % 10; a[2] = abs(brig) % 10;
for (i = 0; i < 3; i++) {
switch (i) {
case 0: e1 = 7, e2 = 8, e3 = 9; break;
case 1: e1 = 10, e2 = 11, e3 = 12; break;
case 2: e1 = 13, e2 = 14, e3 = 15; break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("BRIGHT");
lcd.setCursor(0, 1); lcd.print(brig * 100 / 255); lcd.print(" "); lcd.setCursor(4, 1); lcd.print("%");
}
////////////////////////////////////////////////////////////////////////////////////////////
if (millis() - times > 10000 && w == 1 && mute == 0 && power == 0) {
w = 0;
menu2 = 0;
menu1 = 1;
menu = 0;
cl();
}
/////////////////// ЧАСЫ ///////////////////////////////////////////////////////////////////
if (power == 1) {
digitalWrite(7, LOW);
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 (i = 0; i < 4; i++) {
switch (i) {
case 0: e1 = 0, e2 = 1, e3 = 2; break;
case 1: e1 = 3, e2 = 4, e3 = 5; break;
case 2: e1 = 7, e2 = 8, e3 = 9; break;
case 3: e1 = 10, e2 = 11, e3 = 12; break;
} 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) == HIGH) {
hour++;
if (hour > 23) {
hour = 0;
} clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
if (digitalRead(10) == LOW && digitalRead(3) == HIGH) {
minut++;
if (minut > 59) {
minut = 0;
} clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
if (digitalRead(10) == LOW && digitalRead(4) == HIGH) {
secon = 0;
clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
}// loop
void times_f() {
lcd.setCursor(0, 1);
lcd.print(DateTime.hour / 10);
lcd.print(DateTime.hour % 10);
lcd.print(":");
lcd.print(DateTime.minute / 10);
lcd.print(DateTime.minute % 10);
lcd.print(":");
lcd.print(DateTime.second / 10);
lcd.print(DateTime.second % 10);
}
void brig_func() {
if (brig < 0) {
brig = 0;
} if (brig > 255) {
brig = 255;
}
}
void gain_func() {
if (gain0 < 0) {
gain0 = 0;
} if (gain0 > 3) {
gain0 = 3;
}
}
void att_r_func() {
if (att_r < 0) {
att_r = 0;
} if (att_r > 24) {
att_r = 24;
}
}
void att_l_func() {
if (att_l < 0) {
att_l = 0;
} if (att_l > 24) {
att_l = 24;
}
}
void treb_func() {
if (treb < -7) {
treb = -7;
} if (treb > 7) {
treb = 7;
}
}
void bass_func() {
if (bass < -7) {
bass = -7;
} if (bass > 7) {
bass = 7;
}
}
void vol_func() {
if (vol < 0) {
vol = 0;
} if (vol > 56) {
vol = 56;
}
}
void cl() {
ir.value = 0;
delay(300);
lcd.clear();
}
void cl1() {
ir.value = 0;
delay(200);
}
void audio() {
pt.setVolume(vol); // int 0...56 === -70...0 dB step 1.25 dB
pt.setAttL(att_l); // int 0...24 === 0...-30 db step 1.25 dB > int 31 === mute on
pt.setAttR(att_r); // int 0...24 === 0...-30 dB step 1.25 dB > int 31 === mute on
pt.setSwitch(in, loud_on, gain0);
// input int 0..3 === IN 1...4
// loudness int 0...1 === 1-on 0-off
// input gain int 0...3 === 0...11.25dB step 3.75 dB
pt.setBass(bass); // int -7...+7 === -14...+14 dB step 2 dB
pt.setTreble(treb); // int -7...+7 === -14...+14 dB step 2 dB
}
void to_Timer() {
newPosition = myEnc.read() / 4;
}
void digit() {
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);
}
#define IR_1 0x807F6897 // Кнопка вверх
#define IR_2 0x807F58A7 // Кнопка вниз
#define IR_3 0x807F0AF5 // Кнопка >
#define IR_4 0x807F8A75 // Кнопка <
#define IR_5 0x807F9867 // Кнопка IN
#define IR_6 0x807FC837 // Кнопка SET
#define IR_7 0x807F827D // Кнопка MUTE
#define IR_8 0x807F02FD // Кнопка STANDBY (POWER)
#define IR_9 0x807F728D // Кнопка сон 10 минут
//#define IR_10 0x807FB04F // Кнопка сон 20 минут
//#define IR_11 0x807F30CF // Кнопка сон 30 минут
#define BRIG 100 // Яркость подсветки экрана в режиме POWER OFF (0...255)
#include <Wire.h>
#include <PT2314.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=434&download=1
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>
#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
DS3231 clock; RTCDateTime DateTime;
unsigned long times_son;
bool son_k,son;
PT2314 pt;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
IRrecv irrecv(12); // указываем вывод модуля IR приемника
Encoder myEnc(8, 9);// DT, CLK
decode_results ir;
byte v1[8] = {0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111};
byte v2[8] = {0b00111, 0b00111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};
byte v3[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte v4[8] = {0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte v5[8] = {0b11100, 0b11100, 0b00000, 0b00000, 0b00000, 0b00000, 0b11100, 0b11100};
byte v6[8] = {0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100};
byte v7[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00111, 0b00111};
byte v8[8] = {0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};
byte a[6], d1, d2, d3, d4, d5, d6, e1, e2, e3, w, w2, i, www, power, save, gr1, gr2;
int menu, menu0, menu1 = 1, menu2 = 0, vol, bass, treb, att_l, att_r, in, loud_on, gain0, gain1, gain2, gain3, gain4, mute, mute1, mute2, brig, hour, minut, secon;
unsigned long times, oldPosition = -999, newPosition;
void setup() {
irrecv.enableIRIn(); lcd.init(); lcd.backlight(); clock.begin(); Serial.begin(9600);
pinMode(10, INPUT); // МЕНЮ КНОПКА SW энкодера
pinMode(2, INPUT); // КНОПКА SET
pinMode(3, INPUT); // КНОПКА IN
pinMode(4, INPUT); // КНОПКА MUTE
pinMode(5, INPUT); // КНОПКА STANDBY
pinMode(7, OUTPUT); // ВЫХОД УПРАВЛЕНИЯ STANDBY
pinMode(6, OUTPUT); // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
analogWrite(6, 255);
lcd.setCursor(0, 0); lcd.print("AmplifieR ClassA"); lcd.setCursor(0, 1); lcd.print(" JLH 1969"); delay(2000); lcd.clear();
MsTimer2::set(1, to_Timer); MsTimer2::start();
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
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);
if (EEPROM.read(100) != 0) {
for (int i = 0; i < 101; i++) {
EEPROM.update(i, 0); // очистка памяти при первом включении
}
}
vol = EEPROM.read(0); treb = EEPROM.read(1) - 7; bass = EEPROM.read(2) - 7; in = EEPROM.read(3);
att_l = EEPROM.read(4); att_r = EEPROM.read(5); gain1 = EEPROM.read(6); gain2 = EEPROM.read(7);
gain3 = EEPROM.read(8); gain4 = EEPROM.read(9); loud_on = EEPROM.read(10); brig = EEPROM.read(11);
audio();
analogWrite(6, brig);
}
void loop() {
DateTime = clock.getDateTime(); hour = DateTime.hour; minut = DateTime.minute; secon = DateTime.second;
////////////////////// IR ///////////////////////////////////////////////////////////////
if ( irrecv.decode( &ir )) {
Serial.print("0x"); // IR приемник - чтение, в мониторе порта отображаются коды кнопок
Serial.println( ir.value, HEX);
irrecv.resume();
times = millis();
w = 1;
}
if (ir.value == 0) {
gr1 = 0; // запрет нажатий не активных кнопок пульта
gr2 = 0;
}
if (mute == 0 && power == 0) {
if (ir.value == IR_6 && menu1 == 1) {
menu1 = 0;
menu2 = 1;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("SYSTEM");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (ir.value == IR_6 && menu2 == 1) {
menu1 = 1;
menu2 = 0;
menu = 0;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("AUDIO");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (ir.value == IR_1 && menu1 == 1) {
menu++; //меню 1
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu > 2) {
menu = 0;
}
}
if (ir.value == IR_2 && menu1 == 1) {
menu--; //меню 1
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu < 0) {
menu = 2;
}
}
if (ir.value == IR_1 && menu2 == 1) {
menu0++; //меню 2
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 > 4) {
menu0 = 0;
}
}
if (ir.value == IR_2 && menu2 == 1) {
menu0--; //меню 2
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 < 0) {
menu0 = 4;
}
}
if (ir.value == IR_5) {
in++; // IN
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (in > 3) {
in = 0;
} lcd.setCursor(4, 0);
lcd.print("INPUT ");
lcd.print(in + 1);
audio();
delay(1000);
lcd.clear();
}
}
if (ir.value == IR_7 && mute == 0 && power == 0) {
mute = 1; // MUTE
pt.setAttR(31);
pt.setAttL(31);
gr1 = 0;
gr2 = 0;
cl();
lcd.setCursor(6, 0);
lcd.print("MUTE");
menu1 = 100;
menu2 = 100;
delay(500);
}
if (ir.value == IR_7 && mute == 1 && power == 0) {
mute = 0; // MUTE
cl();
menu1 = 1;
menu = 0;
gr1 = 0;
gr2 = 0;
cl();
audio();
}
if (ir.value == IR_8 && power == 0) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
gr1 = 0;
gr2 = 0;
cl();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(2000);
lcd.clear();
}
if (ir.value == IR_8 && power == 1) {
power = 0; // power on
gr1 = 0;
gr2 = 0;
cl();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(2000);
lcd.clear();
}
if (ir.value == IR_9) {
cl();
son_k = 1;
}
if (son_k == 0) {
times_son = millis();
}
if (millis() - times_son > 600000) { //Время таймера в милисек
son = 1;
}
if ((ir.value == IR_8 && power == 0) || son == 1) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
audio();
gr1 = 0;
gr2 = 0;
cl();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(3000);
lcd.clear();
}
if (ir.value == IR_8 && power == 1) {
son = 0; // power on
son_k = 0;
times_son = millis();
power = 0;
gr1 = 0;
gr2 = 0;
cl();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(3000);
lcd.clear();
}
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// УПРАВЛЕНИЕ //////////////////////////////////////////////
if (mute == 0 && power == 0) {
if (digitalRead(2) == HIGH && menu1 == 1) {
menu1 = 0;
menu2 = 1;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("SYSTEM");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (digitalRead(2) == HIGH && menu2 == 1) {
menu1 = 1;
menu2 = 0;
menu = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("AUDIO");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (digitalRead(10) == LOW && menu1 == 1) {
menu++; //меню 1
cl();
times = millis();
w = 1;
w2 = 1;
if (menu > 2) {
menu = 0;
}
}
if (digitalRead(10) == LOW && menu2 == 1) {
menu0++; //меню 2
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 > 4) {
menu0 = 0;
}
}
if (digitalRead(3) == HIGH) {
in++; // IN
cl();;
times = millis();
w = 1;
w2 = 1;
if (in > 3) {
in = 0;
} lcd.setCursor(4, 0);
lcd.print("INPUT ");
lcd.print(in + 1);
audio();
delay(1000);
lcd.clear();
}
}
if (digitalRead(4) == HIGH && mute == 0 && power == 0) {
mute = 1; // MUTE
pt.setAttR(31);
pt.setAttL(31);
cl();
lcd.setCursor(6, 0);
lcd.print("MUTE");
menu1 = 100;
menu2 = 100;
delay(500);
}
if (digitalRead(4) == HIGH && mute == 1 && power == 0) {
mute = 0; // MUTE
cl();
menu1 = 1;
menu = 0;
cl();
audio();
}
if (digitalRead(5) == HIGH && power == 0) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(3000);
lcd.clear();
}
if (digitalRead(5) == HIGH && power == 1) {
power = 0; // power on
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(3000);
lcd.clear();
}
if (power == 0) {
digitalWrite(7, HIGH);
}
//if(power==0){digitalWrite(7,LOW);}// инверсия выхода STANDBY
if (save == 1 && w2 == 1) {
save = 0; w2 = 0;
EEPROM.update(0, vol); EEPROM.update(1, treb + 7); EEPROM.update(2, bass + 7); EEPROM.update(3, in);
EEPROM.update(4, att_l); EEPROM.update(5, att_r); EEPROM.update(6, gain1); EEPROM.update(7, gain2);
EEPROM.update(8, gain3); EEPROM.update(9, gain4); EEPROM.update(10, loud_on); EEPROM.update(11, brig);
}
/////////////////////////////////////////////////////////////////////////////////////////
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if (menu == 0 && menu1 == 1) {
if (ir.value == IR_3) {
vol++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
vol++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == IR_4) {
vol--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
vol--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
vol = vol + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
a[0] = vol / 10; a[1] = vol % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("IN"); lcd.print(in + 1); lcd.print(" VOL");
if (vol < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BASS ///////////////////////////////////////////////////////////////////
if (menu == 1 && menu1 == 1) {
if (ir.value == IR_3) {
bass++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
bass++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == IR_4) {
bass--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
bass--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
bass = bass + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
a[0] = abs(bass * 2) / 10; a[1] = abs(bass * 2) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("BASS dB");
if (bass < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if (menu == 2 && menu1 == 1) {
if (ir.value == IR_3) {
treb++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
treb++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == IR_4) {
treb--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
treb--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
treb = treb + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
a[0] = abs(treb * 2) / 10; a[1] = abs(treb * 2) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("TREBLE dB");
if (treb < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if (menu0 == 0 && menu2 == 1) {
if (ir.value == IR_3) {
att_l++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
att_l++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == IR_4) {
att_l--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
att_l--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
att_l = att_l + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
a[0] = abs(att_l) / 10; a[1] = abs(att_l) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("ATT_L");
lcd.setCursor(0, 1); lcd.print(-att_l * 1.25, 2); lcd.print(" "); lcd.setCursor(6, 1); lcd.print("dB");
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if (menu0 == 1 && menu2 == 1) {
if (ir.value == IR_3) {
att_r++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
att_r++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == IR_4) {
att_r--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
att_r--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
att_r = att_r + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
a[0] = abs(att_r) / 10; a[1] = abs(att_r) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("ATT_R");
lcd.setCursor(0, 1); lcd.print(-att_r * 1.25, 2); lcd.print(" "); lcd.setCursor(6, 1); lcd.print("dB");
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// INPUT GAIN ///////////////////////////////////////////////////////////////////
if (menu0 == 2 && menu2 == 1) {
switch (in) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
case 3: gain0 = gain4; break;
}
if (ir.value == IR_3) {
gain0++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain0++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == IR_4) {
gain0--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain0--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
gain0 = gain0 + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
www = 1;
w = 1;
w2 = 1;
gain_func();
}
switch (in) {
case 0: gain1 = gain0; break;
case 1: gain2 = gain0; break;
case 2: gain3 = gain0; break;
case 3: gain4 = gain0; break;
}
a[0] = abs(gain0);
for (i = 0; i < 1; i++) {
switch (i) {
case 0: e1 = 13, e2 = 14, e3 = 15;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 1); lcd.print("GAIN "); lcd.print(gain0 * 3.75, 2); lcd.print(" "); lcd.setCursor(10, 1); lcd.print("dB");
if (www == 1) {
audio();
www = 0;
}
lcd.setCursor(0, 0); lcd.print("INPUT "); lcd.print(in + 1);
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// LOUDNESS ///////////////////////////////////////////////////////////////////
if (menu0 == 3 && menu2 == 1) {
if (ir.value == IR_3) {
loud_on++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
loud_on++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == IR_4) {
loud_on--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
loud_on--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
loud_on = loud_on + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
};
audio();
}
if (loud_on == 1) {
lcd.setCursor(2, 0);
lcd.print("LOUDNESS ON ");
}
else {
lcd.setCursor(2, 0);
lcd.print("LOUDNESS OFF");
}
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BRIGHTNESS ///////////////////////////////////////////////////////////////////
if (menu0 == 4 && menu2 == 1) {
if (ir.value == IR_3) {
brig++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
brig++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == IR_4) {
brig--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
brig--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
brig = brig + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
a[0] = abs(brig) / 100; a[1] = abs(brig) / 10 % 10; a[2] = abs(brig) % 10;
for (i = 0; i < 3; i++) {
switch (i) {
case 0: e1 = 7, e2 = 8, e3 = 9; break;
case 1: e1 = 10, e2 = 11, e3 = 12; break;
case 2: e1 = 13, e2 = 14, e3 = 15; break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("BRIGHT");
lcd.setCursor(0, 1); lcd.print(brig * 100 / 255); lcd.print(" "); lcd.setCursor(4, 1); lcd.print("%");
}
////////////////////////////////////////////////////////////////////////////////////////////
if (millis() - times > 10000 && w == 1 && mute == 0 && power == 0) {
w = 0;
menu2 = 0;
menu1 = 1;
menu = 0;
cl();
}
/////////////////// ЧАСЫ ///////////////////////////////////////////////////////////////////
if (power == 1) {
digitalWrite(7, LOW);
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 (i = 0; i < 4; i++) {
switch (i) {
case 0: e1 = 0, e2 = 1, e3 = 2; break;
case 1: e1 = 3, e2 = 4, e3 = 5; break;
case 2: e1 = 7, e2 = 8, e3 = 9; break;
case 3: e1 = 10, e2 = 11, e3 = 12; break;
} 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) == HIGH) {
hour++;
if (hour > 23) {
hour = 0;
} clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
if (digitalRead(10) == LOW && digitalRead(3) == HIGH) {
minut++;
if (minut > 59) {
minut = 0;
} clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
if (digitalRead(10) == LOW && digitalRead(4) == HIGH) {
secon = 0;
clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
}// loop
void times_f() {
lcd.setCursor(0, 1);
lcd.print(DateTime.hour / 10);
lcd.print(DateTime.hour % 10);
lcd.print(":");
lcd.print(DateTime.minute / 10);
lcd.print(DateTime.minute % 10);
lcd.print(":");
lcd.print(DateTime.second / 10);
lcd.print(DateTime.second % 10);
}
void brig_func() {
if (brig < 0) {
brig = 0;
} if (brig > 255) {
brig = 255;
}
}
void gain_func() {
if (gain0 < 0) {
gain0 = 0;
} if (gain0 > 3) {
gain0 = 3;
}
}
void att_r_func() {
if (att_r < 0) {
att_r = 0;
} if (att_r > 24) {
att_r = 24;
}
}
void att_l_func() {
if (att_l < 0) {
att_l = 0;
} if (att_l > 24) {
att_l = 24;
}
}
void treb_func() {
if (treb < -7) {
treb = -7;
} if (treb > 7) {
treb = 7;
}
}
void bass_func() {
if (bass < -7) {
bass = -7;
} if (bass > 7) {
bass = 7;
}
}
void vol_func() {
if (vol < 0) {
vol = 0;
} if (vol > 56) {
vol = 56;
}
}
void cl() {
ir.value = 0;
delay(300);
lcd.clear();
}
void cl1() {
ir.value = 0;
delay(200);
}
void audio() {
pt.setVolume(vol); // int 0...56 === -70...0 dB step 1.25 dB
pt.setAttL(att_l); // int 0...24 === 0...-30 db step 1.25 dB > int 31 === mute on
pt.setAttR(att_r); // int 0...24 === 0...-30 dB step 1.25 dB > int 31 === mute on
pt.setSwitch(in, loud_on, gain0);
// input int 0..3 === IN 1...4
// loudness int 0...1 === 1-on 0-off
// input gain int 0...3 === 0...11.25dB step 3.75 dB
pt.setBass(bass); // int -7...+7 === -14...+14 dB step 2 dB
pt.setTreble(treb); // int -7...+7 === -14...+14 dB step 2 dB
}
void to_Timer() {
newPosition = myEnc.read() / 4;
}
void digit() {
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);
}
Спасибо пробую !
Протестировал в железе, все работает:
#define IR_1 0x807F6897 // Кнопка вверх
#define IR_2 0x807F58A7 // Кнопка вниз
#define IR_3 0x807F0AF5 // Кнопка >
#define IR_4 0x807F8A75 // Кнопка <
#define IR_5 0x807F9867 // Кнопка IN
#define IR_6 0x807FC837 // Кнопка SET
#define IR_7 0x807F827D // Кнопка MUTE
#define IR_8 0x807F02FD // Кнопка STANDBY (POWER)
#define IR_9 0x807F728D // Кнопка сон 10 минут
//#define IR_10 0x807FB04F // Кнопка сон 20 минут
//#define IR_11 0x807F30CF // Кнопка сон 30 минут
#define BRIG 100 // Яркость подсветки экрана в режиме POWER OFF (0...255)
#include <Wire.h>
#include <PT2314.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=434&download=1
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>
#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
DS3231 clock; RTCDateTime DateTime;
unsigned long times_son;
bool son_k,son;
PT2314 pt;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
IRrecv irrecv(12); // указываем вывод модуля IR приемника
Encoder myEnc(8, 9);// DT, CLK
decode_results ir;
byte v1[8] = {0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111, 0b00111};
byte v2[8] = {0b00111, 0b00111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};
byte v3[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte v4[8] = {0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte v5[8] = {0b11100, 0b11100, 0b00000, 0b00000, 0b00000, 0b00000, 0b11100, 0b11100};
byte v6[8] = {0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100};
byte v7[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00111, 0b00111};
byte v8[8] = {0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};
byte a[6], d1, d2, d3, d4, d5, d6, e1, e2, e3, w, w2, i, www, power, save, gr1, gr2;
int menu, menu0, menu1 = 1, menu2 = 0, vol, bass, treb, att_l, att_r, in, loud_on, gain0, gain1, gain2, gain3, gain4, mute, mute1, mute2, brig, hour, minut, secon;
unsigned long times, oldPosition = -999, newPosition;
void setup() {
irrecv.enableIRIn(); lcd.init(); lcd.backlight(); clock.begin(); Serial.begin(9600);
pinMode(10, INPUT); // МЕНЮ КНОПКА SW энкодера
pinMode(2, INPUT); // КНОПКА SET
pinMode(3, INPUT); // КНОПКА IN
pinMode(4, INPUT); // КНОПКА MUTE
pinMode(5, INPUT); // КНОПКА STANDBY
pinMode(7, OUTPUT); // ВЫХОД УПРАВЛЕНИЯ STANDBY
pinMode(6, OUTPUT); // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
analogWrite(6, 255);
lcd.setCursor(0, 0); lcd.print("AmplifieR ClassA"); lcd.setCursor(0, 1); lcd.print(" JLH 1969"); delay(2000); lcd.clear();
MsTimer2::set(1, to_Timer); MsTimer2::start();
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
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);
if (EEPROM.read(100) != 0) {
for (int i = 0; i < 101; i++) {
EEPROM.update(i, 0); // очистка памяти при первом включении
}
}
vol = EEPROM.read(0); treb = EEPROM.read(1) - 7; bass = EEPROM.read(2) - 7; in = EEPROM.read(3);
att_l = EEPROM.read(4); att_r = EEPROM.read(5); gain1 = EEPROM.read(6); gain2 = EEPROM.read(7);
gain3 = EEPROM.read(8); gain4 = EEPROM.read(9); loud_on = EEPROM.read(10); brig = EEPROM.read(11);
audio();
analogWrite(6, brig);
}
void loop() {
DateTime = clock.getDateTime(); hour = DateTime.hour; minut = DateTime.minute; secon = DateTime.second;
////////////////////// IR ///////////////////////////////////////////////////////////////
if ( irrecv.decode( &ir )) {
Serial.print("0x"); // IR приемник - чтение, в мониторе порта отображаются коды кнопок
Serial.println( ir.value, HEX);
irrecv.resume();
times = millis();
w = 1;
}
if (ir.value == 0) {
gr1 = 0; // запрет нажатий не активных кнопок пульта
gr2 = 0;
}
if (mute == 0 && power == 0) {
if (ir.value == IR_6 && menu1 == 1) {
menu1 = 0;
menu2 = 1;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("SYSTEM");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (ir.value == IR_6 && menu2 == 1) {
menu1 = 1;
menu2 = 0;
menu = 0;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("AUDIO");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (ir.value == IR_1 && menu1 == 1) {
menu++; //меню 1
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu > 2) {
menu = 0;
}
}
if (ir.value == IR_2 && menu1 == 1) {
menu--; //меню 1
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu < 0) {
menu = 2;
}
}
if (ir.value == IR_1 && menu2 == 1) {
menu0++; //меню 2
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 > 4) {
menu0 = 0;
}
}
if (ir.value == IR_2 && menu2 == 1) {
menu0--; //меню 2
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 < 0) {
menu0 = 4;
}
}
if (ir.value == IR_5) {
in++; // IN
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
if (in > 3) {
in = 0;
} lcd.setCursor(4, 0);
lcd.print("INPUT ");
lcd.print(in + 1);
audio();
delay(1000);
lcd.clear();
}
}
if (ir.value == IR_7 && mute == 0 && power == 0) {
mute = 1; // MUTE
pt.setAttR(31);
pt.setAttL(31);
gr1 = 0;
gr2 = 0;
cl();
lcd.setCursor(6, 0);
lcd.print("MUTE");
menu1 = 100;
menu2 = 100;
delay(500);
}
if (ir.value == IR_7 && mute == 1 && power == 0) {
mute = 0; // MUTE
cl();
menu1 = 1;
menu = 0;
gr1 = 0;
gr2 = 0;
cl();
audio();
}
if (ir.value == IR_8 && power == 0) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
gr1 = 0;
gr2 = 0;
cl();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(2000);
lcd.clear();
}
if (ir.value == IR_8 && power == 1) {
gr1 = 0;
gr2 = 0;
cl();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(2000);
power = 0; // power on
lcd.clear();
}
if (ir.value == IR_9) {cl();son_k = 1;
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
lcd.setCursor(5, 1);
lcd.print("10 MIN");
delay(2000);
lcd.clear();
}
if (son_k == 0) {times_son = millis();}
if (millis() - times_son > 600000) { //Время таймера в милисек
son = 1;
}
if ((ir.value == IR_8 && power == 0) || son == 1) {
power = 1; // power off
son = 0; // power on
son_k = 0;
times_son = millis();
pt.setAttR(31);
pt.setAttL(31);
audio();
gr1 = 0;
gr2 = 0;
cl();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(3000);
lcd.clear();
}
if (ir.value == IR_8 && power == 1) {
power = 0;
gr1 = 0;
gr2 = 0;
cl();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(3000);
lcd.clear();
}
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// УПРАВЛЕНИЕ //////////////////////////////////////////////
if (mute == 0 && power == 0) {
if (digitalRead(2) == HIGH && menu1 == 1) {
menu1 = 0;
menu2 = 1;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("SYSTEM");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (digitalRead(2) == HIGH && menu2 == 1) {
menu1 = 1;
menu2 = 0;
menu = 0;
cl();
times = millis();
w = 1;
w2 = 1;
lcd.setCursor(3, 0);
lcd.print("AUDIO");
lcd.setCursor(6, 1);
lcd.print("SETTINGS");
delay(1000);
lcd.clear();
}
if (digitalRead(10) == LOW && menu1 == 1) {
menu++; //меню 1
cl();
times = millis();
w = 1;
w2 = 1;
if (menu > 2) {
menu = 0;
}
}
if (digitalRead(10) == LOW && menu2 == 1) {
menu0++; //меню 2
cl();
times = millis();
w = 1;
w2 = 1;
if (menu0 > 4) {
menu0 = 0;
}
}
if (digitalRead(3) == HIGH) {
in++; // IN
cl();;
times = millis();
w = 1;
w2 = 1;
if (in > 3) {
in = 0;
} lcd.setCursor(4, 0);
lcd.print("INPUT ");
lcd.print(in + 1);
audio();
delay(1000);
lcd.clear();
}
}
if (digitalRead(4) == HIGH && mute == 0 && power == 0) {
mute = 1; // MUTE
pt.setAttR(31);
pt.setAttL(31);
cl();
lcd.setCursor(6, 0);
lcd.print("MUTE");
menu1 = 100;
menu2 = 100;
delay(500);
}
if (digitalRead(4) == HIGH && mute == 1 && power == 0) {
mute = 0; // MUTE
cl();
menu1 = 1;
menu = 0;
cl();
audio();
}
if (digitalRead(5) == HIGH && power == 0) {
power = 1; // power off
pt.setAttR(31);
pt.setAttL(31);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER OFF");
menu0 = 0;
menu1 = 0;
menu2 = 0;
save = 1;
analogWrite(6, BRIG);
delay(3000);
lcd.clear();
}
if (digitalRead(5) == HIGH && power == 1) {
power = 0; // power on
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("POWER ON ");
menu1 = 1;
menu = 0;
myEnc.write(0);
audio();
analogWrite(6, brig);
delay(3000);
lcd.clear();
}
if (power == 0) {
digitalWrite(7, HIGH);
}
//if(power==0){digitalWrite(7,LOW);}// инверсия выхода STANDBY
if (save == 1 && w2 == 1) {
save = 0; w2 = 0;
EEPROM.update(0, vol); EEPROM.update(1, treb + 7); EEPROM.update(2, bass + 7); EEPROM.update(3, in);
EEPROM.update(4, att_l); EEPROM.update(5, att_r); EEPROM.update(6, gain1); EEPROM.update(7, gain2);
EEPROM.update(8, gain3); EEPROM.update(9, gain4); EEPROM.update(10, loud_on); EEPROM.update(11, brig);
}
/////////////////////////////////////////////////////////////////////////////////////////
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if (menu == 0 && menu1 == 1) {
if (ir.value == IR_3) {
vol++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
vol++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == IR_4) {
vol--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
vol--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
vol = vol + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
vol_func();
audio();
}
a[0] = vol / 10; a[1] = vol % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("IN"); lcd.print(in + 1); lcd.print(" VOL");
if (vol < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BASS ///////////////////////////////////////////////////////////////////
if (menu == 1 && menu1 == 1) {
if (ir.value == IR_3) {
bass++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
bass++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == IR_4) {
bass--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
bass--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
bass = bass + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
bass_func();
audio();
}
a[0] = abs(bass * 2) / 10; a[1] = abs(bass * 2) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("BASS dB");
if (bass < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if (menu == 2 && menu1 == 1) {
if (ir.value == IR_3) {
treb++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
treb++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == IR_4) {
treb--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
treb--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
treb = treb + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
treb_func();
audio();
}
a[0] = abs(treb * 2) / 10; a[1] = abs(treb * 2) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("TREBLE dB");
if (treb < 0) {
lcd.setCursor(9, 1);
lcd.write((uint8_t)8);
} else {
lcd.setCursor(9, 1);
lcd.print(" ");
}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if (menu0 == 0 && menu2 == 1) {
if (ir.value == IR_3) {
att_l++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
att_l++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == IR_4) {
att_l--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
att_l--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
att_l = att_l + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
att_l_func();
audio();
}
a[0] = abs(att_l) / 10; a[1] = abs(att_l) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("ATT_L");
lcd.setCursor(0, 1); lcd.print(-att_l * 1.25, 2); lcd.print(" "); lcd.setCursor(6, 1); lcd.print("dB");
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if (menu0 == 1 && menu2 == 1) {
if (ir.value == IR_3) {
att_r++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
att_r++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == IR_4) {
att_r--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
att_r--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
att_r = att_r + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
att_r_func();
audio();
}
a[0] = abs(att_r) / 10; a[1] = abs(att_r) % 10;
for (i = 0; i < 2; i++) {
switch (i) {
case 0: e1 = 10, e2 = 11, e3 = 12;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("ATT_R");
lcd.setCursor(0, 1); lcd.print(-att_r * 1.25, 2); lcd.print(" "); lcd.setCursor(6, 1); lcd.print("dB");
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// INPUT GAIN ///////////////////////////////////////////////////////////////////
if (menu0 == 2 && menu2 == 1) {
switch (in) {
case 0: gain0 = gain1; break;
case 1: gain0 = gain2; break;
case 2: gain0 = gain3; break;
case 3: gain0 = gain4; break;
}
if (ir.value == IR_3) {
gain0++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
gain0++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == IR_4) {
gain0--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
gain0--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
gain_func();
www = 1;
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
gain0 = gain0 + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
www = 1;
w = 1;
w2 = 1;
gain_func();
}
switch (in) {
case 0: gain1 = gain0; break;
case 1: gain2 = gain0; break;
case 2: gain3 = gain0; break;
case 3: gain4 = gain0; break;
}
a[0] = abs(gain0);
for (i = 0; i < 1; i++) {
switch (i) {
case 0: e1 = 13, e2 = 14, e3 = 15;
break;
case 1: e1 = 13, e2 = 14, e3 = 15;
break;
} digit();
}
lcd.setCursor(0, 1); lcd.print("GAIN "); lcd.print(gain0 * 3.75, 2); lcd.print(" "); lcd.setCursor(10, 1); lcd.print("dB");
if (www == 1) {
audio();
www = 0;
}
lcd.setCursor(0, 0); lcd.print("INPUT "); lcd.print(in + 1);
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// LOUDNESS ///////////////////////////////////////////////////////////////////
if (menu0 == 3 && menu2 == 1) {
if (ir.value == IR_3) {
loud_on++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
loud_on++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == IR_4) {
loud_on--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
loud_on--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
} audio();
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
loud_on = loud_on + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
if (loud_on > 1) {
loud_on = 0;
};
if (loud_on < 0) {
loud_on = 1;
};
audio();
}
if (loud_on == 1) {
lcd.setCursor(2, 0);
lcd.print("LOUDNESS ON ");
}
else {
lcd.setCursor(2, 0);
lcd.print("LOUDNESS OFF");
}
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BRIGHTNESS ///////////////////////////////////////////////////////////////////
if (menu0 == 4 && menu2 == 1) {
if (ir.value == IR_3) {
brig++; // кнопка >
gr1 = 1;
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == 0xFFFFFFFF and gr1 == 1) {
brig++; // кнопка >>>>>>
gr2 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == IR_4) {
brig--; // кнопка <
gr1 = 0;
gr2 = 1;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (ir.value == 0xFFFFFFFF and gr2 == 1) {
brig--; // кнопка <<<<<<
gr1 = 0;
cl1();
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
brig = brig + newPosition;
myEnc.write(0);
newPosition = 0;
times = millis();
w = 1;
w2 = 1;
brig_func();
analogWrite(6, brig);
}
a[0] = abs(brig) / 100; a[1] = abs(brig) / 10 % 10; a[2] = abs(brig) % 10;
for (i = 0; i < 3; i++) {
switch (i) {
case 0: e1 = 7, e2 = 8, e3 = 9; break;
case 1: e1 = 10, e2 = 11, e3 = 12; break;
case 2: e1 = 13, e2 = 14, e3 = 15; break;
} digit();
}
lcd.setCursor(0, 0); lcd.print("BRIGHT");
lcd.setCursor(0, 1); lcd.print(brig * 100 / 255); lcd.print(" "); lcd.setCursor(4, 1); lcd.print("%");
}
////////////////////////////////////////////////////////////////////////////////////////////
if (millis() - times > 10000 && w == 1 && mute == 0 && power == 0) {
w = 0;
menu2 = 0;
menu1 = 1;
menu = 0;
cl();
}
/////////////////// ЧАСЫ ///////////////////////////////////////////////////////////////////
if (power == 1) {
digitalWrite(7, LOW);
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 (i = 0; i < 4; i++) {
switch (i) {
case 0: e1 = 0, e2 = 1, e3 = 2; break;
case 1: e1 = 3, e2 = 4, e3 = 5; break;
case 2: e1 = 7, e2 = 8, e3 = 9; break;
case 3: e1 = 10, e2 = 11, e3 = 12; break;
} 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) == HIGH) {
hour++;
if (hour > 23) {
hour = 0;
} clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
if (digitalRead(10) == LOW && digitalRead(3) == HIGH) {
minut++;
if (minut > 59) {
minut = 0;
} clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
if (digitalRead(10) == LOW && digitalRead(4) == HIGH) {
secon = 0;
clock.setDateTime(2020, 9, 15, hour, minut, secon);
delay(100);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
}// loop
void times_f() {
lcd.setCursor(0, 1);
lcd.print(DateTime.hour / 10);
lcd.print(DateTime.hour % 10);
lcd.print(":");
lcd.print(DateTime.minute / 10);
lcd.print(DateTime.minute % 10);
lcd.print(":");
lcd.print(DateTime.second / 10);
lcd.print(DateTime.second % 10);
}
void brig_func() {
if (brig < 0) {
brig = 0;
} if (brig > 255) {
brig = 255;
}
}
void gain_func() {
if (gain0 < 0) {
gain0 = 0;
} if (gain0 > 3) {
gain0 = 3;
}
}
void att_r_func() {
if (att_r < 0) {
att_r = 0;
} if (att_r > 24) {
att_r = 24;
}
}
void att_l_func() {
if (att_l < 0) {
att_l = 0;
} if (att_l > 24) {
att_l = 24;
}
}
void treb_func() {
if (treb < -7) {
treb = -7;
} if (treb > 7) {
treb = 7;
}
}
void bass_func() {
if (bass < -7) {
bass = -7;
} if (bass > 7) {
bass = 7;
}
}
void vol_func() {
if (vol < 0) {
vol = 0;
} if (vol > 56) {
vol = 56;
}
}
void cl() {
ir.value = 0;
delay(300);
lcd.clear();
}
void cl1() {
ir.value = 0;
delay(200);
}
void audio() {
pt.setVolume(vol); // int 0...56 === -70...0 dB step 1.25 dB
pt.setAttL(att_l); // int 0...24 === 0...-30 db step 1.25 dB > int 31 === mute on
pt.setAttR(att_r); // int 0...24 === 0...-30 dB step 1.25 dB > int 31 === mute on
pt.setSwitch(in, loud_on, gain0);
// input int 0..3 === IN 1...4
// loudness int 0...1 === 1-on 0-off
// input gain int 0...3 === 0...11.25dB step 3.75 dB
pt.setBass(bass); // int -7...+7 === -14...+14 dB step 2 dB
pt.setTreble(treb); // int -7...+7 === -14...+14 dB step 2 dB
}
void to_Timer() {
newPosition = myEnc.read() / 4;
}
void digit() {
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);
}
Дорогой Вы мой человек ! Огромное Вам человеческое спасибо , я 6 месяцев пытался сделать эту плюшку пока не обратился к Вам . Дай бог Вам здоровья ! Я уже и не осмелился просить о отображение этой кнопки , а Вы сами догадались . Всё великолепно работает и просто можно поставить точку на этом проекте .
PS. Сильно прошу прощения за испорченный выходной !
Я уже определился с следующим проектом , тоже на Вашей разработке PT2314 + LCD2004 + анализатор спектра . Дисплей чик хотелось по интересней цветной 320х240 , но можно и этот без I2C . Индикаторы выходного сигнала хочу использовать тоже на ардуино . Одним словом 3 платки ардуинки в одном проекте и таймер сна обязательно !
LCD2004 при работе анализатора спектра можно использовать только в режиме параллельного подключения, по шине i2c не хватит быстродействия. Использование TFT так же не желательно при работе анализатора спектра, подключение SPI так же может обеспечить высокое быстродействие.
Понятно , все поиски в интернете ведут сюда аудио процессор и Ардуино . Очень хочется именно цветной дисплей 320х240 пусть без анализатора спектра , как таковой на lcd 2002 lcd2004 он не смотрится всё очень мелковато . Возьмётесь ?
Возможно осенью, сейчас на это совсем нет времени.
Здравствуйте. Повторил Ваш проект, все шикарно. Но есть нюанс часы сбиваются(отстают). Если усилком не пользоваться то часы идут нормально. Спасибо.
Поставьте дополнительную емкость 220-470 мкФ по цепи питания часов реального времени.
Доброго дня выбрал такой дисплей , но логика работает только с 3.3 вольт
https://aliexpress.ru/item/100500201840 … 1624609278
Какую плату взять : UNO там напряжение 5 вольт на входе и выходе нужны костыли для дисплея или ESP32 там напряжение 3.3 вольт и памяти побольше и костылей не нужно , но с библиотеками не супер . Остались Мега и Дуе , но дороговато . Я про новый проект PT2311 и TFT цветной
Это я понял , через делитель . Значит готовить Arduino NANO ? На ESP32 можно будет реализовать управление через веб браузер ? Нашёл хорошею библиотеку для tft ili9341 только для ардуинок :
http://marekburiak.github.io/ILI9341_due/
собирал на PT2313 звук кристально-чистый, слушать не привычно, но входов мало (3),собрал PT2314 входов (4) звук на много мягче, но оконечный усилитель не раскачевает ( играет тише), у меня ус(TDA8954TH двухканальный 2X 210 Вт)
Здравствуйте, как сделать переключение каналов по номеру цифры с пульта, а не по кругу?
Опубликуйте Ваш скетч.
#define IR_1 0xFED827 // Кнопка вверх
#define IR_2 0xFEF807 // Кнопка вниз
#define IR_3 0xFE58A7 // Кнопка >
#define IR_4 0xFE7887 // Кнопка <
#define IR_5 0xFE827D // Кнопка IN
#define IR_6 0xFEA25D // Кнопка SET
#define IR_7 0xFE08F7 // Кнопка MUTE
#define IR_8 0xFE48B7 // Кнопка STANDBY (POWER)// ПУЛЬТ ДНС
#define IR_9 0xFE807F //IN0
#define IR_10 0xFE40BF //IN1
#define IR_11 0xFEC03F //IN2
#define IR_12 0xFE20DF //IN3
я сделал , но в калонка при переключении слышен щелчёк
if(ir.value==IR_9){in=0;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;}
if(ir.value==IR_10){in=1;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;}
if(ir.value==IR_11){in=2;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;}
if(ir.value==IR_12){in=3;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;}
if(ir.value==IR_9){in=0;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();}
if(ir.value==IR_10){in=1;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();}
if(ir.value==IR_11){in=2;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();}
if(ir.value==IR_12){in=3;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();}
щелчки проходят при подачи питание IN0(блютус) и IN1(FM приёмник)
питание идёт через nMOP транзистор.
при переключении IN2 и IN3 щелчков нет.
при выключение ус напряжение на IN0(блютус) или наIN1(FM приёмник) остаётся, как исправить?
#define IR_1 0xFED827 // Кнопка вверх
#define IR_2 0xFEF807 // Кнопка вниз
#define IR_3 0xFE58A7 // Кнопка >
#define IR_4 0xFE7887 // Кнопка <
#define IR_5 0xFE827D // Кнопка IN
#define IR_6 0xFEA25D // Кнопка SET
#define IR_7 0xFE08F7 // Кнопка MUTE
#define IR_8 0xFE48B7 // Кнопка STANDBY (POWER)// ПУЛЬТ ДНС
#define IR_9 0xFE807F //IN0
#define IR_10 0xFE40BF //IN1
#define IR_11 0xFEC03F //IN2
#define IR_12 0xFE20DF //IN3
#define BRIG 150 // Яркость подсветки экрана в режиме POWER OFF (0...255)
#include <Wire.h>
#include <PT2314.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=434&download=1
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>
#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
DS3231 clock;RTCDateTime DateTime;
PT2314 pt;
LiquidCrystal_I2C lcd(0x3F,16,2); // Устанавливаем дисплей
IRrecv irrecv(12); // указываем вывод модуля IR приемника
Encoder myEnc(8, 9);// DT, CLK
decode_results ir;
byte v1[8] = {0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111};
byte v2[8] = {0b00111,0b00111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
byte v3[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v4[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v5[8] = {0b11100,0b11100,0b00000,0b00000,0b00000,0b00000,0b11100,0b11100};
byte v6[8] = {0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100};
byte v7[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00111,0b00111};
byte v8[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,w,w2,i,www,power,save,gr1,gr2;
int menu,menu0,menu1=1,menu2=0,vol,bass,treb,att_l,att_r,in,loud_on,gain0,gain1,gain2,gain3,gain4,mute,mute1,mute2,brig,hour,minut,secon;
unsigned long times,oldPosition = -999,newPosition;
void setup() {
irrecv.enableIRIn();lcd.init();lcd.backlight();clock.begin();Serial.begin(9600);
pinMode(10,INPUT); // МЕНЮ КНОПКА SW энкодера
pinMode(2,INPUT); // КНОПКА SET
pinMode(3,INPUT); // КНОПКА IN
pinMode(4,INPUT); // КНОПКА MUTE
pinMode(5,INPUT); // КНОПКА STANDBY
pinMode(7,OUTPUT); // ВЫХОД УПРАВЛЕНИЯ STANDBY
pinMode(6,OUTPUT); // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
pinMode(11,OUTPUT); //ВЫХОД УПРАВЛЕНИЯ ПИТАНИЯ ВХОДА 1
pinMode(13,OUTPUT); //ВЫХОД УПРАВЛЕНИЯ ПИТАНИЯ ВХОДА 2
pinMode(A0,OUTPUT); //ВЫХОД УПРАВЛЕНИЯ ПИТАНИЯ ВХОДА 3
pinMode(A1,OUTPUT); //ВЫХОД УПРАВЛЕНИЯ ПИТАНИЯ ВХОДА 4
analogWrite(6, 255);
lcd.setCursor(2,0);lcd.print("Sound Processor");lcd.setCursor(2,1);lcd.print("HELLO KALYN"); delay(2000);lcd.clear();
MsTimer2::set(1, to_Timer);MsTimer2::start();
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
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);
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
vol = EEPROM.read(0);treb = EEPROM.read(1)-7;bass = EEPROM.read(2)-7;in = EEPROM.read(3);
att_l = EEPROM.read(4);att_r = EEPROM.read(5);gain1 = EEPROM.read(6);gain2 = EEPROM.read(7);
gain3 = EEPROM.read(8);gain4 = EEPROM.read(9);loud_on = EEPROM.read(10);brig = EEPROM.read(11);
audio();
analogWrite(6, brig);
}
void loop() {
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
////////////////////// 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(mute==0&&power==0){
if(ir.value==IR_6&&menu1==1){menu1=0;menu2=1;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;lcd.setCursor(4,0);lcd.print("SETTING"); delay(500);lcd.clear();}
if(ir.value==IR_6&&menu2==1){menu1=1;menu2=0;menu=0;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;lcd.setCursor(6,0);lcd.print("MENU"); delay(500);lcd.clear();}
if(ir.value==IR_1&&menu1==1){menu++;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu>2){menu=0;}}//меню 1
if(ir.value==IR_2&&menu1==1){menu--;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu<0){menu=2;}}//меню 1
if(ir.value==IR_1&&menu2==1){menu0++;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu0>4){menu0=0;}}//меню 2
if(ir.value==IR_2&&menu2==1){menu0--;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(menu0<0){menu0=4;}}//меню 2
if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;if(in>3){in=0;}lcd.setCursor(4,0);lcd.print("INPUT ");lcd.print(in+1);audio();delay(500);lcd.clear();}// IN
}
if(ir.value==IR_9){mute=1;in=0;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();delay(1000);mute=0;}
if(ir.value==IR_10){mute=1;in=1;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();delay(1000);mute=0;}
if(ir.value==IR_11){in=2;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();}
if(ir.value==IR_12){in=3;gr1=0;gr2=0;cl();times=millis();w=1;w2=1;audio();}
if(ir.value==IR_7&&mute==0&&power==0){mute=1;pt.setAttR(31);pt.setAttL(31);gr1=0;gr2=0;cl();lcd.setCursor(6,0);lcd.print("MUTE");menu1=100;menu2=100;delay(500);}// MUTE
if(ir.value==IR_7&&mute==1&&power==0){mute=0;cl();menu1=1;menu=0;gr1=0;gr2=0;cl();audio();}// MUTE
if(ir.value==IR_8&&power==0){power=1;pt.setAttR(31);pt.setAttL(31);audio();gr1=0;gr2=0;cl();lcd.clear();lcd.setCursor(3,0);lcd.print("POWER OFF");menu0=0;menu1=0;menu2=0;save=1;analogWrite(6, BRIG);delay(500);lcd.clear();}// power off
if(ir.value==IR_8&&power==1){power=0;gr1=0;gr2=0;cl();lcd.backlight();lcd.clear();lcd.setCursor(3,0);lcd.print("POWER ON ");menu1=1;menu=0;myEnc.write(0);audio();analogWrite(6, brig);delay(800);lcd.clear();}// power on
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// УПРАВЛЕНИЕ //////////////////////////////////////////////
if(mute==0&&power==0){
if(digitalRead(2)==HIGH&&menu1==1){menu1=0;menu2=1;cl();times=millis();w=1;w2=1;lcd.setCursor(4,0);lcd.print("SETTING"); delay(500);lcd.clear();}
if(digitalRead(2)==HIGH&&menu2==1){menu1=1;menu2=0;menu=0;cl();times=millis();w=1;w2=1;lcd.setCursor(6,0);lcd.print("MENU"); delay(500);lcd.clear();}
if(digitalRead(10)==LOW&&menu1==1){menu++;cl();times=millis();w=1;w2=1;if(menu>2){menu=0;}}//меню 1
if(digitalRead(10)==LOW&&menu2==1){menu0++;cl();times=millis();w=1;w2=1;if(menu0>4){menu0=0;}}//меню 2
if(digitalRead(3)==HIGH){in++;cl();;times=millis();w=1;w2=1;if(in>3){in=0;}lcd.setCursor(4,0);lcd.print("INPUT ");lcd.print(in+1);audio();delay(500);lcd.clear();}// IN
}
if(digitalRead(4)==HIGH&&mute==0&&power==0){mute=1;pt.setAttR(31);pt.setAttL(31);cl();lcd.setCursor(6,0);lcd.print("MUTE");menu1=100;menu2=100;delay(500);}// MUTE
if(digitalRead(4)==HIGH&&mute==1&&power==0){mute=0;cl();menu1=1;menu=0;cl();audio();}// MUTE
if(digitalRead(5)==HIGH&&power==0){power=1;pt.setAttR(31);pt.setAttL(31);lcd.clear();lcd.setCursor(4,0);lcd.print("POWER OFF");menu0=0;menu1=0;menu2=0;save=1;analogWrite(6, 50);delay(500);lcd.clear();}// power off
if(digitalRead(5)==HIGH&&power==1){power=0;lcd.backlight();lcd.clear();lcd.setCursor(4,0);lcd.print("POWER ON ");menu1=1;menu=0;myEnc.write(0);audio();analogWrite(6, brig);delay(800);lcd.clear();}// power on
if(power==0){digitalWrite(7,HIGH);}
//if(power==0){digitalWrite(7,LOW);}// инверсия выхода STANDBY
if(in==0){digitalWrite(11,HIGH);}else{digitalWrite(11,LOW);} // УПРАВЛЕНИЕ РЕЛЕ ПИТАНИЯ ВХОДА 1____________________________
if(in==1){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} // УПРАВЛЕНИЕ РЕЛЕ ПИТАНИЯ ВХОДА 2_____________________________
if(in==2){digitalWrite(A0,HIGH);}else{digitalWrite(A0,LOW);} // УПРАВЛЕНИЕ РЕЛЕ ПИТАНИЯ ВХОДА 3_____________________________
if(in==3){digitalWrite(A1,HIGH);}else{digitalWrite(A1,LOW);} // УПРАВЛЕНИЕ РЕЛЕ ПИТАНИЯ ВХОДА 4_____________________________
if(save==1&&w2==1){save=0;w2=0;
EEPROM.update(0,vol);EEPROM.update(1,treb+7);EEPROM.update(2,bass+7);EEPROM.update(3,in);
EEPROM.update(4,att_l);EEPROM.update(5,att_r);EEPROM.update(6,gain1);EEPROM.update(7,gain2);
EEPROM.update(8,gain3);EEPROM.update(9,gain4);EEPROM.update(10,loud_on);EEPROM.update(11,brig);}
/////////////////////////////////////////////////////////////////////////////////////////
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if(menu==0&&menu1==1){
if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
a[0]= vol/10;a[1]=vol%10;
for(i=0;i<2;i++){switch(i){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("IN");lcd.print(in+1);lcd.print(" VOLUME");
if(vol<0){lcd.setCursor(9,1);lcd.write((uint8_t)8);}else{lcd.setCursor(9,1);lcd.print(" ");}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BASS ///////////////////////////////////////////////////////////////////
if(menu==1&&menu1==1){
if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bass_func();audio();}
a[0]= abs(bass*2)/10;a[1]=abs(bass*2)%10;
for(i=0;i<2;i++){switch(i){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("BASS dB");
if(bass<0){lcd.setCursor(9,1);lcd.write((uint8_t)8);}else{lcd.setCursor(9,1);lcd.print(" ");}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// TREBLE ///////////////////////////////////////////////////////////////////
if(menu==2&&menu1==1){
if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_func();audio();}
a[0]= abs(treb*2)/10;a[1]=abs(treb*2)%10;
for(i=0;i<2;i++){switch(i){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("TREBLE dB");
if(treb<0){lcd.setCursor(9,1);lcd.write((uint8_t)8);}else{lcd.setCursor(9,1);lcd.print(" ");}
times_f();
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_L ///////////////////////////////////////////////////////////////////
if(menu0==0&&menu2==1){
if(ir.value==IR_3){att_l++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_l++;gr2=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){att_l--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_l--;gr1=0;cl1();times=millis();w=1;w2=1;att_l_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;att_l=att_l+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_l_func();audio();}
a[0]= abs(att_l)/10;a[1]=abs(att_l)%10;
for(i=0;i<2;i++){switch(i){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATT_L");
lcd.setCursor(0,1);lcd.print(-att_l*1.25,2);lcd.print(" ");lcd.setCursor(6,1);lcd.print("dB");}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// ATT_R ///////////////////////////////////////////////////////////////////
if(menu0==1&&menu2==1){
if(ir.value==IR_3){att_r++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){att_r++;gr2=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){att_r--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){att_r--;gr1=0;cl1();times=millis();w=1;w2=1;att_r_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;att_r=att_r+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;att_r_func();audio();}
a[0]= abs(att_r)/10;a[1]=abs(att_r)%10;
for(i=0;i<2;i++){switch(i){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,0);lcd.print("ATT_R");
lcd.setCursor(0,1);lcd.print(-att_r*1.25,2);lcd.print(" ");lcd.setCursor(6,1);lcd.print("dB");}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// INPUT GAIN ///////////////////////////////////////////////////////////////////
if(menu0==2&&menu2==1){
switch(in){
case 0: gain0 = gain1;break;
case 1: gain0 = gain2;break;
case 2: gain0 = gain3;break;
case 3: gain0 = gain4;break;
}
if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;gain_func();www=1;}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();times=millis();w=1;w2=1;gain_func();www=1;}// кнопка >>>>>>
if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;gain_func();www=1;}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();times=millis();w=1;w2=1;gain_func();www=1;}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;gain0=gain0+newPosition;myEnc.write(0);newPosition=0;times=millis();www=1;w=1;w2=1;gain_func();}
switch(in){
case 0: gain1 = gain0;break;
case 1: gain2 = gain0;break;
case 2: gain3 = gain0;break;
case 3: gain4 = gain0;break;
}
a[0]= abs(gain0);
for(i=0;i<1;i++){switch(i){case 0: e1=13,e2=14,e3=15;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
lcd.setCursor(0,1);lcd.print("GAIN ");lcd.print(gain0*3.75,2);lcd.print(" ");lcd.setCursor(10,1);lcd.print("dB");
if(www==1){audio();www=0;}
lcd.setCursor(0,0);lcd.print("INPUT ");lcd.print(in+1);}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// LOUDNESS ///////////////////////////////////////////////////////////////////
if(menu0==3&&menu2==1){
if(ir.value==IR_3){loud_on++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;if(loud_on>1){loud_on=0;};if(loud_on<0){loud_on=1;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){loud_on++;gr2=0;cl1();times=millis();w=1;w2=1;if(loud_on>1){loud_on=0;};if(loud_on<0){loud_on=1;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){loud_on--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;if(loud_on>1){loud_on=0;};if(loud_on<0){loud_on=1;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){loud_on--;gr1=0;cl1();times=millis();w=1;w2=1;if(loud_on>1){loud_on=0;};if(loud_on<0){loud_on=1;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;loud_on=loud_on+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;if(loud_on>1){loud_on=0;};if(loud_on<0){loud_on=1;};audio();}
if(loud_on==1){lcd.setCursor(2,0);lcd.print("LOUDNESS ON ");}
else{lcd.setCursor(2,0);lcd.print("LOUDNESS OFF");}}
////////////////////////////////////////////////////////////////////////////////////////////
////////////// BRIGHTNESS ///////////////////////////////////////////////////////////////////
if(menu0==4&&menu2==1){
if(ir.value==IR_3){brig++;gr1=1;gr2=0;cl1();times=millis();w=1;w2=1;brig_func();analogWrite(6,brig);}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){brig++;gr2=0;cl1();times=millis();w=1;w2=1;brig_func();analogWrite(6,brig);}// кнопка >>>>>>
if(ir.value==IR_4){brig--;gr1=0;gr2=1;cl1();times=millis();w=1;w2=1;brig_func();analogWrite(6,brig);}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){brig--;gr1=0;cl1();times=millis();w=1;w2=1;brig_func();analogWrite(6,brig);}// кнопка <<<<<<
if (newPosition != oldPosition){oldPosition = newPosition;brig=brig+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;brig_func();analogWrite(6,brig);}
a[0]= abs(brig)/100;a[1]=abs(brig)/10%10;a[2]=abs(brig)%10;
for(i=0;i<3;i++){switch(i){case 0: e1=7,e2=8,e3=9;break;
case 1: e1=10,e2=11,e3=12;break;
case 2: e1=13,e2=14,e3=15;break;
}digit();}
lcd.setCursor(0,0);lcd.print("BRIGHT");
lcd.setCursor(0,1);lcd.print(brig*100/255);lcd.print(" ");lcd.setCursor(4,1);lcd.print("%");}
////////////////////////////////////////////////////////////////////////////////////////////
if(millis()-times>10000&&w==1&&mute==0&&power==0){w=0;menu2=0;menu1=1;menu=0;cl();}
/////////////////// ЧАСЫ ///////////////////////////////////////////////////////////////////
if(power==1){digitalWrite(7,LOW);
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(i=0;i<4;i++){
switch(i){
case 0: e1=0,e2=1,e3=2;break;
case 1: e1=3,e2=4,e3=5;break;
case 2: e1=7,e2=8,e3=9;break;
case 3: e1=10,e2=11,e3=12;break;
}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)==HIGH){hour++;if(hour>23){hour=0;} clock.setDateTime(2020, 9, 15, hour, minut, secon);delay(100);}
if(digitalRead(10)==LOW&&digitalRead(3)==HIGH){minut++;if(minut>59){minut=0;} clock.setDateTime(2020, 9, 15, hour, minut, secon);delay(100); }
if(digitalRead(10)==LOW&&digitalRead(4)==HIGH){secon=0; clock.setDateTime(2020, 9, 15, hour, minut, secon);delay(100); }
}
////////////////////////////////////////////////////////////////////////////////////////////
}// loop
void times_f(){lcd.setCursor(1,1);lcd.print(DateTime.hour/10);lcd.print(DateTime.hour%10);lcd.print(":");lcd.print(DateTime.minute/10);lcd.print(DateTime.minute%10);lcd.print(":");lcd.print(DateTime.second/10);lcd.print(DateTime.second%10);}
void brig_func(){if(brig<0){brig=0;}if(brig>255){brig=255;}}
void gain_func(){if(gain0<0){gain0=0;}if(gain0>3){gain0=3;}}
void att_r_func(){if(att_r<0){att_r=0;}if(att_r>24){att_r=24;}}
void att_l_func(){if(att_l<0){att_l=0;}if(att_l>24){att_l=24;}}
void treb_func(){if(treb<-7){treb=-7;}if(treb>7){treb=7;}}
void bass_func(){if(bass<-7){bass=-7;}if(bass>7){bass=7;}}
void vol_func(){if(vol<0){vol=0;}if(vol>56){vol=56;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}
void audio(){
pt.setVolume(vol); // int 0...56 === -70...0 dB step 1.25 dB
pt.setAttL(att_l); // int 0...24 === 0...-30 db step 1.25 dB > int 31 === mute on
pt.setAttR(att_r); // int 0...24 === 0...-30 dB step 1.25 dB > int 31 === mute on
pt.setSwitch(in, loud_on, gain0);
// input int 0..3 === IN 1...4
// loudness int 0...1 === 1-on 0-off
// input gain int 0...3 === 0...11.25dB step 3.75 dB
pt.setBass(bass); // int -7...+7 === -14...+14 dB step 2 dB
pt.setTreble(treb); // int -7...+7 === -14...+14 dB step 2 dB
}
void to_Timer(){newPosition = myEnc.read()/4;}
void digit(){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);}
Я бы сделал так шумов при переключении нет , у Вас команды для кнопок написаны по разному
if (ir.value == IR_10) {
in = 0;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
audio();
lcd.setCursor(3, 0);
lcd.print(" AUX 1");
delay(1500);
}
if (ir.value == IR_11) {
in = 1;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
audio();
lcd.setCursor(3, 0);
lcd.print(" AUX 2");
delay(1500);
}
if (ir.value == IR_12) {
in = 2;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
audio();
lcd.setCursor(3, 0);
lcd.print(" AUX 3");
delay(1500);
}
if (ir.value == IR_13) {
in = 3;
gr1 = 0;
gr2 = 0;
cl();
times = millis();
w = 1;
w2 = 1;
audio();
lcd.setCursor(3, 0);
lcd.print("Bluetooth");
delay(1500);
lcd.clear();
}
forum.rcl-radio.ru → Библиотеки → PT2314
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|