|
本帖最后由 zong0001 于 2022-4-24 15:29 编辑
网上掏了个山水小功放,卖家说不出声就便宜出。到手后发现只有功放主机,需要控制程序才行。
音量音调控制芯片是PT2314,找了一片ESP8266,实际测了一下30针的引脚定义。
主要用到12v SCL SDA GND 另外两路音源输入。
写了两天的程序,终于可以用了,用1602液晶显示信息,用一个旋转编码器调整音量等参数,把所有能用的功能都用上了。无线连接就是用了NTP的自动对时。
旋转编码器短按选择各个参数,长按待机。
static const String lcdInfo[menuNum] = {"Volume","Bass","Treble","Left","Right","Channel","Gain","Loudness","Serial"};
这个是主要函数。
- void to_2314() {
- uint8_t Volume = my_power[0];
- switch (keyCount) {
- case 0: //音量
- audioswitch.volume(64 - Volume); //音量*
- if (Volume == 0) lcd1 += "Min";
- else if (Volume >= 63) lcd1 += "Max";
- else lcd1 += "-" + String((64 - Volume) * 1.25) + "dB";
- break;
- case 1:
- audioswitch.bass(my_power[1]); //低音 0~15
- lcd1 += bassInfo[my_power[1]] + "dB";
- break;
- case 2:
- audioswitch.treble(my_power[2]); //高音 0~15
- lcd1 += bassInfo[my_power[2]] + "dB";
- break;
- case 3:
- //audioswitch.attenuation(L_R[my_power[3]][1], L_R[my_power[3]][0]);
- audioswitch.attLR(0, 31 - my_power[3]);
- lcd1 += LRdb(31 - my_power[3]);
- break;
- case 4:
- audioswitch.attLR(1, 31 - my_power[4]);
- lcd1 += LRdb(31 - my_power[4]);
- break;
- case 5:
- // audioswitch.channel(my_power[5]); // switch to channel 1... 0-3 => channel 1-4
- lcd1 += inputInfo[my_power[5]];
- my_power[6] = channelInfo[my_power[5]][0];
- my_power[7] = channelInfo[my_power[5]][1];
- // audioswitch.gain(my_power[6]); break;
- audioswitch.channelInfo(my_power[5], my_power[6], my_power[7]);
- break;
- case 6:
- lcd1 += gainStr(my_power[6]);
- channelInfo[my_power[5]][0] = my_power[6];
- audioswitch.channelInfo(my_power[5], my_power[6], my_power[7]);
- break;
- case 7:
- if (my_power[7]) {
- // audioswitch.loudnessOff(); //
- lcd1 += "On";
- } else {
- // audioswitch.loudnessOn(); //
- lcd1 += "Off";
- }
- channelInfo[my_power[5]][1] = my_power[7];
- audioswitch.channelInfo(my_power[5], my_power[6], my_power[7]);
- break;
- case 8:
- if (my_power[8]) {
- lcd1 += "On";
- } else {
- lcd1 += "Off";
- }
- break;
- }
- lcd1 += " ";
- }
复制代码
库文件
PT2314-master.zip
(4.77 KB, 下载次数: 5)
|
-
|