Re: PT2258 + LCD2004_I2C + IR + DS3231
Внес изменения в скейч. Изменены функции пинов( в скейче смотрим).
Пин 12 включение основного питания.
Пин 13 включение софтстарта
Задержка сейчас вроде 2 секунды, но в скейче можно поменять,кому не надо, можете не использовать.
Изменил надпись при загрузке(кому не нравится, меняем) Добавил полоску загрузки.
Громкость регулируется от МИНУС "-64 дБ" МИНИМУМ, к " 0 дБ" МАКСИМУМ.
Минус при"0" исчезает....))))
Как принято во всех усилителях и рессиверах.....
Добавил вывод температуры на главный экран. Датчик 18В20, пин 5.
"Температура радиатора усилителя".
Сделал "термозащиту"----в скече устанавливается предел температуры,(в комментах подписано в каком месте)
//термозащита //4 строка
if ((sensor.getTemp())>30)//вот тут меняем уставку защиты.....50...90 градусов....или 100))))
{mute = 1; audio();
lcd.setCursor(0, 3);lcd.print("HOT TEMP!");delay(250);lcd.print(" MUTE!");delay(250);
lcd.setCursor(0, 3);lcd.print(" ");}//вместо часов выводм сообщение....
else {lcd.setCursor(0, 3);
mute = 0; audio();//или на это место выводим часы.....
lcd.print(hour / 10); lcd.print(hour % 10); lcd.print(":");
lcd.print(minut / 10); lcd.print(minut % 10); lcd.print(":");
lcd.print(secon / 10); lcd.print(secon % 10); lcd.print(" ");}
Сейчас стоит +30градусов, для настроек так удобнее, потом можно и 60-70-80-90 выставить......
При достижении заданной температуры включается режим MUTE.
На главном экране вместо часов моргает надпись HOT TEMP! MUTE!
На экране при обрыве датчика вместо температуры моргает "- - E R" ошибка датчика.
Часы на экране standby без секунд. ТОЧКИ(тире,кому как) МОРГАЮТ.
Символы циферок чуть другие, мне так больше нравится.
В режиме mute изменена надпись(а может старую оставить???)
Подсветка экрана приглушается в режиме mute.
В планах-
----добавить ПЛАВНОЕ снижение яркости подсветки главного экрана, если никакие кнопки и пульт не активны.
Допустим через 30 секунд....
Мы же вроде музыку слушаем, а яркость на всю, если нет регулировок, это много)))
--- добавить индикацию срабатывания защиты АС от постоянки......на каждый из 6 каналов.....
-----по ходу может что добавится........
Скейч
//#define POWER 0x33B800FF
//#define VOLUME_UP 0x33B8E01F
//#define VOLUME_DW 0x33B810EF
//#define MUT 0x33B8946B
#define SET 0x42BD48B7
#define OK 0x42BD08F7
#define POWER 0x42BD50AF
#define VOLUME_UP 0x42BD6897
#define VOLUME_DW 0x42BDE01F
#define MUT 0x42BD609F
#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> // входит в состав библиотеки IRremote
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include <PT2258.h> // https://github.com/liman324/PT2258.git
#include <DS3231.h>
#include <microDS18B20.h>
PT2258 pt;
LiquidCrystal_I2C lcd(0x3F, 20, 4); // Устанавливаем дисплей
Encoder myEnc(9, 8);// DT, CLK
IRrecv irrecv(11); // указываем вывод модуля IR приемника
decode_results ir;
DS3231 clock; RTCDateTime DateTime;
MicroDS18B20<5> sensor;
//запись кодов символов в экран
byte v1[8] = {B00111,B01111,B11111,B11111,B11111,B11111,B11111,B11111};
byte v2[8] = {B11111,B11111,B11111,B00000,B00000,B00000,B00000,B00000};
byte v3[8] = {B11100,B11110,B11111,B11111,B11111,B11111,B11111,B11111};
byte v4[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B01111,B00111};
byte v5[8] = {B00000,B00000,B00000,B00000,B00000,B11111,B11111,B11111};
byte v6[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B11110,B11100};
byte v7[8] = {B11111,B11111,B11111,B00000,B00000,B00000,B11111,B11111};
byte v8[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111};
//обьявление переменных
unsigned long times,oldPosition = -999,newPosition;
int vol, ch1, ch2, ch3, ch4, ch5, ch6, menu, menu1, menu2, brig, brig0 = 10, brig1, temp0, i;
bool mute, power, w, w1, gr1, gr2;
byte a[6], d1, d2, d3, d4, d5, d6, e1, e2, e3, x, www, tim_w;
int hour, minut, secon, data, mon, year, time_temp;
byte mesto2[8] = {0, 10, 0, 10, 0, 10, 0, 10};
byte mesto3[8] = {0, 0, 1, 1, 2, 2, 3, 3};
int hh, mm, ss, dd, mn, gg;
byte standby = 1;
//понеслось.......
void setup() {
irrecv.enableIRIn(); lcd.init(); lcd.backlight(); Wire.begin(); clock.begin(); Serial.begin(9600);
MsTimer2::set(1, to_Timer); MsTimer2::start();
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); // очистка памяти при первом включении
}
}
//обьявление входов,выходов
pinMode(2, INPUT_PULLUP); // КНОПКА SET
pinMode(3, INPUT_PULLUP); // КНОПКА MUTE
pinMode(4, INPUT_PULLUP); // КНОПКА POWER
pinMode(6, OUTPUT); // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
//Encoder myEnc(9, 8);// DT, CLK
pinMode(10, INPUT); // МЕНЮ КНОПКА SW энкодера
//IRrecv irrecv(11); // указываем вывод модуля IR приемника
pinMode(12, OUTPUT); // Выход управления STANDBY - реле включения усилителя
pinMode(13, OUTPUT); // Выход управления STANDBY--- c задержкой для реле софтстарта усилителя
clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
vol = EEPROM.read(0); ch1 = EEPROM.read(1); ch2 = EEPROM.read(2); ch3 = EEPROM.read(3);
ch4 = EEPROM.read(4); ch5 = EEPROM.read(5); ch6 = EEPROM.read(6);
brig0 = EEPROM.read(7); brig1 = EEPROM.read(8);
analogWrite(6, brig0 * 25);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(500);
audio();
}
void loop() {
/// READ TIME /////////////////////////////////
DateTime = clock.getDateTime(); hour = DateTime.hour; minut = DateTime.minute; secon = DateTime.second;
data = DateTime.day; mon = DateTime.month; year = DateTime.year;
/// BUTTON ////////////////////////////////////
//// МЕНЮ КНОПКА SW энкодера
if (power == 0) {
if ((digitalRead(10) == LOW || ir.value == OK) && menu == 1) {menu1++;delay(200);times = millis();cl1();w = 1;w1 = 1;
if (menu1 > 7) {menu1 = 0;}
}
if (digitalRead(10) == LOW && menu == 2) {menu2++;delay(200);times = millis();w = 1;w1 = 1;
if (menu2 > 5) {menu2 = 0;}
}
// МЕНЮ КНОПКА SET
if ((digitalRead(2) == LOW || ir.value == SET) && digitalRead(10) == HIGH) {menu++;delay(200);times = millis();cl();w = 1;w1 = 1;menu1 = 0;
if (menu > 1) {menu = 0; }
}
// МЕНЮ КНОПКА SET time(нажатие одновременно кнопки энкодера и кнопкиSET)
if (digitalRead(2) == LOW && digitalRead(10) == LOW) {menu = 2;delay(200);times = millis();cl();w = 1;w1 = 1;lcd.setCursor(2, 1);
lcd.print("TIME CORRECTION");delay(1000);
}
// МЕНЮ КНОПКА MUTE - mute on
if ((digitalRead(3) == LOW || ir.value == MUT) && mute == 0) {mute = 1;cl();audio();menu = 100;brig=brig1;analogWrite(6, brig * 25);
//слово MUTE//да, охренеть! можно проще? и круче --- поправляйте!(просто "MUTE" не прет!!!)(и массивы ниасилил йа......)
lcd.setCursor(0,0);lcd.write(3);lcd.setCursor(4,0);lcd.write(1);lcd.write(3);lcd.setCursor(9,0);lcd.write(1);lcd.write(4);lcd.write(2);lcd.write(7);lcd.write(2);lcd.write(6);lcd.write(1);lcd.write(2);lcd.write(2);lcd.write(2);lcd.write(3);
lcd.setCursor(0,1);lcd.write(8);lcd.write(3);lcd.setCursor(3,1);lcd.write(1);lcd.write(8);lcd.write(8);lcd.setCursor(9,1);lcd.write(8);lcd.setCursor(12,1);lcd.write(8);lcd.setCursor(15,1);lcd.write(8);lcd.write(5);lcd.write(5);lcd.write(5);
lcd.setCursor(0,2);lcd.write(8);lcd.setCursor(2,2);lcd.write(7);lcd.setCursor(4,2);lcd.write(8);lcd.write(4);lcd.setCursor(9,2);lcd.write(6);lcd.setCursor(12,2);lcd.write(8);lcd.setCursor(15,2);lcd.write(8);
lcd.setCursor(0,3);lcd.write(8);lcd.setCursor(4,3);lcd.write(8);lcd.setCursor(6,3);lcd.write(4);lcd.write(7);lcd.write(6);lcd.setCursor(12,3);lcd.write(8);lcd.setCursor(15,3);lcd.write(4);lcd.write(5);lcd.write(5);lcd.write(5);lcd.write(6);
delay(500);
}
// МЕНЮ КНОПКА MUTE - mute off
if ((digitalRead(3) == LOW || ir.value == MUT) && mute == 1) {mute = 0;cl();times = millis();w = 1;w1 = 1;menu = 0;menu1 = 0;brig=brig0;analogWrite(6, brig * 25);audio();}
}
// МЕНЮ КНОПКА POWER
if (((digitalRead(4) == LOW || ir.value == POWER) && power == 0) || standby == 1) {
power = 1; standby = 0; cl();
times = millis(); w = 1; w1 = 1; menu = 100; menu1 = 0; mute = 1; audio(); brig = brig1; analogWrite(6, brig * 25);
}
// power on- ЭКРАН ПРИ ВКЛЮЧЕНИИ
if ((digitalRead(4) == LOW || ir.value == POWER) && power == 1) {power = 0; cl();times = millis(); w = 1; w1 = 1; menu = 0; menu1 = 0; brig = brig0;
analogWrite(6, brig * 25);
digitalWrite(12, HIGH);//включение питания 1й выход
lcd.setCursor(0, 0); lcd.print(" BU DIGITAL SARAY ");//1 строка
lcd.setCursor(0, 1); lcd.print("POWER AMPLIFIER 5.1");//2 строка
lcd.setCursor(0, 2); lcd.print(" SYSTEM LOADING ");//3 строка
lcd.setCursor(0, 3); lcd.write(5); delay(200); lcd.write(2); delay(200); lcd.write(5); delay(200); lcd.write(2); delay(200);
lcd.write(5); delay(200); lcd.write(2); delay(200); lcd.write(5); delay(200); lcd.write(2); delay(200);
lcd.write(5); delay(200); lcd.write(2); delay(200);//бегущая полоска загрузки 4 строка
digitalWrite(13, HIGH); //включение питания с задержкой(софтстарт) 2й выход
//можно ставить в любое место,в строку заргузки, в зависимости от величины задержки включения 2го выхода
lcd.write(5); delay(200); lcd.write(2); delay(200); lcd.write(5); delay(200); lcd.write(2); delay(200);
lcd.write(5); delay(150); lcd.write(2); delay(150); lcd.write(5); delay(150); lcd.write(2); delay(150);
lcd.write(5); delay(100); lcd.write(2); delay(100);//бегущая полоска загрузки 4 строка
delay(1000);mute = 0; audio(); cl();//задержка команды MUTE при включении, если не надо, задержку можно убрать.
//-----mute = 0; audio(); cl();------это обязательно осавляем, иначе будут глюки....
}
// power off//выключение
if (power == 1) {digitalWrite(12, LOW); // output standby
} else {digitalWrite(12, HIGH);
}
if (power == 1) {digitalWrite(13, LOW); // output standby delay
}
/// IR ////////////////////////////////////////
if ( irrecv.decode( &ir )) {
Serial.print("0x"); // IR приемник - чтение, в мониторе порта отображаются коды кнопок
Serial.println( ir.value, HEX);
irrecv.resume();
times = millis();
w = 1;
w1 = 1;
}
if (ir.value == 0) {
gr1 = 0; // запрет нажатий не активных кнопок пульта
gr2 = 0;
}
////////////// VOLUME ///////////////////////////////////////////////////////////////////
if (menu == 0) {
// кнопка >
if (ir.value == VOLUME_UP) {vol++;gr1 = 1;gr2 = 0;cl1();times = millis();w = 1;vol_func();audio();}
// кнопка >>>>>>
if (ir.value == 0xFFFFFFFF and gr1 == 1) {vol++;gr2 = 0;cl1();times = millis();;w = 1;vol_func();audio();}
// кнопка <
if (ir.value == VOLUME_DW) {vol--;gr1 = 0;gr2 = 1;cl1();times = millis();;w = 1;vol_func();audio();}
// кнопка <<<<<<
if (ir.value == 0xFFFFFFFF and gr2 == 1) {vol--;gr1 = 0;cl1();times = millis();w = 1;vol_func();audio();}
if (newPosition != oldPosition) {oldPosition = newPosition;vol = vol + newPosition;
myEnc.write(0);newPosition = 0; times = millis();w = 1;w1 = 1;vol_func();audio();}
a[0] = (vol) / 10; a[1] = (vol) % 10;
for (x = 0; x < 2; x++) {
switch (x) {
case 0: e1 = 10, e2 = 11, e3 = 12;break;
case 1: e1 = 14, e2 = 15, e3 = 16;break;}
digit();
}
//Минус (гаснущий при нуле)перед цифрами уровня громкости
lcd.setCursor(8, 0); if (vol > 0) {lcd.write(5);} else {lcd.print(" ");//{lcd.write(5);---какой символ отображать----из таблички а вначале скйча
}
////Вывод температуры на основной экран///////
static uint32_t tmr;
if (millis() - tmr >= 800) {
tmr = millis(); ///время опроса датчика
// читаем прошлое значение
if (sensor.readTemp()) {lcd.setCursor(16, 3);lcd.print(sensor.getTemp(),0);lcd.write(223);lcd.print("C");}//выводим на экран
else {lcd.setCursor(16, 3);lcd.print("--ER");delay(250);lcd.setCursor(16, 3);lcd.print(" ");}//если обрыв датчика пишем error
// запрашиваем новое измерение
sensor.requestTemp();
//термозащита //4 строка
if ((sensor.getTemp())>30)//вот тут меняем уставку защиты.....50...90 градусов....или 100))))
{mute = 1; audio();
lcd.setCursor(0, 3);lcd.print("HOT TEMP!");delay(250);lcd.print(" MUTE!");delay(250);
lcd.setCursor(0, 3);lcd.print(" ");}//вместо часов выводм сообщение....
else {lcd.setCursor(0, 3);
mute = 0; audio();//или на это место выводим часы.....
lcd.print(hour / 10); lcd.print(hour % 10); lcd.print(":");
lcd.print(minut / 10); lcd.print(minut % 10); lcd.print(":");
lcd.print(secon / 10); lcd.print(secon % 10); lcd.print(" ");}
}
//надписи основного экрана
lcd.setCursor(0, 0); lcd.print("VOLUME");//1 строка
lcd.setCursor(0, 1); lcd.print("CONTROL");//2 строка
lcd.setCursor(18, 1); lcd.print("dB");//2строка после цифр уровня громкости
lcd.setCursor(0, 2); lcd.print("--------------------");//3 строка
//lcd.setCursor(0, 3);//4 строка
// потом дата
//lcd.print(data / 10); lcd.print(data % 10); lcd.print("-");
//lcd.print(mon / 10); lcd.print(mon % 10); lcd.print("-");
//lcd.print(year);
//яркость подсветки....
brig = brig0;analogWrite(6, brig * 25);
}
///////// ATT //////////////////////////////////////////////////////////////////////////////
if (menu == 1) {
switch (menu1) {
case 0: temp0 = ch1; break;
case 1: temp0 = ch2; break;
case 2: temp0 = ch3; break;
case 3: temp0 = ch4; break;
case 4: temp0 = ch5; break;
case 5: temp0 = ch6; break;
case 6: temp0 = brig0; break;
case 7: temp0 = brig1; break;
}
// кнопка >
if (ir.value == VOLUME_UP) {temp0--; gr1 = 1;gr2 = 0;cl1();times = millis();w = 1;www = 1;}
// кнопка >>>>>>
if (ir.value == 0xFFFFFFFF and gr1 == 1) {temp0--;gr2 = 0;cl1();times = millis();;w = 1;w = 1;www = 1;}
// кнопка <
if (ir.value == VOLUME_DW) {temp0++; gr1 = 0;gr2 = 1;cl1();times = millis();;w = 1;w = 1;www = 1;
}
// кнопка <<<<<<
if (ir.value == 0xFFFFFFFF and gr2 == 1) {temp0++;gr1 = 0;cl1();times = millis();w = 1;w = 1;www = 1;}
if (newPosition != oldPosition) {oldPosition = newPosition;temp0 = temp0 - newPosition; myEnc.write(0); newPosition = 0; times = millis(); w = 1; www = 1;
}
switch (menu1) {
case 0: ch1 = temp0; if (ch1 < 0) {ch1 = 0;} if (ch1 > 15) {ch1 = 15;} break;
case 1: ch2 = temp0; if (ch2 < 0) {ch2 = 0;} if (ch2 > 15) {ch2 = 15;} break;
case 2: ch3 = temp0; if (ch3 < 0) {ch3 = 0;} if (ch3 > 15) {ch3 = 15;} break;
case 3: ch4 = temp0; if (ch4 < 0) {ch4 = 0;} if (ch4 > 15) {ch4 = 15;} break;
case 4: ch5 = temp0; if (ch5 < 0) {ch5 = 0;} if (ch5 > 15) {ch5 = 15;} break;
case 5: ch6 = temp0; if (ch6 < 0) {ch6 = 0;} if (ch6 > 15) {ch6 = 15;} break;
case 6: brig0 = temp0; brig0_func(); break;
case 7: brig1 = temp0; brig1_func(); break;
}
au();
if (menu1 < 7) {brig = brig0;}
if (menu1 == 7) {brig = brig1;}
analogWrite(6, brig * 25);
for (i = 0; i < 8; i++) {
if (menu1 == i) {
lcd.setCursor(mesto2[i], mesto3[i]);
lcd.print(char(126));
} else {
lcd.setCursor(mesto2[i], mesto3[i]);
lcd.print(" ");
}
}
lcd.setCursor(1, 0); lcd.print("Lfront"); if (ch1 == 0) {
lcd.print(" ");
} lcd.print(-ch1); if (ch1 < 10) {
lcd.print(" ");
}
lcd.setCursor(11, 0); lcd.print("Rfront"); if (ch2 == 0) {
lcd.print(" ");
} lcd.print(-ch2); if (ch2 < 10) {
lcd.print(" ");
}
lcd.setCursor(1, 1); lcd.print("L rear"); if (ch3 == 0) {
lcd.print(" ");
} lcd.print(-ch3); if (ch3 < 10) {
lcd.print(" ");
}
lcd.setCursor(11, 1); lcd.print("R rear"); if (ch4 == 0) {
lcd.print(" ");
} lcd.print(-ch4); if (ch4 < 10) {
lcd.print(" ");
}
lcd.setCursor(1, 2); lcd.print("Center"); if (ch5 == 0) {
lcd.print(" ");
} lcd.print(-ch5); if (ch5 < 10) {
lcd.print(" ");
}
lcd.setCursor(11, 2); lcd.print("SubW "); if (ch6 == 0) {
lcd.print(" ");
} lcd.print(-ch6); if (ch6 < 10) {
lcd.print(" ");
}
lcd.setCursor(1, 3); lcd.print("BR ON "); lcd.print(brig0); lcd.print(" ");
lcd.setCursor(11, 3); lcd.print("BR OFF "); lcd.print(brig1); lcd.print(" ");
}
//////// menu set time /////////////////////////////////////
if (menu == 2) {
hh = DateTime.hour; mm = DateTime.minute; ss = DateTime.second; dd = DateTime.day; mn = DateTime.month; gg = DateTime.year;
switch (menu2) {
case 0: time_temp = hh; break;
case 1: time_temp = mm; break;
case 2: time_temp = ss; break;
case 3: time_temp = dd; break;
case 4: time_temp = mn; break;
case 5: time_temp = gg; break;
}
if (newPosition != oldPosition) {
oldPosition = newPosition;
time_temp = time_temp - newPosition; myEnc.write(0); newPosition = 0; times = millis(); w = 1; tim_w = 1;
}
switch (menu2) {
case 0: hh = time_temp;
if (hh < 0) {hh = 0;}
if (hh > 23) {hh = 23;} break;
case 1: mm = time_temp;
if (mm < 0) {mm = 0;}
if (mm > 59) {mm = 59;} break;
case 2: ss = time_temp;
if (ss < 0) {ss = 0;}
if (ss > 59) {ss = 59;} break;
case 3: dd = time_temp;
if (dd < 1) {dd = 1;}
if (dd > 31) {dd = 31;} break;
case 4: mn = time_temp;
if (mn < 1) {mn = 1;}
if (mn > 12) {mn = 12;} break;
case 5: gg = time_temp;
if (gg < 2022) {gg = 2022;}
if (gg > 2100) {gg = 2100;} break;
}
lcd.setCursor(0, 0); lcd.print("TIME CORRECTION");
lcd.setCursor(0, 1); lcd.print("--------------------");
lcd.setCursor(0, 2);
if (menu2 == 0) {
lcd.print("set hour ");
}
if (menu2 == 1) {
lcd.print("set minute ");
}
if (menu2 == 2) {
lcd.print("set seconds");
}
if (menu2 == 3) {
lcd.print("set date ");
}
if (menu2 == 4) {
lcd.print("set month ");
}
if (menu2 == 5) {
lcd.print("set year ");
}
lcd.setCursor(0, 3);
lcd.print(hour / 10); lcd.print(hour % 10); lcd.print(":");
lcd.print(minut / 10); lcd.print(minut % 10); lcd.print(":");
lcd.print(secon / 10); lcd.print(secon % 10); lcd.print(" ");
lcd.print(data / 10); lcd.print(data % 10); lcd.print("-");
lcd.print(mon / 10); lcd.print(mon % 10); lcd.print("-");
lcd.print(year);
if (tim_w == 1) {
tim_w = 0;
clock.setDateTime(gg, mn, dd, hh, mm, ss);
delay(100);
}
}
/////// EEPROM //////////////////////////////////////
if (millis() - times > 10000 && w1 == 1 && mute == 0 && power == 0) {
w1 = 0;
EEPROM.update(0, vol); EEPROM.update(1, ch1); EEPROM.update(2, ch2); EEPROM.update(3, ch3);
EEPROM.update(4, ch4); EEPROM.update(5, ch5); EEPROM.update(6, ch6);
EEPROM.update(7, brig0); EEPROM.update(8, brig1);
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 < 6; i++) {
for (i = 0; i < 4; i++) {
switch (i) {
case 0: e1 = 1, e2 = 2, e3 = 3; break;
case 1: e1 = 5, e2 = 6, e3 = 7; break;
case 2: e1 = 12, e2 = 13, e3 = 14; break;
case 3: e1 = 16, e2 = 17, e3 = 18; break;
//case 4: e1 = 14, e2 = 15, e3 = 16; break;
// case 5: e1 = 17, e2 = 18, e3 = 19; break;
}
switch (a[i]) {
case 0: d1=1,d2=2,d3=3,d4=4,d5=5,d6=6;break;
case 1: d1=2,d2=3,d3=32,d4=5,d5=8,d6=5;break;
case 2: d1=7,d2=7,d3=3,d4=8,d5=5,d6=5;break;
case 3: d1=7,d2=7,d3=3,d4=5,d5=5,d6=6;break;
case 4: d1=4,d2=5,d3=8,d4=32,d5=32,d6=8;break;
case 5: d1=8,d2=7,d3=7,d4=5,d5=5,d6=6;break;
case 6: d1=1,d2=7,d3=7,d4=4,d5=5,d6=6;break;
case 7: d1=2,d2=2,d3=3,d4=32,d5=32,d6=8;break;
case 8: d1=1,d2=7,d3=3,d4=4,d5=5,d6=6;break;
case 9: d1=1,d2=7,d3=3,d4=5,d5=5,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);
}
//мигание двух точек, которые разделяют час и минуты
//нечётное - точки1
if(secon % 10 == 1||secon % 10 == 3||secon % 10 == 5||secon % 10 == 7||secon % 10 == 9)
{lcd.setCursor(9,0);lcd.write(2);lcd.setCursor(9,1);lcd.write(5);
lcd.setCursor(10,0);lcd.write(2);lcd.setCursor(10,1);lcd.write(5);}
//четное - точки2( можно пробелы вставить---lcd.print(" ");---)
if(secon % 10 == 0||secon % 10 == 2||secon % 10 == 4||secon % 10 == 6||secon % 10 == 8)
{lcd.setCursor(9,0);lcd.write(5);lcd.setCursor(9,1);lcd.write(2);
lcd.setCursor(10,0);lcd.write(5);lcd.setCursor(10,1);lcd.write(2);}
lcd.setCursor(0, 2); lcd.print("--------------------");
lcd.setCursor(6, 3); lcd.print("STAND BY");
}
} /// END LOOP
void au() {
if (www == 1) {
audio();
www = 0;
}
}
void cl() {
ir.value = 0;
delay(300);
lcd.clear();
}
void cl1() {
ir.value = 0;
delay(200);
}
void brig1_func() {
if (brig1 > 10) {
brig1 = 10;
} if (brig1 < 0) {
brig1 = 0;
}
}
void brig0_func() {
if (brig0 > 10) {
brig0 = 10;
} if (brig0 < 0) {
brig0 = 0;
}
}
void audio() {
pt.clear();
// pt.setVolume(75); // int 0...79
pt.setVol1(79 - (vol + ch1)); // int 0...79
pt.setVol2(79 - (vol + ch2)); // int 0...79
pt.setVol3(79 - (vol + ch3)); // int 0...79
pt.setVol4(79 - (vol + ch4)); // int 0...79
pt.setVol5(79 - (vol + ch5)); // int 0...79
pt.setVol6(79 - (vol + ch6)); // int 0...79
pt.setMute(mute); // mute 0 - off / 1 - on
}
void to_Timer() {
newPosition = myEnc.read() / 4;
}
void vol_func() {
if (0 > vol) {
vol = 0;
} if (64 < vol) {
vol = 64;
}
}
void digit() {
switch (a[x]) {
case 0: d1=1,d2=2,d3=3,d4=4,d5=5,d6=6;break;
case 1: d1=2,d2=3,d3=32,d4=5,d5=8,d6=5;break;
case 2: d1=7,d2=7,d3=3,d4=8,d5=5,d6=5;break;
case 3: d1=7,d2=7,d3=3,d4=5,d5=5,d6=6;break;
case 4: d1=4,d2=5,d3=8,d4=32,d5=32,d6=8;break;
case 5: d1=8,d2=7,d3=7,d4=5,d5=5,d6=6;break;
case 6: d1=1,d2=7,d3=7,d4=4,d5=5,d6=6;break;
case 7: d1=2,d2=2,d3=3,d4=32,d5=32,d6=8;break;
case 8: d1=1,d2=7,d3=3,d4=4,d5=5,d6=6;break;
case 9: d1=1,d2=7,d3=3,d4=5,d5=5,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);
}