音频通信"/>
Android音频通信
转至:Android音频通信--简单演示程序
简单的Android音频通信演示程序,Android手机的耳机接头左声道接在ZC-ADK P3的1号脚,即C3INC上。通过按键选择播放不同的音频文件,通过电压比较中断统计音频信号的方波次数,进而分辨不同的控制信号,控制LED2、LED3的亮灭。
这个Android音频通信演示程序原理很简单,实现起来较容易,可以方便的移植到红外遥控器上。但是此方法通信速度很慢,只做演示用,后期会采用效率更高的编码方式。
音频接口示意图
利用GoldWave生成不同频率音频文件,有5Hz-500Hz不等,使用时需将其复制到Android手机的sdcard/AudioDemo下。
Android手机播放音频文件代码:
path = "/sdcard/AudioDemo/LED2ON5Hz.wav"; //指定播放文件路径
try {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (Exception e) {
Log.e(TAG, "error: " + e.getMessage(), e);
}
PIC单片机电压比较器的初始化代码:
void Compare_On(void)
{
CVRCONbits.CVRSS=0;//Us=AVDD-AVSS;
CVRCONbits.CVRR=1;//CV RSRC 范围应从0 到0.625 CVRSRC ,步长为CVRSRC /24
CVRCONbits.CVROE=0;//CV REF电压从CVREF 引脚断开
CVRCONbits.CVREN=1;//CV REF电路上电
CVRCONbits.CVR=2;//当CVRR = 1 时:CVREF = (CVR<3:0>/ 24)*(CVRSRC )
CM3CONbits.EVPOL=3;//比较器反相输入连接到CxINC引脚比较器输出的任何变化导致发生触发/ 事件/ 中断(当CEVT = 0 时)
CM3CONbits.CCH=1;//比较器反相输入连接到CxINC引脚
CM3CONbits.CREF=1;//同相输入连接到内部CVref+输入参考电压
CM3CONbits.CEN=1;//比较器使能
CM3CONbits.CEVT=0;//发生由EVPOL<1:0> 定义的比较器事件;该位清零之前禁止后续触发和中断
_CMIF=0;//中断标志清空
_CMIE=1; //中断使能
}
PIC单片机电压比较器的中断函数代码:
void __attribute__((__interrupt__,no_auto_psv)) _CompInterrupt(void)
{
T1CONbits.TON = 1 ;//turn on the timer
CM3CONbits.CEVT=0;//发生由EVPOL<1:0> 定义的比较器事件;该位清零之前禁止后续触发和中断
_CMIF=0;//中断标志清空
TMR1 = 0;//清空Timer1计时器,即在最后一次电压比较中断后开始计时
CompareState++;
}
PIC单片机计时器T1初始化代码:
void T1_Init(void)
{
PR1 = 31250;//每0.5s中断一次 31250*256*62.5ns
TMR1 = 0;//clear timer1 value
_T1IF = 0;//clear interrupt flag
_T1IP = 1;//choose a priority
_T1IE = 1;//enable the interrupt
T1CON = 0x0030;//TCKPS<1:0>=11 256分频
}
PIC单片机计时器T1中断代码:
void __attribute__((__interrupt__,no_auto_psv)) _T1Interrupt(void)
{
_T1IF = 0;//clear interrupt flag
T1State = 1;//
T1CONbits.TON = 0;//关闭计时器1
}
根据统计到的电压比较中断次数,进行LED控制
if(T1State == 1)//根据统计的Compare中断次数,控制LED亮灭
{
if((CompareState<12)&(CompareState>8))
{
LED2_On();
}
else if((CompareState<120)&(CompareState>80))
{
LED2_Off();
}
else if((CompareState<220)&(CompareState>180))
{
LED3_On();
}
else if((CompareState<1020)&(CompareState>800))
{
LED3_Off();
}
CompareState=0;
T1State = 0;
}
更多推荐
Android音频通信
发布评论