1

Тема: Serial Port tda7719

#include <Wire.h> 
#include <TDA7719.h>
#include <EEPROM.h>
  TDA7719 tda;
  
  byte a1,a2,b1,b2,param,data;
  byte w,i,vol,treb,treb_f,mid,mid_f,bas,bass_f,in,eeprom,loun,loun_f,vol_att,vol0,vol1,att_RF,att_LF,att_RR,att_LR;
  unsigned long time;

void setup(){
   Serial.begin(115200);Wire.begin();
 if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0);treb = EEPROM.read(1);mid = EEPROM.read(2);bas = EEPROM.read(3);in = EEPROM.read(4);
   loun = EEPROM.read(5);loun_f = EEPROM.read(6);
   vol0=EEPROM.read(7);vol1=EEPROM.read(8);treb_f=EEPROM.read(9);mid_f=EEPROM.read(10);bass_f=EEPROM.read(11);
   att_RF=EEPROM.read(12);att_LF=EEPROM.read(13);att_RR=EEPROM.read(14);att_LR=EEPROM.read(15);
   in_att();audio();
}
 
void loop(){
  /////////// Serial Port - получение данных //////////////////////////////////////////////////////////
  if(Serial.available()){w++;time=millis(); delay(10);
    switch(i){
      case 0: a1 = Serial.read()-48;
      case 1: a2 = Serial.read()-48;
      case 2: b1 = Serial.read()-48;
      case 3: b2 = Serial.read()-48;}
      param = a1*10+a2;data = b1*10+b2;// получение кода команды и значение
    switch(param){
      case 10: vol=data;break;                                    // передаем переменной vol  значение byte = 79...0 === громкость от -79 до 0 дБ === 1079...1000
      case 11: treb=data;break;                                   // передаем переменной treb  значение byte = 0...30 === тебр ВЧ от -15 до +15 дБ === 1100...1130
      case 12: mid=data;break;                                    // передаем переменной mid  значение byte = 0...30 === тебр СЧ от -15 до +15 дБ === 1200...1230
      case 13: bas=data;break;                                    // передаем переменной bas  значение byte = 0...30 === тебр НЧ от -15 до +15 дБ === 1300...1330
      case 14: in=data;break;                                     // передаем переменной in  значение byte = 0...5 === выбор входа от 0 до 5 === 1400...1405
      case 15: loun=data;break;                                   // передаем переменной loun  значение byte = 0...15 === тонкомпенсация ослабление от -15 до 0 дБ === 1500...1515
      case 16: loun_f=data;break;                                 // передаем переменной loun_f  значение byte = 0...3 === тонкомпенсация центральная частота FLAT 400 800 2400 Гц === 1600...1603
      case 17: vol0=data;break;                                   // аттенюатор входа 1 от -15 до +15 дБ  === 1700...1730
      case 18: vol1=data;break;                                   // аттенюатор входа 2 от -15 до +15 дБ  === 1800...1830
      case 19: treb_f=data;break;                                 // передаем переменной treb_f  значение byte = 0...3 === ВЧ центральная частота 10 12.5 15 17.5 кГц === 1900...1903
      case 20: mid_f=data;break;                                  // передаем переменной mid_f  значение byte = 0...3 === CЧ центральная частота 0.5 1 1.5 2.5 кГц === 2000...2003
      case 21: bass_f=data;break;                                 // передаем переменной bass_f  значение byte = 0...3 === НЧ центральная частота 60 80 100 200 Гц === 2100...2103
        //// attenuator output
      case 22: att_RF=data;break;                                 // 2215...2200
      case 23: att_LF=data;break;                                 // 2315...2315
      case 24: att_RR=data;break;                                 // 2415...2400
      case 25: att_LR=data;break;                                 // 2515...2500
      
      case 99: eeprom=data;break; // EEPROM === 9901 отправить в данные в EEPROM
      i++;}}i=0;
  //////////////////////////////////////////////////////////////////////////////////////////////////////    

   in_att();
  
  //////////// EEPROM ////////////////////////////////////////////////////////////////////////////////////
  if(eeprom==1){eeprom=0;
     EEPROM.update(0,vol);EEPROM.update(1,treb);EEPROM.update(2,mid);EEPROM.update(3,bas);EEPROM.update(4,in);
     EEPROM.update(5,loun);EEPROM.update(6,loun_f);EEPROM.update(7,vol0);EEPROM.update(8,vol1);
     EEPROM.update(9,treb_f);EEPROM.update(10,mid_f);EEPROM.update(11,bass_f);
     EEPROM.update(12,att_RF);EEPROM.update(13,att_LF);EEPROM.update(14,att_RR);EEPROM.update(15,att_LR);
    }
  ///////////////////////////////////////////////////////////////////////////////////////////////////////   
     
  //////////// Отправка данных в минитор порта и аудиопроцессор /////////////////////////////////////////   
  if(w==1){audio();
  Serial.print(vol);Serial.print(" ");Serial.print(treb);Serial.print(" ");Serial.print(mid);Serial.print(" ");Serial.print(bas);
  Serial.print(" ");Serial.print(in);Serial.print(" ");Serial.print(loun);Serial.print(" ");Serial.print(loun_f);
  Serial.print(" ");Serial.print(vol0);Serial.print(" ");Serial.print(vol1);Serial.print(" ");Serial.print(treb_f);Serial.print(" ");
  Serial.print(mid_f);Serial.print(" ");Serial.print(bass_f);Serial.println(" ");
   w=0;}
  /////////////////////////////////////////////////////////////////////////////////////////////////////// 

   

}//LOOP

