我是靠谱客的博主 知性果汁,最近开发中收集的这篇文章主要介绍arduino控制JQ8900-16P语音模块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先要感谢stm32通过 一线串口通信控制JQ8900-16P语音模块的作者

我就是根据这位博主的代码改写的,但是碰到了意想不到的问题。其实代码是写对了,语音模块是单独供电,这个供电的地要和arduino的地共用。(我第一天测试的时候其实也注意到了这个需要共地,但是反复测试不行,因为没有保存代码,今天只能重新一遍,居然就好了。)另外接上一个3W的喇叭,直接用arduino的板子给语音模块供电也是可以带动的。不需要额外电源。

void setup()
{
    pinMode(3,OUTPUT);
}
 
void loop()
{
    
    SendData(0x0a);    //清空数字
    SendData(0x01);    //曲目号
    SendData(0x00);
    SendData(0x0b);    //选曲播放
    delay(2000);    //延时
    
    //发送0x01
    SendData(0x0a);
    SendData(0x01);
    SendData(0x0b);
    delay(2000);
    
    //发送0x07
    SendData(0x0a);
    SendData(0x07);
    SendData(0x0b);
    delay(2000);
    
    //发送0x03
    SendData(0x0a);
    SendData(0x03);
    SendData(0x0b);
    delay(2000);
 
}
  
       
    


void SendData (char addr )//发送函数。
{
    
 
     
    digitalWrite(3,HIGH); /*开始拉高*/
    delayMicroseconds ( 1000 );
    digitalWrite(3,LOW); /*开始引导码*/
    delayMicroseconds ( 3200 );/*此处延时最少要大于2ms*/
    for (int i = 0; i < 8; i++ ) /*总共8位数据  */
    {
        digitalWrite(3,HIGH);
        if ( addr & 0x01 ) /*3:1表示数据位1,每个位用两个脉冲表示  */
        {
            delayMicroseconds ( 600 );
            digitalWrite(3,LOW);
            delayMicroseconds ( 200 );
        }
        else              /*1:3表示数据位0 ,每个位用两个脉冲表示  */
        {
            delayMicroseconds ( 200 );
            digitalWrite(3,LOW);
            delayMicroseconds ( 600 );
        }
        addr >>= 1;
    }
    digitalWrite(3,HIGH);
    
    
}

啧啧啧,搞了两天。另外我发现音量控制有点问题设置成20和80的音量值,感觉都是一样的。都比较小,怎么回复原来的音量呢?给语音板断电就恢复成默认大音量了。

在淘宝店可以搜到这个模块产品和说明书。音量的设置方法有详细的说明。
在这里插入图片描述
另外原作者提到在网上找了很多延时函数都达不到要求,但是在arduino里面直接用自带的微秒延时就行了。说明还是很准的。

最后

以上就是知性果汁为你收集整理的arduino控制JQ8900-16P语音模块的全部内容,希望文章能够帮你解决arduino控制JQ8900-16P语音模块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(111)

评论列表共有 0 条评论

立即
投稿
返回
顶部