赞
踩
首先要感谢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里面直接用自带的微秒延时就行了。说明还是很准的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。