void audio(){
tda.setInput(in,1,1,7); // 0...7, 0...1, 0...1, 0...7
tda.setInput_2(2,1,1,1,1,1); // 0...7, 0...1, 0...1, 0...1, 0...1, 0...1 
tda.setMix_source(7,0); // 0...7, 0...-31
tda.setMix_cont(1,1,1,1,1,1,1,1); // all 0...1
tda.setMute(1,0,0,1,1,1,1); // 0...1, 0...1, 0...3, 0...1, 0...1, 0...1, 0...1
tda.setSoft_1(1,1,1,1,1,1,1,1); //all 0...1
tda.setSoft_2(1,1,1,1,0,3); // 0...1, 0...1, 0...1, 0...1, 0...2, 0...3
tda.setLoudness(-loun,loun_f,1,1); // 0...-15, 0...3, 0...1, 0...1 
tda.setVol(vol_att-15,1,1); // -15...+15, 0...1, 0...1
tda.setTreble(treb-15,treb_f,1); // -15...+15, 0...3, 0...1
tda.setMiddle(mid-15,3,1); // -15...+15, 0...3, 0...1
tda.setBass(bas-15,3,1); // -15...+15, 0...3, 0...1
tda.setSMB(0,1,mid_f,bass_f,1); // 0...3, 0...1, 0...3, 0...3, 0...1
tda.setVol_LF(vol-att_LR,1); // 0...-79, 0...1
tda.setVol_RF(vol-att_RF,1); // 0...-79, 0...1
tda.setVol_LR(vol-att_LR,1); // 0...-79, 0...1
tda.setVol_RR(vol-att_RR,1); // 0...-79, 0...1
tda.setVol_SUB_L(vol,1); // 0...-79, 0...1
tda.setVol_SUB_R(vol,1); // 0...-79, 0...1
tda.setTest1(0,14,1,1); // 0...1, 0...15, 0...1, 0...1
tda.setTest2(0,1,1,3); // 0...1, 0...1, 0...1, 0...3
}

void in_att(){
  switch(in){
     case 0: vol_att = vol0;break;
     case 1: vol_att = vol1;break;
     }
  }

2

Re: Serial Port tda7719

с энкодером
D8 D9 подключение энкодера CLK, DT

#include <Wire.h> 
#include <TDA7719.h>
#include <EEPROM.h>
#include <Encoder.h>
#include <MsTimer2.h>
  TDA7719 tda;
  Encoder myEnc(9, 8);//CLK, DT подключение энкодера
  byte a1,a2,b1,b2,param,data;
  int w,i,vol,treb,treb_f,mid,mid_f,bas,bass_f,in,eeprom,loun,loun_f,vol_att,vol0,vol1,att_RF,att_LF,att_RR,att_LR;
  unsigned long newPosition,time,oldPosition  = -999;

