|
|
- #define SEND_BUF_LEN 5
- #include "asr.h"
- extern "C"{ void * __dso_handle = 0 ;}
- #include "setup.h"
- #include "myLib/asr_event.h"
- #include "HardwareSerial.h"
- uint8_t mylist[SEND_BUF_LEN];
- uint32_t snid;
- void ASR_CODE();
- void UART_RX();
- //{speak:小蝶-清新女声,vol:10,speed:10,platform:haohaodada}
- //{playid:10001,voice:开机替换}
- //{playid:10002,voice:}
- /*描述该功能...
- */
- void ASR_CODE() {
- //本函数是语音识别成功钩子程序
- //运行时间越短越好,复杂控制启动新线程运行
- //唤醒时间设置必须在ASR_CODE中才有效
- uint16_t vid = ((snid)&0xFFFF);
- mylist[0] = 0xFA;
- mylist[1] = vid;
- mylist[2] = (vid >> 8);
- mylist[3] = mylist[1] + mylist[2];
- mylist[4] = 0xAF;
- for (int i = (0); i < SEND_BUF_LEN; i = i + 1) {
- Serial1.write(mylist[i]);
- }
- Serial.print(vid, 10);
- }
- void UART_RX_Task() {
- while (1) {
- if(Serial1.available() > 0) {
- String rxdata = Serial1.readString();
- //Serial.print(rxdata);
- int val;
- if (sscanf(rxdata.c_str(), "voice %d", &val) == 1) {
- play_audio(val);
- } else if (sscanf(rxdata.c_str(), "start %d", &val) == 1) {
- play_audio(205);
- play_num(val*100, 1);
- play_audio(131);
- }
- else if (sscanf(rxdata.c_str(), "temp %d", &val) == 1) {
- play_audio(130);
- play_num(val*100, 1);
- play_audio(131);
- }
- }
- delay(2);
- }
- vTaskDelete(NULL);
- }
- void hardware_init(){
- //需要操作系统启动后初始化的内容
- //音量范围1-7
- vol_set(5);
- setPinFun(2,FORTH_FUNCTION);
- setPinFun(3,FORTH_FUNCTION);
- Serial1.begin(38400);
- setPinFun(13,SECOND_FUNCTION);
- setPinFun(14,SECOND_FUNCTION);
- Serial.begin(115200);
- Serial.setTimeout(10);
- Serial.setTimeout(10);
- xTaskCreate(UART_RX_Task,"UART_RX_Task",128,NULL,4,NULL);
- vTaskDelete(NULL);
- }
- void setup()
- {
- //需要操作系统启动前初始化的内容
- //播报音下拉菜单可以选择,合成音量是指TTS生成文件的音量
- //欢迎词指开机提示音,可以为空
- //退出语音是指休眠时提示音,可以为空
- //休眠后用唤醒词唤醒后才能执行命令,唤醒词最多5个。回复语可以空。ID范围为0-9999
- set_wakeup_forever();
- //{ID:0,keyword:"命令词",ASR:"小浴小浴",ASRTO:""}
- //.... 其他语言省略
- //{playid:10084,voice:零}
- //{playid:10085,voice:一}
- //{playid:10086,voice:二}
- //{playid:10087,voice:三}
- //{playid:10088,voice:四}
- //{playid:10089,voice:五}
- //{playid:10090,voice:六}
- //{playid:10091,voice:七}
- //{playid:10092,voice:八}
- //{playid:10093,voice:九}
- //{playid:10094,voice:十}
- //{playid:10095,voice:百}
- //{playid:10096,voice:千}
- //{playid:10097,voice:万}
- //{playid:10098,voice:亿}
- //{playid:10099,voice:负}
- //{playid:10100,voice:点}
- }
复制代码 代码如上,大概流程是语言识别后通过串口发送命令到MCU,MCU收到后再发送应答的播报语言,在测试过程中经常出现说到某个识别词后(随机出现),再无无法识别的情况,但是还能播报; |
|