DFRobot Speech Synthesizer Bee语音合成模块 COM使用问题
本帖最后由 Ricky 于 2014-3-21 18:29 编辑https://www.dfrobot.com.cn/goods-491.html
这个语音合成模块的库只支持COM0口使用,但如果想在其他COM口上使用怎么办呢?答案是修改库文件。
首先我们进入到库文件夹里面,打开Syn6288.cpp文件,可以看到有两个函数的实现,即void Syn6288::play(uint8_t *text,uint8_t TEXTLEN,uint8_t music)和void Syn6288::Slaveboudset(uint16_t boudr) 。在这两个函数里面,可以看到Serial.write()语句,这些语句就是用来串口发送指令给语音合成模块的,默认串口0.所以,如果想在其他串口上使用,那么修改者语句就可以了,比如我想在COM2上使用,改成Serial2.write()就可,前提是Arduino板子本身就有多串口。
然后在Arduino IDE中把样例代码修改成对应的串口即可。在MEGA2560加Mega传感器扩展板上测试,一切正常。
Syn6288.cpp文件:(使用COM2)
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "Syn6288.h"
#include <stdio.h>
#include <arduino.h>
uint8_t head = {0xfd,0x00,0x00,0x01,0x00};//合成播放命令
uint8_t sound = {0xfd,0x00,0x00,0x01,0x01};//合成提示音
uint16_t boud={0xFD,0x00,0x03,0x31,0x00}; //设置波特率
/*发送文本合成命令,music为背景音乐设置*/
void Syn6288::play(uint8_t *text,uint8_t TEXTLEN,uint8_t music)
{
pi=0;
delay(100);
head=TEXTLEN+3;
switch(music)
{
case 0: head=0x01;break;
case 1: head=0x09;break;
case 2: head=0x11;break;
case 3: head=0x19;break;
case 4: head=0x21;break;
case 5: head=0x29;break;
case 6: head=0x31;break;
case 7: head=0x39;break;
case 8: head=0x41;break;
case 9: head=0x49;break;
case 10: head=0x51;break;
case 11: head=0x59;break;
case 12: head=0x61;break;
case 13: head=0x69;break;
case 14: head=0x71;break;
case 15: head=0x79;break;
}
for(int i=0;i<5;i++)
{
pi^=head<i>;
Serial2.write(head<i>);
delay(2);
}
for(int j=0;j<TEXTLEN;j++)
{
pi^=text;
Serial2.write(text);
delay(2);
}
Serial2.write(pi);
delay(300*TEXTLEN);
}
void Syn6288::Slaveboudset(uint16_t boudr)//波特率设置
{
uint8_t p;
p=0;
switch(boudr)
{
case 9600: boud=0x00;
break;
case 19200:boud=0x01;
break;
}
for(int z=0;z<HEADLEN;z++)
{
p^=boud;
Serial2.write(boud);
delay(2);
}
Serial2.write(p);
p=0;
for(int z=0;z<HEADLEN;z++)
{
p^=boud;
Serial2.write(boud);
delay(2);
}
Serial2.write(p);
delay(200);
}</i></i>
Arduino IDE代码:
#include "Syn6288.h"
Syn6288 syn;
uint8_t text1[]={0xB3,0xC9,0xB6,0xBC,0xBC,0xAB,0xC8,0xA4,0xBF,0xC6,0xBC,0xBC,0xD3,0xD0,0xCF,0xDE,0xB9,0xAB,0xCB,0xBE}; //成都极趣科技有限公司
void setup()
{
Serial2.begin(9600); //对应串口号初始化,需和库文件中的串口号一致
syn.Slaveboudset(9600);
}
void loop()
{
syn.play(text1,sizeof(text1),1);//播放文本1,选择背景音乐1
}
参考:
https://mc.dfrobot.com.cn/thread-1497-1-1.html 这么详细,就是没人顶呢,,,楼主把名字改得霸气点就有人看了 Holiday 发表于 2014-3-17 11:12
这么详细,就是没人顶呢,,,楼主把名字改得霸气点就有人看了
因为所有人都在等待金大师顶我,但我却等了很久。。。 语音合成芯片可以这么小?好牛啊! Grey 发表于 2014-3-21 18:15
语音合成芯片可以这么小?好牛啊!
没有好牛 只有更牛
页:
[1]