void setup(){
   Serial.begin(115200);Wire.begin();
   pinMode(8, INPUT_PULLUP);
   pinMode(9, INPUT_PULLUP);
 if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0);treb = EEPROM.read(1);mid = EEPROM.read(2);bas = EEPROM.read(3);in = EEPROM.read(4);
   loun = EEPROM.read(5);loun_f = EEPROM.read(6);
   vol0=EEPROM.read(7);vol1=EEPROM.read(8);treb_f=EEPROM.read(9);mid_f=EEPROM.read(10);bass_f=EEPROM.read(11);
   att_RF=EEPROM.read(12);att_LF=EEPROM.read(13);att_RR=EEPROM.read(14);att_LR=EEPROM.read(15);
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   in_att();audio();
}
 
void loop(){
  /////////// Serial Port - получение данных //////////////////////////////////////////////////////////
  if(Serial.available()){w++;time=millis(); delay(10);
    switch(i){
      case 0: a1 = Serial.read()-48;
      case 1: a2 = Serial.read()-48;
      case 2: b1 = Serial.read()-48;
      case 3: b2 = Serial.read()-48;}
      param = a1*10+a2;data = b1*10+b2;// получение кода команды и значение
    switch(param){
      case 10: vol=data;break;                                    // передаем переменной vol  значение byte = 79...0 === громкость от -79 до 0 дБ === 1079...1000
      case 11: treb=data;break;                                   // передаем переменной treb  значение byte = 0...30 === тебр ВЧ от -15 до +15 дБ === 1100...1130
      case 12: mid=data;break;                                    // передаем переменной mid  значение byte = 0...30 === тебр СЧ от -15 до +15 дБ === 1200...1230
      case 13: bas=data;break;                                    // передаем переменной bas  значение byte = 0...30 === тебр НЧ от -15 до +15 дБ === 1300...1330
      case 14: in=data;break;                                     // передаем переменной in  значение byte = 1...2 === выбор входа от 0 до 1 === 1401...1402
      case 15: loun=data;break;                                   // передаем переменной loun  значение byte = 0...15 === тонкомпенсация ослабление от -15 до 0 дБ === 1500...1515
      case 16: loun_f=data;break;                                 // передаем переменной loun_f  значение byte = 0...3 === тонкомпенсация центральная частота FLAT 400 800 2400 Гц === 1600...1603
      case 17: vol0=data;break;                                   // аттенюатор входа 0 от -15 до +15 дБ  === 1700...1730
      case 18: vol1=data;break;                                   // аттенюатор входа 1 от -15 до +15 дБ  === 1800...1830
      case 19: treb_f=data;break;                                 // передаем переменной treb_f  значение byte = 0...3 === ВЧ центральная частота 10 12.5 15 17.5 кГц === 1900...1903
      case 20: mid_f=data;break;                                  // передаем переменной mid_f  значение byte = 0...3 === CЧ центральная частота 0.5 1 1.5 2.5 кГц === 2000...2003
      case 21: bass_f=data;break;                                 // передаем переменной bass_f  значение byte = 0...3 === НЧ центральная частота 60 80 100 200 Гц === 2100...2103
        //// attenuator output
      case 22: att_RF=data;break;                                 // 2200...2215
      case 23: att_LF=data;break;                                 // 2300...2315
      case 24: att_RR=data;break;                                 // 2400...2415
      case 25: att_LR=data;break;                                 // 2500...2515
      
      case 99: eeprom=data;break; // EEPROM === 9901 отправить в данные в EEPROM
      i++;}}i=0;
  //////////////////////////////////////////////////////////////////////////////////////////////////////    

   in_att();

    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol-newPosition;myEnc.write(0);newPosition=0;w=1;if(vol<0){vol=0;}if(vol>79){vol=79;}audio();}
  
  //////////// EEPROM ////////////////////////////////////////////////////////////////////////////////////
  if(eeprom==1){eeprom=0;
     EEPROM.update(0,vol);EEPROM.update(1,treb);EEPROM.update(2,mid);EEPROM.update(3,bas);EEPROM.update(4,in);
     EEPROM.update(5,loun);EEPROM.update(6,loun_f);EEPROM.update(7,vol0);EEPROM.update(8,vol1);
     EEPROM.update(9,treb_f);EEPROM.update(10,mid_f);EEPROM.update(11,bass_f);
     EEPROM.update(12,att_RF);EEPROM.update(13,att_LF);EEPROM.update(14,att_RR);EEPROM.update(15,att_LR);
    }
  ///////////////////////////////////////////////////////////////////////////////////////////////////////   
     
  //////////// Отправка данных в минитор порта и аудиопроцессор /////////////////////////////////////////   
  if(w==1){audio();
  Serial.print("vol= ");Serial.print(vol);Serial.print(" treb= ");Serial.print(treb);Serial.print(" mid= ");Serial.print(mid);Serial.print(" bas= ");Serial.print(bas);
  Serial.print(" in= ");Serial.print(in);Serial.print(" loun= ");Serial.print(loun);Serial.print(" loun_f= ");Serial.print(loun_f);
  Serial.print(" vol0= ");Serial.print(vol0);Serial.print(" vol1= ");Serial.print(vol1);Serial.print(" treb_f");Serial.print(treb_f);Serial.print(" mid_f= ");
  Serial.print(mid_f);Serial.print(" bass_f= ");Serial.print(bass_f);Serial.print(" rf= ");
  Serial.print(att_RF);Serial.print(" lf= ");Serial.print(att_LF);Serial.print(" rr= ");Serial.print(att_RR);Serial.print(" lr= ");Serial.print(att_LR);
  Serial.print(" vol_att=");Serial.print(vol_att);Serial.print(" общая гром= ");Serial.print(vol+15-att_LR);Serial.println("");
   w=0;}
  /////////////////////////////////////////////////////////////////////////////////////////////////////// 

   

}//LOOP

