首先要感谢stm32通过 一线串口通信控制JQ8900-16P语音模块的作者
我就是根据这位博主的代码改写的,但是碰到了意想不到的问题。其实代码是写对了,语音模块是单独供电,这个供电的地要和arduino的地共用。(我第一天测试的时候其实也注意到了这个需要共地,但是反复测试不行,因为没有保存代码,今天只能重新一遍,居然就好了。)另外接上一个3W的喇叭,直接用arduino的板子给语音模块供电也是可以带动的。不需要额外电源。
void setup()
{pinMode(3,OUTPUT);
}void loop()
{SendData(0x0a); //清空数字SendData(0x01); //曲目号SendData(0x00);SendData(0x0b); //选曲播放delay(2000); //延时//发送0x01SendData(0x0a);SendData(0x01);SendData(0x0b);delay(2000);//发送0x07SendData(0x0a);SendData(0x07);SendData(0x0b);delay(2000);//发送0x03SendData(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里面直接用自带的微秒延时就行了。说明还是很准的。