Страницы Назад 1 … 4 5 6 7 8 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → TDA7313 + энкодер + ИК пульт + анализатор спектра
O'k. Спасибо. Попробуем разобраться. Под MUTE надо будет библиотеку подшаманить. Сделаю, отпишусь.
И снова здравствуйте.
Проблемму с POWER через кнопку энкодера решил, опять же через ж---(тернии к звездам), из за недостатка серого вещества. При отключении с кнопки моргает надпись STANDBY, судя по всему продолжается выполнение
if((digitalRead(15)==HIGH)&&power==0){i=0;}if(i>3){power=1;mute=1;audio();cl();lcd.setCursor(0,0);lcd.print(" STANDBY ");cl();menu=100;audio();delay(700);}
хотя присутствует &&power==0, а, по идее, power=1;.
Заметил по изменению задержки моргания надписи " STANDBY " в зависимости от delay(700);.
С пульта все отрабатывает нормально.
Включение работает
if((digitalRead(15))==LOW&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl);
menu=0;time=millis();w=1;w2=1;i++;myEnc.write(0);delay(500);lcd.clear();}
//http://rcl-radio.ru/?p=58563
#define IR_1 0xFD50AF // Кнопка вверх
#define IR_2 0xFDCA35 // Кнопка вниз
#define IR_3 0xFD7887 // Кнопка >
#define IR_4 0xFD4AB5 // Кнопка <
#define IR_5 0xFD18E7 // Кнопка IN
#define IR_6 0xFD629D // Кнопка MUTE
#define IR_7 0xFD28D7 // Кнопка POWER
#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7313.h>
#include <boarddefs.h>
#include <IRremote.h>
IRrecv irrecv(10); // указываем вывод модуля IR приемника
TDA7313 tda;
decode_results ir;
Encoder myEnc(3, 2);//CLK, DT подключение энкодера
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);// RS,E,D4,D5,D6,D7 подключение LCD
byte a1[8]={0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
byte a2[8]={0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
byte a3[8]={0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
unsigned long newPosition,time,time1,oldPosition = -999;
int vol,w1,w2=1,gr1,gr2,vol_d,menu,w,z,z0,z1,bass_d,bass,treb_d,treb,i,loud,in,mute,power,gain,gain1,gain2,gain3,lr,rr,lf,rf;
void setup(){
Serial.begin(9600);
Wire.begin();irrecv.enableIRIn(); // запускаем модуль I2C,IR
lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
pinMode(15,INPUT);// КНОПКА ЭНКОДЕРA
pinMode(14,INPUT_PULLUP);// КНОПКА IN
pinMode(16,INPUT_PULLUP);// КНОПКА MUTE
pinMode(12,OUTPUT);//Питание для источника
pinMode(13,OUTPUT);//Питание STANDBY
MsTimer2::set(3, to_Timer);MsTimer2::start();
vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;in = EEPROM.read(3);
gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);loud = EEPROM.read(7);
lr = EEPROM.read(8);rr = EEPROM.read(9);lf = EEPROM.read(10);rf = EEPROM.read(11);
if(in==0){gain=gain1;}
if(in==1){gain=gain2;}
if(in==2){gain=gain3;}
lcd.setCursor(0,0);lcd.print("TDA7313 IR POWER");
lcd.setCursor(3,1);lcd.print(" Ver. 1 ");
delay(2000);audio();
lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}
void loop(){
//KEY
//MENU
if(digitalRead(15)==LOW&&power==0){menu++;cl();myEnc.write(0);i++;time=millis();
w=1;w2=1;if(menu>5){menu=0;}}// меню
//INPUT
if(digitalRead(14)==LOW&&power==0&&mute==0){in++;;cl();myEnc.write(0);time=millis();
w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
//MUTE
// if(digitalRead(6)==LOW&&mute==0&&power==0){mute=1;cl();w=0;w2=1;lcd.print(" MUTE ");menu=100;audio();}// mute on
// if(digitalRead(6)==LOW&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
//POWER
if((digitalRead(15)==HIGH)&&power==0){i=0;}if(i>3){power=1;mute=1;audio();
// cl();
lcd.setCursor(0,0);lcd.print(" STANDBY ");cl();menu=100;audio();delay(700);}// power off
if((digitalRead(15))==LOW&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
menu=0;time=millis();w=1;w2=1;i++;myEnc.write(0);delay(500);lcd.clear();}// power on
//LED
if(in==1&&power==0){digitalWrite(12,HIGH);}else{digitalWrite(12,LOW);} // INPUT POWER
if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} // выход STANDBY
// IR приемник
if ( irrecv.decode( &ir )){
Serial.print("0x");Serial.println( ir.value,HEX);
time1=millis();time=millis();
w=1;w1=1;irrecv.resume();}
//POWER
if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();
lcd.setCursor(0,0);lcd.print(" STANDBY ");w=0;menu=100;delay(700);}// power off
if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);
// lcd.clear();
}// power on
//MENU UP/DOWN
if(ir.value==IR_1&&power==0){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(menu>4){menu=0;}}// меню кнопка вверх
if(ir.value==IR_2&&power==0){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(menu<0){menu=4;}}// меню кнопка вниз
//INPUT
if(ir.value==IR_5&&power==0){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(in>2){in=0;}audio();// кнопка IN
//MUTE
if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;
lcd.print(" MUTE ");menu=100;audio();}// mute on
if(ir.value==IR_6&&mute==1&&power==0){mute=0;gr1=0;gr2=0;cl();
time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
}
//////////////////////////////////////// Volume 0...63 дБ ////////////////////////////////////
if(menu==0){
if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
lcd.setCursor(0,0);lcd.print("Volume ");
lcd.print(-78.75+(float)vol*1.25,0);
lcd.print(" ");
lcd.setCursor(10,0);lcd.print("dB IN");lcd.print(in+1);
vol_d=vol-15;
// lcd.setCursor(13,0);lcd.print("IN");lcd.print(in+1);
if(w2==1){
for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// индикация тембр НЧ -14...14 дБ //////////////////////////////////////
if(menu==1){
if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}
lcd.setCursor(0,0);lcd.print("Bass ");
lcd.print(" ");lcd.print(bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=bass*2+15;
if(w2==1){
for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// индикация тембр ВЧ -14...14 дБ ////////////////////////////////////////
if(menu==2){
if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}
lcd.setCursor(0,0);lcd.print("Treble ");
lcd.print(" ");lcd.print(treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=treb*2+15;
if(w2==1){
for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
///////////////////////////////////// BALANCE //////////////////////////////////////////////
if(menu==3){
if(ir.value==IR_3){lf++;lr++;rf--;rr--;cl1();
lcd.clear();w=1;//кнопка >
if(lf>10){lf=10;}if(rf<0){rf=0;}if(lr>10){lr=10;}if(rr<0){rr=0;}audio();}
if(ir.value==IR_4){lf--;lr--;rf++;rr++;cl1();
lcd.clear();w=1;//кнопка <
if(lf<0){lf=0;}if(rf>10){rf=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}audio();}
if (newPosition != oldPosition){
oldPosition = newPosition;
lf=lf+newPosition;lr=lr+newPosition;rf=rf-newPosition;rr=rr-newPosition;myEnc.write(0);newPosition=0;
lcd.clear();time=millis();w=1;
if(lf>10){lf=10;}if(lf<0){lf=0;}if(rf>10){rf=10;}if(rf<0){rf=0;}
if(lr>10){lr=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}if(rr<0){rr=0;}
audio();}
lcd.setCursor(0,0);
if(lf-5>=0){lcd.print("-");}else{lcd.print("+");}
lcd.print(abs(rf-5));lcd.print(" dB ");
lcd.print(" <> ");
if(rf-5>=0){lcd.print("-");}else{lcd.print("+");}
lcd.print(abs(rf-5));lcd.print(" dB ");
lcd.setCursor(0,1);lcd.print("L");
lcd.setCursor(15,1);lcd.print("R");
if(lf-5<0){lcd.setCursor(lf-5+7,1);lcd.write((uint8_t)0);}
if(lf-5>0){lcd.setCursor(lf-5+8,1);lcd.write((uint8_t)0);}
if(lf-5==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);w2=0;}
}
/////////////////////////////////// LOUDNESS ////////////////////////////////////////
if(menu==4){
if(ir.value==IR_3){loud++;cl1();if(loud>1){loud=0;}w=1;w2=1;audio();}
if (newPosition != oldPosition) {
oldPosition = newPosition;
loud=loud+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
if(loud>1){loud=0;}if(loud<0){loud=1;}audio();}
lcd.setCursor(0,0);lcd.print("LOUDNESS ");
if(loud==1){lcd.print("ON ");}else{lcd.print("OFF");}}
////////////////////////////////////// INPUT GAIN //////////////////////////////////////////
if(menu==5){
if(in==0){gain=gain1;}
if(in==1){gain=gain2;}
if(in==2){gain=gain3;}
/*
// if(ir.value==IR_3);gain++;gr1=1;gr2=0;cl1();w2=1;// кнопка >
if(ir.value==IR_3);{gain++;
// gr1=1;gr2=0;
cl1();
// w2=1;// кнопка >
if(ir.value==IR_4);gain--;gr1=0;gr2=1;cl1();w2=1;// кнопка <
if(gain>3){gain=3;}if(gain<0){gain=0;}audio();}
*/
if (newPosition != oldPosition) {
oldPosition = newPosition;
gain=gain+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
if(gain>3){gain=3;}if(gain<0){gain=0;}audio();}
if(in==0){gain1=gain;}
if(in==1){gain2=gain;}
if(in==2){gain3=gain;}
lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);
lcd.setCursor(0,1);lcd.print(" Gain ");lcd.print((float)gain*3.75);lcd.print(" dB ");}
//////////////////////////////////////////////////////////////////////////////////////////
if(millis()-time>5000 && w==1 && power==0){
EEPROM.update(0,vol);
EEPROM.update(1,bass+7);
EEPROM.update(2,treb+7);
EEPROM.update(3,in);
EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
EEPROM.update(7,loud);
EEPROM.update(8,lr);EEPROM.update(9,rr);EEPROM.update(10,lf);EEPROM.update(11,rf);
// lcd.clear();
w=0,w2=1;menu=0;cl();}
}// loop
void cl1(){ir.value=0;delay(50);}
void cl(){ir.value=0;delay(300);lcd.clear();}
void audio(){
tda.setVolume(vol); // громкость 0...63
tda.setAttLR(lr); // аттенюатор LR 0...31
tda.setAttRR(rr); // аттенюатор RR 0...31
tda.setAttLF(lf); // аттенюатор LF 0...31
tda.setAttRF(rf); // аттенюатор RF 0...31
tda.setSwitch(in,loud,gain); // вход 0...2, тонкомпенсация 1 вкл 0 выкл, усиление 0...3
tda.setBass(bass); // тембр НЧ -7...+7
tda.setTreble(treb); // тембр ВЧ -7...+7
}
С MUTE все еще запущеннее.
В даташите нашел только код для включения MUTE. Как выключить - ХЗ.
Посему есть просьба, если не сильно напряжно, реализовать режим MUTE через включение Speaker Attenuators mute или Volume -78dB, а при отключении просто читать данные Volume из EEPROM.
Можно только с пульта.
Есть еще одна просьба, сделать переключение входов по перепаду уровня на кнопке INPUT(не по наличию уровня), т.е. по моменту перехода из состояния нажатой кнопки в состояние отпущенной. Чтобы выключать питание удержанием кнопки INPUT без переключения входов.
Буду безмерно благодарен и счастлив.
Видео работы кнопки POWER в моем исполнении
https://drive.google.com/file/d/1n0QEM3 … sp=sharing
У Вас есть возможность использовать LCD1602 по шине i2c? Если да, то опубликуйте на форуме базовый скетч без переделок и опишите какие дополнения и изменения надо внести.
Скетч свой, или Ваш?
Если мой, то он в 128 посте.
Под i2c перепишу, скину. Сейчас не дома.
Переписал свой под i2c.
//http://rcl-radio.ru/?p=58563
#define IR_1 0xFD50AF // Кнопка вверх
#define IR_2 0xFDCA35 // Кнопка вниз
#define IR_3 0xFD7887 // Кнопка >
#define IR_4 0xFD4AB5 // Кнопка <
#define IR_5 0xFD18E7 // Кнопка IN
#define IR_6 0xFD629D // Кнопка MUTE
#define IR_7 0xFD28D7 // Кнопка POWER
#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7313.h>
#include <boarddefs.h>
#include <IRremote.h>
IRrecv irrecv(10); // указываем вывод модуля IR приемника
TDA7313 tda;
decode_results ir;
Encoder myEnc(3, 2);//CLK, DT подключение энкодера
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
byte a1[8]={0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
byte a2[8]={0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
byte a3[8]={0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
unsigned long newPosition,time,time1,oldPosition = -999;
int vol,w1,w2=1,gr1,gr2,vol_d,menu,w,z,z0,z1,bass_d,bass,treb_d,treb,i,loud,in,mute,power,gain,gain1,gain2,gain3,lr,rr,lf,rf;
void setup(){
Serial.begin(9600);
Wire.begin();irrecv.enableIRIn(); // запускаем модуль I2C,IR
lcd.begin();lcd.backlight();lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
pinMode(15,INPUT_PULLUP);// КНОПКА ЭНКОДЕРA
pinMode(14,INPUT_PULLUP);// КНОПКА IN
pinMode(16,INPUT_PULLUP);// КНОПКА MUTE
pinMode(12,OUTPUT);//Питание для источника
pinMode(13,OUTPUT);//Питание STANDBY
MsTimer2::set(3, to_Timer);MsTimer2::start();
vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;in = EEPROM.read(3);
gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);loud = EEPROM.read(7);
lr = EEPROM.read(8);rr = EEPROM.read(9);lf = EEPROM.read(10);rf = EEPROM.read(11);
if(in==0){gain=gain1;}
if(in==1){gain=gain2;}
if(in==2){gain=gain3;}
lcd.setCursor(0,0);lcd.print("TDA7313 IR POWER");
lcd.setCursor(3,1);lcd.print(" Ver. 1 ");
delay(2000);audio();
lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}
void loop(){
//KEY
//MENU
if(digitalRead(15)==LOW&&power==0){menu++;cl();myEnc.write(0);i++;time=millis();
w=1;w2=1;if(menu>5){menu=0;}}// меню
//INPUT
if(digitalRead(14)==LOW&&power==0&&mute==0){in++;;cl();myEnc.write(0);time=millis();
w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
//MUTE
// if(digitalRead(6)==LOW&&mute==0&&power==0){mute=1;cl();w=0;w2=1;lcd.print(" MUTE ");menu=100;audio();}// mute on
// if(digitalRead(6)==LOW&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
//POWER
if((digitalRead(15)==HIGH)&&power==0){i=0;}if(i>3){power=1;mute=1;audio();
// cl();
lcd.setCursor(0,0);lcd.print(" STANDBY ");cl();menu=100;audio();delay(700);}// power off
if((digitalRead(15))==LOW&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
menu=0;time=millis();w=1;w2=1;i++;myEnc.write(0);delay(500);lcd.clear();}// power on
//LED
if(in==1&&power==0){digitalWrite(12,HIGH);}else{digitalWrite(12,LOW);} // INPUT POWER
if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} // выход STANDBY
// IR приемник
if ( irrecv.decode( &ir )){
Serial.print("0x");Serial.println( ir.value,HEX);
time1=millis();time=millis();
w=1;w1=1;irrecv.resume();}
//POWER
if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();
lcd.setCursor(0,0);lcd.print(" STANDBY ");w=0;menu=100;delay(700);}// power off
if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);
// lcd.clear();
}// power on
//MENU UP/DOWN
if(ir.value==IR_1&&power==0){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(menu>4){menu=0;}}// меню кнопка вверх
if(ir.value==IR_2&&power==0){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(menu<0){menu=4;}}// меню кнопка вниз
//INPUT
if(ir.value==IR_5&&power==0){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(in>2){in=0;}audio();}// кнопка IN
//MUTE
if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;
lcd.print(" MUTE ");menu=100;audio();}// mute on
if(ir.value==IR_6&&mute==1&&power==0){mute=0;gr1=0;gr2=0;cl();
time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
//////////////////////////////////////// Volume 0...63 дБ ////////////////////////////////////
if(menu==0){
if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
lcd.setCursor(0,0);lcd.print("Volume ");
lcd.print(-78.75+(float)vol*1.25,0);
lcd.print(" ");
lcd.setCursor(10,0);lcd.print("dB IN");lcd.print(in+1);
vol_d=vol-15;
// lcd.setCursor(13,0);lcd.print("IN");lcd.print(in+1);
if(w2==1){
for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// индикация тембр НЧ -14...14 дБ //////////////////////////////////////
if(menu==1){
if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}
lcd.setCursor(0,0);lcd.print("Bass ");
lcd.print(" ");lcd.print(bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=bass*2+15;
if(w2==1){
for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// индикация тембр ВЧ -14...14 дБ ////////////////////////////////////////
if(menu==2){
if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}
lcd.setCursor(0,0);lcd.print("Treble ");
lcd.print(" ");lcd.print(treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=treb*2+15;
if(w2==1){
for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
///////////////////////////////////// BALANCE //////////////////////////////////////////////
if(menu==3){
if(ir.value==IR_3){lf++;lr++;rf--;rr--;cl1();
lcd.clear();w=1;//кнопка >
if(lf>10){lf=10;}if(rf<0){rf=0;}if(lr>10){lr=10;}if(rr<0){rr=0;}audio();}
if(ir.value==IR_4){lf--;lr--;rf++;rr++;cl1();
lcd.clear();w=1;//кнопка <
if(lf<0){lf=0;}if(rf>10){rf=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}audio();}
if (newPosition != oldPosition){
oldPosition = newPosition;
lf=lf+newPosition;lr=lr+newPosition;rf=rf-newPosition;rr=rr-newPosition;myEnc.write(0);newPosition=0;
lcd.clear();time=millis();w=1;
if(lf>10){lf=10;}if(lf<0){lf=0;}if(rf>10){rf=10;}if(rf<0){rf=0;}
if(lr>10){lr=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}if(rr<0){rr=0;}
audio();}
lcd.setCursor(0,0);
if(lf-5>=0){lcd.print("-");}else{lcd.print("+");}
lcd.print(abs(rf-5));lcd.print(" dB ");
lcd.print(" <> ");
if(rf-5>=0){lcd.print("-");}else{lcd.print("+");}
lcd.print(abs(rf-5));lcd.print(" dB ");
lcd.setCursor(0,1);lcd.print("L");
lcd.setCursor(15,1);lcd.print("R");
if(lf-5<0){lcd.setCursor(lf-5+7,1);lcd.write((uint8_t)0);}
if(lf-5>0){lcd.setCursor(lf-5+8,1);lcd.write((uint8_t)0);}
if(lf-5==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);w2=0;}
}
/////////////////////////////////// LOUDNESS ////////////////////////////////////////
if(menu==4){
if(ir.value==IR_3){loud++;cl1();if(loud>1){loud=0;}w=1;w2=1;audio();}
if (newPosition != oldPosition) {
oldPosition = newPosition;
loud=loud+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
if(loud>1){loud=0;}if(loud<0){loud=1;}audio();}
lcd.setCursor(0,0);lcd.print("LOUDNESS ");
if(loud==1){lcd.print("ON ");}else{lcd.print("OFF");}}
////////////////////////////////////// INPUT GAIN //////////////////////////////////////////
if(menu==5){
if(in==0){gain=gain1;}
if(in==1){gain=gain2;}
if(in==2){gain=gain3;}
/*
// if(ir.value==IR_3);gain++;gr1=1;gr2=0;cl1();w2=1;// кнопка >
if(ir.value==IR_3);{gain++;
// gr1=1;gr2=0;
cl1();
// w2=1;// кнопка >
if(ir.value==IR_4);gain--;gr1=0;gr2=1;cl1();w2=1;// кнопка <
if(gain>3){gain=3;}if(gain<0){gain=0;}audio();}
*/
if (newPosition != oldPosition) {
oldPosition = newPosition;
gain=gain+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
if(gain>3){gain=3;}if(gain<0){gain=0;}audio();}
if(in==0){gain1=gain;}
if(in==1){gain2=gain;}
if(in==2){gain3=gain;}
lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);
lcd.setCursor(0,1);lcd.print(" Gain ");lcd.print((float)gain*3.75);lcd.print(" dB ");}
//////////////////////////////////////////////////////////////////////////////////////////
if(millis()-time>5000 && w==1 && power==0){
EEPROM.update(0,vol);
EEPROM.update(1,bass+7);
EEPROM.update(2,treb+7);
EEPROM.update(3,in);
EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
EEPROM.update(7,loud);
EEPROM.update(8,lr);EEPROM.update(9,rr);EEPROM.update(10,lf);EEPROM.update(11,rf);
// lcd.clear();
w=0,w2=1;menu=0;cl();}
}// loop
void cl1(){ir.value=0;delay(50);}
void cl(){ir.value=0;delay(300);lcd.clear();}
void audio(){
tda.setVolume(vol); // громкость 0...63
tda.setAttLR(lr); // аттенюатор LR 0...31
tda.setAttRR(rr); // аттенюатор RR 0...31
tda.setAttLF(lf); // аттенюатор LF 0...31
tda.setAttRF(rf); // аттенюатор RF 0...31
tda.setSwitch(in,loud,gain); // вход 0...2, тонкомпенсация 1 вкл 0 выкл, усиление 0...3
tda.setBass(bass); // тембр НЧ -7...+7
tda.setTreble(treb); // тембр ВЧ -7...+7
}
P.S. Доступ к видео открыл.
Power как активируется? нажатие и удержание кнопки энкодера?
Да, про хотелки забыл.
1.Сделать переключение входов по перепаду уровня на кнопке INPUT(не по наличию уровня), т.е. по моменту перехода из состояния нажатой кнопки в состояние отпущенной. Чтобы выключать питание удержанием кнопки INPUT без переключения входов.
Если сложно, просто решить проблемму в моей реализации через кнопку энкодера(пост 128).
2.Реализовать режим MUTE.
Мои задумки - через включение Speaker Attenuators mute или Volume -78dB, а при отключении просто читать данные Volume из EEPROM. Или как то по другому.
Может для power сделать отдельную кнопку?
Если я правильно Вас понял, power активируется при удержании кнопки IN, но не должен переключать IN при этом? Далее для включения надо также нажать IN, без переключения входа.
Хочется как на автомагнитолах, так как Вы описали в посте 141.
Удержание кнопки IN - выключение. Кратковременное нажатии кнопки In когды выключено - срабатывает включение, без изминения IN.
Кратковременное нажатие IN во включенном состоянии меняет IN/
MUTE сделал, не тестировал, должно работать
//http://rcl-radio.ru/?p=58563
#define IR_1 0xFD50AF // Кнопка вверх
#define IR_2 0xFDCA35 // Кнопка вниз
#define IR_3 0xFD7887 // Кнопка >
#define IR_4 0xFD4AB5 // Кнопка <
#define IR_5 0xFD18E7 // Кнопка IN
#define IR_6 0xFD629D // Кнопка MUTE
#define IR_7 0xFD28D7 // Кнопка POWER
#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7313.h>
#include <boarddefs.h>
#include <IRremote.h>
IRrecv irrecv(10); // указываем вывод модуля IR приемника
TDA7313 tda;
decode_results ir;
Encoder myEnc(3, 2);//CLK, DT подключение энкодера
//LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27,16,2);
byte a1[8]={0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
byte a2[8]={0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
byte a3[8]={0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
unsigned long newPosition,time,time1,oldPosition = -999;
int vol,w1,w2=1,gr1,gr2,vol_d,menu,w,z,z0,z1,bass_d,bass,treb_d,treb,i,loud,in,mute,power,gain,gain1,gain2,gain3,lr,rr,lf,rf,kkk,vol_old,inp,inp1;
void setup(){
Serial.begin(9600);
Wire.begin();irrecv.enableIRIn(); // запускаем модуль I2C,IR
lcd.init();lcd.backlight();lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
pinMode(15,INPUT_PULLUP);// КНОПКА ЭНКОДЕРA
pinMode(14,INPUT_PULLUP);// КНОПКА IN
pinMode(16,INPUT_PULLUP);// КНОПКА MUTE
pinMode(12,OUTPUT);//Питание для источника
pinMode(13,OUTPUT);//Питание STANDBY
MsTimer2::set(3, to_Timer);MsTimer2::start();
vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;in = EEPROM.read(3);
gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);loud = EEPROM.read(7);
lr = EEPROM.read(8);rr = EEPROM.read(9);lf = EEPROM.read(10);rf = EEPROM.read(11);
if(in==0){gain=gain1;}
if(in==1){gain=gain2;}
if(in==2){gain=gain3;}
lcd.setCursor(0,0);lcd.print("TDA7313 IR POWER");
lcd.setCursor(3,1);lcd.print(" Ver. 1 ");
delay(2000);audio();
lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}
void loop(){
//KEY
if(power==0){
//MENU
if(digitalRead(15)==LOW){menu++;cl();myEnc.write(0);i++;time=millis();
w=1;w2=1;if(menu>5){menu=0;}}// меню
//INPUT
if(digitalRead(14)==LOW){inp1=1;kkk++;delay(200);}
if(digitalRead(14)==HIGH&&inp1==1&&kkk<5){inp1=2;kkk=0;}
if(inp1==2&&mute==0){inp1=0;in++;;cl();myEnc.write(0);time=millis();
w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
//MUTE
if(digitalRead(16)==LOW&&mute==0){mute=1;cl();w=0;w2=1;lcd.print(" MUTE ");menu=100;vol_old=vol;vol=0;audio();}// mute on
if(digitalRead(16)==LOW&&mute==1){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);vol=vol_old;audio();}// mute off
}
//POWER
if(kkk>5){inp=1;kkk=0;}
if(inp==1 && power==0){inp=0;power=1;mute=1;audio();gr1=0;gr2=0;cl();lcd.setCursor(0,0);lcd.print(" STANDBY ");w=0;menu=100;audio();delay(500);}// power off
if(digitalRead(14)==LOW && power==1){inp1=0;inp=0;power=0;mute=0;audio();gr1=0;gr2=0;cl();menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);}// power on
//LED
if(in==1&&power==0){digitalWrite(12,HIGH);}else{digitalWrite(12,LOW);} // INPUT POWER
if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} // выход STANDBY
// IR приемник
if ( irrecv.decode( &ir )){
Serial.print("0x");Serial.println( ir.value,HEX);
time1=millis();time=millis();
w=1;w1=1;irrecv.resume();}
//POWER
if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();
lcd.setCursor(0,0);lcd.print(" STANDBY ");w=0;menu=100;delay(700);}// power off
if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);
// lcd.clear();
}// power on
if(power==0){
//MENU UP/DOWN
if(ir.value==IR_1&&power==0){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(menu>4){menu=0;}}// меню кнопка вверх
if(ir.value==IR_2&&power==0){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(menu<0){menu=4;}}// меню кнопка вниз
//INPUT
if(ir.value==IR_5&&power==0){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
if(in>2){in=0;}audio();// кнопка IN
//MUTE
if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;
lcd.print(" MUTE ");menu=100;vol_old=vol;vol=0;audio();}// mute on
if(ir.value==IR_6&&mute==1&&power==0){mute=0;gr1=0;gr2=0;cl();
time=millis();w=1;w2=1;menu=0;myEnc.write(0);vol=vol_old;audio();}// mute off
}
}
//////////////////////////////////////// Volume 0...63 дБ ////////////////////////////////////
if(menu==0){
if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;
if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
lcd.setCursor(0,0);lcd.print("Volume ");
lcd.print(-78.75+(float)vol*1.25,0);
lcd.print(" ");
lcd.setCursor(10,0);lcd.print("dB IN");lcd.print(in+1);
vol_d=vol-15;
// lcd.setCursor(13,0);lcd.print("IN");lcd.print(in+1);
if(w2==1){
for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// индикация тембр НЧ -14...14 дБ //////////////////////////////////////
if(menu==1){
if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}
lcd.setCursor(0,0);lcd.print("Bass ");
lcd.print(" ");lcd.print(bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=bass*2+15;
if(w2==1){
for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// индикация тембр ВЧ -14...14 дБ ////////////////////////////////////////
if(menu==2){
if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка >>>>>>
if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
oldPosition = newPosition;
treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}
lcd.setCursor(0,0);lcd.print("Treble ");
lcd.print(" ");lcd.print(treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=treb*2+15;
if(w2==1){
for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
///////////////////////////////////// BALANCE //////////////////////////////////////////////
if(menu==3){
if(ir.value==IR_3){lf++;lr++;rf--;rr--;cl1();
lcd.clear();w=1;//кнопка >
if(lf>10){lf=10;}if(rf<0){rf=0;}if(lr>10){lr=10;}if(rr<0){rr=0;}audio();}
if(ir.value==IR_4){lf--;lr--;rf++;rr++;cl1();
lcd.clear();w=1;//кнопка <
if(lf<0){lf=0;}if(rf>10){rf=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}audio();}
if (newPosition != oldPosition){
oldPosition = newPosition;
lf=lf+newPosition;lr=lr+newPosition;rf=rf-newPosition;rr=rr-newPosition;myEnc.write(0);newPosition=0;
lcd.clear();time=millis();w=1;
if(lf>10){lf=10;}if(lf<0){lf=0;}if(rf>10){rf=10;}if(rf<0){rf=0;}
if(lr>10){lr=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}if(rr<0){rr=0;}
audio();}
lcd.setCursor(0,0);
if(lf-5>=0){lcd.print("-");}else{lcd.print("+");}
lcd.print(abs(rf-5));lcd.print(" dB ");
lcd.print(" <> ");
if(rf-5>=0){lcd.print("-");}else{lcd.print("+");}
lcd.print(abs(rf-5));lcd.print(" dB ");
lcd.setCursor(0,1);lcd.print("L");
lcd.setCursor(15,1);lcd.print("R");
if(lf-5<0){lcd.setCursor(lf-5+7,1);lcd.write((uint8_t)0);}
if(lf-5>0){lcd.setCursor(lf-5+8,1);lcd.write((uint8_t)0);}
if(lf-5==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);w2=0;}
}
/////////////////////////////////// LOUDNESS ////////////////////////////////////////
if(menu==4){
if(ir.value==IR_3){loud++;cl1();if(loud>1){loud=0;}w=1;w2=1;audio();}
if (newPosition != oldPosition) {
oldPosition = newPosition;
loud=loud+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
if(loud>1){loud=0;}if(loud<0){loud=1;}audio();}
lcd.setCursor(0,0);lcd.print("LOUDNESS ");
if(loud==1){lcd.print("ON ");}else{lcd.print("OFF");}}
////////////////////////////////////// INPUT GAIN //////////////////////////////////////////
if(menu==5){
if(in==0){gain=gain1;}
if(in==1){gain=gain2;}
if(in==2){gain=gain3;}
/*
// if(ir.value==IR_3);gain++;gr1=1;gr2=0;cl1();w2=1;// кнопка >
if(ir.value==IR_3);{gain++;
// gr1=1;gr2=0;
cl1();
// w2=1;// кнопка >
if(ir.value==IR_4);gain--;gr1=0;gr2=1;cl1();w2=1;// кнопка <
if(gain>3){gain=3;}if(gain<0){gain=0;}audio();}
*/
if (newPosition != oldPosition) {
oldPosition = newPosition;
gain=gain+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
if(gain>3){gain=3;}if(gain<0){gain=0;}audio();}
if(in==0){gain1=gain;}
if(in==1){gain2=gain;}
if(in==2){gain3=gain;}
lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);
lcd.setCursor(0,1);lcd.print(" Gain ");lcd.print((float)gain*3.75);lcd.print(" dB ");}
//////////////////////////////////////////////////////////////////////////////////////////
if(millis()-time>5000 && w==1 && power==0){
EEPROM.update(0,vol);
EEPROM.update(1,bass+7);
EEPROM.update(2,treb+7);
EEPROM.update(3,in);
EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
EEPROM.update(7,loud);
EEPROM.update(8,lr);EEPROM.update(9,rr);EEPROM.update(10,lf);EEPROM.update(11,rf);
// lcd.clear();
w=0,w2=1;menu=0;cl();}
}// loop
void cl1(){ir.value=0;delay(50);}
void cl(){ir.value=0;delay(300);lcd.clear();}
void audio(){
tda.setVolume(vol); // громкость 0...63
tda.setAttLR(lr); // аттенюатор LR 0...31
tda.setAttRR(rr); // аттенюатор RR 0...31
tda.setAttLF(lf); // аттенюатор LF 0...31
tda.setAttRF(rf); // аттенюатор RF 0...31
tda.setSwitch(in,loud,gain); // вход 0...2, тонкомпенсация 1 вкл 0 выкл, усиление 0...3
tda.setBass(bass); // тембр НЧ -7...+7
tda.setTreble(treb); // тембр ВЧ -7...+7
}
Сейчас посмотрим.
Кстати, способ, по удержанию кнопки энкодера неплохо бы применить в Ваших проектах для вызова доп меню.
POWER работает, огромное спасибо.
Разжуйте, пожалуйста, кто такие
if(kkk>5){inp=1;kkk=0;}
и за что они отвечают. Я пытаюсь учиться.
if(digitalRead(14)==LOW){inp1=1;kkk++;delay(200);} // нажимаем и держим кнопку, идет накопление kkk
если kkk>5, то срабатывает power
if(kkk>5){inp=1;kkk=0;}
Кнопка In нажата и отпущена, то kkk будет < 5
if(digitalRead(14)==HIGH&&inp1==1&&kkk<5){inp1=2;kkk=0;}
то применяем:
if(inp1==2&&mute==0){inp1=0;in++;;cl();myEnc.write(0);time=millis();
w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
Спасибо.
Ученье свет, а неученых тьма.
По поводу MUTE.
С кнопки работает. С пульта ноль реакции. Код с кнопки пульта подставлял вместо IR_6. реакции ноль.
Еще хотелось бы добавить режим MUTE при переходе в режим STANDBY для уменьшения переходных процессов в усилителе(хлопков в динамиках).
Ошибка с MUTE, скорее всего в моем скетче. Сижу разбираюсь.
forum.rcl-radio.ru → Тестирование скетчей → TDA7313 + энкодер + ИК пульт + анализатор спектра
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|