void audio(){
tda.setInput(in,1,1,7); // 0...7, 0...1, 0...1, 0...7
tda.setInput_2(2,1,1,1,1,1); // 0...7, 0...1, 0...1, 0...1, 0...1, 0...1 
tda.setMix_source(7,0); // 0...7, 0...-31
tda.setMix_cont(1,1,1,1,1,1,1,1); // all 0...1
tda.setMute(1,0,0,1,1,1,1); // 0...1, 0...1, 0...3, 0...1, 0...1, 0...1, 0...1
tda.setSoft_1(1,1,1,1,1,1,1,1); //all 0...1
tda.setSoft_2(1,1,1,1,0,3); // 0...1, 0...1, 0...1, 0...1, 0...2, 0...3
tda.setLoudness(-loun,loun_f,1,1); // 0...-15, 0...3, 0...1, 0...1 
tda.setVol(vol_att-15,1,1); // -15...+15, 0...1, 0...1
tda.setTreble(treb-15,treb_f,1); // -15...+15, 0...3, 0...1
tda.setMiddle(mid-15,3,1); // -15...+15, 0...3, 0...1
tda.setBass(bas-15,3,1); // -15...+15, 0...3, 0...1
tda.setSMB(0,1,mid_f,bass_f,1); // 0...3, 0...1, 0...3, 0...3, 0...1
tda.setVol_LF(vol+15-att_LR,1); // 0...-79, 0...1
tda.setVol_RF(vol+15-att_RF,1); // 0...-79, 0...1
tda.setVol_LR(vol+15-att_LR,1); // 0...-79, 0...1
tda.setVol_RR(vol+15-att_RR,1); // 0...-79, 0...1
tda.setVol_SUB_L(vol,1); // 0...-79, 0...1
tda.setVol_SUB_R(vol,1); // 0...-79, 0...1
tda.setTest1(0,14,1,1); // 0...1, 0...15, 0...1, 0...1
tda.setTest2(0,1,1,3); // 0...1, 0...1, 0...1, 0...3
}

void in_att(){
  switch(in){
     case 1: vol_att = vol0;break;
     case 2: vol_att = vol1;break;
     }
  }

void to_Timer(){newPosition = myEnc.read()/4;}