Привет всем озадачился сборкой цифрового темброблока , после того как приобрел по случаю ТЕА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); }
раз помочь желающих не нашлось написал такой код #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(); } } пока только для громкости , дальше буду пытаться прикрутить к пульту регулировку тембра