Android音频通信--简单演示程序

转至:Android音频通信--简单演示程序


 简单的Android音频通信演示程序,Android手机的耳机接头左声道接在ZC-ADK P3的1号脚,即C3INC上。通过按键选择播放不同的音频文件,通过电压比较中断统计音频信号的方波次数,进而分辨不同的控制信号,控制LED2、LED3的亮灭。
       这个Android音频通信演示程序原理很简单,实现起来较容易,可以方便的移植到红外遥控器上。但是此方法通信速度很慢,只做演示用,后期会采用效率更高的编码方式。

3.5.jpg

音频接口示意图

       利用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;                        
                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值