6401浏览
查看: 6401|回复: 4

[已解决] 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)
  1. #include <inttypes.h>
  2. #include <avr/io.h>
  3. #include <avr/pgmspace.h>
  4. #include <util/delay.h>
  5. #include "Syn6288.h"
  6. #include <stdio.h>
  7. #include <arduino.h>
  8. uint8_t head[5] = {0xfd,0x00,0x00,0x01,0x00};//合成播放命令
  9. uint8_t sound[5] = {0xfd,0x00,0x00,0x01,0x01};//合成提示音
  10. uint16_t boud[5]={0xFD,0x00,0x03,0x31,0x00}; //设置波特率
  11. /*发送文本合成命令,music为背景音乐设置*/
  12. void Syn6288::play(uint8_t *text,uint8_t TEXTLEN,uint8_t music)
  13.   {
  14.                 pi=0;
  15.                 delay(100);
  16.   head[2]=TEXTLEN+3;
  17.    switch(music)
  18.         {
  19.           case 0: head[4]=0x01;break;
  20.           case 1: head[4]=0x09;break;
  21.           case 2: head[4]=0x11;break;
  22.           case 3: head[4]=0x19;break;
  23.           case 4: head[4]=0x21;break;
  24.           case 5: head[4]=0x29;break;
  25.           case 6: head[4]=0x31;break;
  26.           case 7: head[4]=0x39;break;
  27.           case 8: head[4]=0x41;break;
  28.           case 9: head[4]=0x49;break;
  29.           case 10: head[4]=0x51;break;
  30.           case 11: head[4]=0x59;break;
  31.           case 12: head[4]=0x61;break;
  32.           case 13: head[4]=0x69;break;
  33.           case 14: head[4]=0x71;break;
  34.           case 15: head[4]=0x79;break;
  35.         }
  36.    for(int i=0;i<5;i++)
  37.       {
  38.         pi^=head<i>;
  39.         Serial2.write(head<i>);
  40.         delay(2);
  41.       }
  42.    for(int j=0;j<TEXTLEN;j++)
  43.       {
  44.         pi^=text[j];
  45.         Serial2.write(text[j]);
  46.         delay(2);
  47.       }
  48.     Serial2.write(pi);
  49.     delay(300*TEXTLEN);
  50.   }
  51. void Syn6288::Slaveboudset(uint16_t boudr)  //波特率设置
  52. {
  53.         uint8_t p;
  54.     p=0;
  55. switch(boudr)
  56.   {
  57.    case 9600:   boud[4]=0x00;
  58.                    break;
  59.    case 19200:  boud[4]=0x01;
  60.                    break;
  61.   }
  62.   for(int z=0;z<HEADLEN;z++)
  63.     {
  64.       p^=boud[z];
  65.       Serial2.write(boud[z]);
  66.       delay(2);
  67.     }               
  68.   Serial2.write(p);
  69.   p=0;
  70.   for(int z=0;z<HEADLEN;z++)
  71.     {
  72.       p^=boud[z];
  73.       Serial2.write(boud[z]);
  74.       delay(2);
  75.     }               
  76.   Serial2.write(p);
  77.   delay(200);
  78. }</i></i>
复制代码



Arduino IDE代码:
  1. #include "Syn6288.h"
  2. Syn6288 syn;
  3. uint8_t text1[]={0xB3,0xC9,0xB6,0xBC,0xBC,0xAB,0xC8,0xA4,0xBF,0xC6,0xBC,0xBC,0xD3,0xD0,0xCF,0xDE,0xB9,0xAB,0xCB,0xBE};   //成都极趣科技有限公司
  4. void setup()
  5. {
  6. Serial2.begin(9600);   //对应串口号初始化,需和库文件中的串口号一致
  7. syn.Slaveboudset(9600);
  8. }
  9. void loop()
  10. {
  11. syn.play(text1,sizeof(text1),1);//播放文本1,选择背景音乐1
  12. }
复制代码


参考:
https://mc.dfrobot.com.cn/thread-1497-1-1.html

Holiday  初级技匠

发表于 2014-3-17 11:12:48

这么详细,就是没人顶呢,,,楼主把名字改得霸气点就有人看了
回复

使用道具 举报

Youyou  初级技匠
 楼主|

发表于 2014-3-19 16:58:56

Holiday 发表于 2014-3-17 11:12
这么详细,就是没人顶呢,,,楼主把名字改得霸气点就有人看了

因为所有人都在等待金大师顶我,但我却等了很久。。。
回复

使用道具 举报

Grey  中级技匠

发表于 2014-3-21 18:15:31

语音合成芯片可以这么小?好牛啊!
回复

使用道具 举报

Youyou  初级技匠
 楼主|

发表于 2014-3-21 18:25:07

Grey 发表于 2014-3-21 18:15
语音合成芯片可以这么小?好牛啊!

没有好牛 只有更牛
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail