цифровой темброблок на ТЕА6230 и им подобных с пультом ДУ

Тема в разделе "Arduino & Shields", создана пользователем Иropь, 27 ноя 2015.

  1. Иropь

    Иropь Нерд

    Привет всем озадачился сборкой цифрового темброблока , после того как приобрел по случаю ТЕА6320 в обычном корпусе, решил сделать управление темброблоком по шине i2c на Ардуино, так как познания в програмированние весьма поверхностные порылся в инете, и практически не нашел никакой инфы на интересующую меня тему, видимо это не популярное направление. В итоге собрал схемку подключил к УНЧ на ТДА7294 , звук конечно незначительно похуже чем у аналогового темброблока на ОРА2132 , но свои плюсы тож есть, простой скетч регулировки громкостью энкодерами есть, но сейчас хочу я всем этим делом управлять при помощи пульта ДУ, инфы в инете не нашел поэтому обращаюсь к форумчанам , с вопросом как к данному скетчу управления энкодерами можно пристроить, управление пультом , сам я что то никак не соображу..


    #include <MP1241.h>
    #include <MP1090.h>
    #include <Wire.h>
    #include <PinChangeInt.h>
    #include <IRremote.h>
    #define VOL_A 0x490
    #define VOL_B 0xC90
    const int MP1093_VOL_A = 14;
    const int MP1093_VOL_B = 15;
    const int MP1093_CounterClockWiseRot = 0;
    const int MP1093_ClockWiseRot = 1;
    const int MP1093_Unchanged = 2;
    volatile byte VOLUME_FLAG = MP1093_Unchanged;
    int IRR_Pin = 8;
    IRrecv irrecv(IRR_Pin);
    void setup()
    {
    Serial.begin (9600);
    Wire.begin();
    PCintPort::attachInterrupt(MP1093_VOL_A, &MP1093_VOL_A_ISR, RISING);
    PCintPort::attachInterrupt(MP1093_VOL_B, &MP1093_VOL_B_ISR, RISING);
    }
    void loop ()
    {
    if ((VOLUME_FLAG == MP1093_ClockWiseRot) || (VOLUME_FLAG ==
    MP1093_CounterClockWiseRot))
    {
    ChangeVolume ();
    Serial.print ("Volume ");
    Serial.print (MP1241::GetParameter (MP1241_VOLUME), HEX);
    Serial.print ("\n");
    VOLUME_FLAG = MP1093_Unchanged;
    }
    }
    void MP1093_VOL_A_ISR ()
    {
    if (PCintPort::arduinoPin == MP1093_VOL_A)
    {
    delay (100);
    if ((digitalRead (MP1093_VOL_A)) && (!digitalRead (MP1093_VOL_B)))
    {
    VOLUME_FLAG = MP1093_ClockWiseRot;
    }
    }
    }
    void MP1093_VOL_B_ISR ()
    {
    if (PCintPort::arduinoPin == MP1093_VOL_B)
    {
    delay (100);
    if ((digitalRead (MP1093_VOL_B)) && (!digitalRead (MP1093_VOL_A)))
    {
    VOLUME_FLAG = MP1093_CounterClockWiseRot;
    }
    }
    }
    void ChangeVolume ()
    {
    byte CurValue = MP1241::GetParameter (MP1241_VOLUME);
    byte NewValue = CurValue;
    if (VOLUME_FLAG == MP1093_ClockWiseRot)
    {
    if (NewValue < 0x3F)
    NewValue++;
    }
    else if (VOLUME_FLAG == MP1093_CounterClockWiseRot)
    {
    if (NewValue > 0x0C)
    NewValue--;
    }
    if (NewValue != CurValue)
    MP1241::SetParameter (MP1241_VOLUME, NewValue);
    }
     
  2. Иropь

    Иropь Нерд

    раз помочь желающих не нашлось написал такой код
    #include <IRremote.h>
    #include <MP1241.h>
    #include <Wire.h>

    int RECV_PIN = 11;

    IRrecv irrecv(RECV_PIN);

    decode_results results;



    int muteVolume = -40;

    void setup()

    {

    Serial.begin(9600);

    irrecv.enableIRIn(); // Start the receiver

    Wire.begin();

    }

    int vol = 1;

    byte byteA = 0;

    byte byteB = 0;

    int volume = 0;

    int delayTime = 0;



    void loop() {

    if (irrecv.decode(&results)) {

    if ( vol )

    Serial.println(results.value, HEX);



    if ( results.value == 0xC90) {

    if ( vol )

    Serial.print("Vol UP ");

    if ( volume < 0 )

    volume++;

    if ( vol )

    Serial.println(volume);

    delayTime = 50;



    }

    if ( results.value == 0x490) {

    if ( vol )

    Serial.print("Vol DOWN ");

    if ( volume > -79 )

    volume--;

    if ( vol )

    Serial.println(volume);

    delayTime = 50;



    }




    if ( vol ) {

    byteA = 00 - volume / 100;

    byteB = 111111 - volume % 100;

    }

    if ( vol ) {

    Serial.print(byteA, HEX);

    Serial.print(" ");

    Serial.println(byteB, HEX);

    }

    Wire.beginTransmission(0x40);

    Wire.write(byteA);

    Wire.write(byteB);

    Wire.endTransmission();

    if ( delayTime ) {

    delay(delayTime);

    delayTime = 0;

    }

    irrecv.resume();

    }

    }
    пока только для громкости , дальше буду пытаться прикрутить к пульту регулировку тембра