В прошлой статье я рассмотрел принципы работы с протоколом RC5, пришло время применять его на практике, а именно – внедрить его в усилок.
Особых сложностей в процессе не возникло, поэтому я просто опишу свою последовательность действий кратко.
Для начала я перевесил кнопку энкодера, которая у меня в ранних версиях висела на прерываниях по RB0 на прерывания по пинам 4-7. При этом добавив в код условия срабатывания по определенному входу. Выглядит это примерно так:
if (RBIF) { GIE = 0; __delay_ms(100); //программный антидребезг if (!ebutton) { //если была нажата именно наша кнопка ...
Затем в главном цикле надо добавить обработчик ИК команд, у меня он выглядит примерно так:
if (bytecount>13) { GIE = 0; if (oldtogglebit != togglebit) //одно нажатие - одна команда { printf("\r\nPressed button is %d", IRbyte); switch(IRbyte) { case 10 : if (!muteIR) //приглушение звука с пульта { itemp = 0; volume_flag = 0; mute_status = 0; mute(); muteIR = 1; } else { TRISB2 = 1; TRISB1 = 1; volume_flag = 1; bass_flag = 0; treble_flag = 0; menu(0); muteIR = 0; } break; case 16 : IRcom = 16; //right break; case 17 : IRcom = 17; //left break; case 13 : IRcom = 13; //Enter break; case 32 : IRcom = 32; //Up break; case 33 : IRcom = 33; break; case 41 : IRcom = 41; //exit break; case 43 : IRcom = 43; //volume+ break; case 44 : IRcom = 44; //volume- break; } } IRbyte = 0; bytecount=0; INTEDG = 0; buffer = 0; oldtogglebit = togglebit; GIE = 1; }
Ну и дальше по коду подобавлял нужные вставки, примерно вот так: main и дело сделано, теперь у нашего девайса есть дистанционное управление.
Уведомление: Remote control for the audioamplifier | diymicro.org