本帖最后由 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[5] = {0xfd,0x00,0x00,0x01,0x00};//合成播放命令
- uint8_t sound[5] = {0xfd,0x00,0x00,0x01,0x01};//合成提示音
- uint16_t boud[5]={0xFD,0x00,0x03,0x31,0x00}; //设置波特率
- /*发送文本合成命令,music为背景音乐设置*/
- void Syn6288::play(uint8_t *text,uint8_t TEXTLEN,uint8_t music)
- {
- pi=0;
- delay(100);
- head[2]=TEXTLEN+3;
- switch(music)
- {
- case 0: head[4]=0x01;break;
- case 1: head[4]=0x09;break;
- case 2: head[4]=0x11;break;
- case 3: head[4]=0x19;break;
- case 4: head[4]=0x21;break;
- case 5: head[4]=0x29;break;
- case 6: head[4]=0x31;break;
- case 7: head[4]=0x39;break;
- case 8: head[4]=0x41;break;
- case 9: head[4]=0x49;break;
- case 10: head[4]=0x51;break;
- case 11: head[4]=0x59;break;
- case 12: head[4]=0x61;break;
- case 13: head[4]=0x69;break;
- case 14: head[4]=0x71;break;
- case 15: head[4]=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[j];
- Serial2.write(text[j]);
- delay(2);
- }
- Serial2.write(pi);
- delay(300*TEXTLEN);
- }
-
- void Syn6288::Slaveboudset(uint16_t boudr) //波特率设置
- {
- uint8_t p;
- p=0;
- switch(boudr)
- {
-
- case 9600: boud[4]=0x00;
- break;
- case 19200: boud[4]=0x01;
- break;
- }
- for(int z=0;z<HEADLEN;z++)
- {
- p^=boud[z];
- Serial2.write(boud[z]);
- delay(2);
- }
- Serial2.write(p);
- p=0;
- for(int z=0;z<HEADLEN;z++)
- {
- p^=boud[z];
- Serial2.write(boud[z]);
- 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 |
|
|
|
|
|