求助!<(SKU:DFR0189)ASR Board for Arduino语音识别控制器>用不了...

2015-05-251.3万
AI 快速预览详细 收起
本文主要介绍了 ASR Board for Arduino 语音识别控制器在连接电脑后无法正常工作的问题。用户尝试通过 Arduino IDE 上传代码,并使用 Putty 进行串口通信,但始终显示错误。文章详细描述了用户的连接方法和调试步骤,并指出可能的原因是使用了不合适的 USB 数据线。建议用户检查并更换合适的 USB 数据线,以确保串口通信正常。


刚买了这个语音模组,再把它连接了电脑, 因为我看见它有这个mgea32u4 microcontroller, 所以我用Arduino IDE上传了ASRB_2 library的code
  1. #include <ASRB.h>
  2. #include <EEPROM.h>
  3. #include <SPI.h>
  4. #define SUM 35//
  5. int set=0,vall,res;
  6. char sRecog[SUM][38]={"kai deng","guan deng","zhun bei"};//
  7. unsigned int fDigit[SUM]={252,253,254};//AD4
  8. void BT(int x,int y,char  (*p)[38],unsigned int dd[],int set);
  9. void PT(int x,int y,char  (*p)[38],unsigned int dd[],int set);
  10. void ASR_while(int x,int y,char  (*p)[38],unsigned int dd[],int set);
  11. void ASR_BT(int x,int y,char  (*p)[38],unsigned int dd[],int set);
  12. int button=3,led=4;
  13. void setup()
  14. {
  15. ASRB.Initialise(SUM,sRecog,fDigit);
  16. attachInterrupt(0,ExtInt0Handler,LOW);
  17. //pinMode(button,INPUT);
  18. pinMode(led,OUTPUT);
  19. digitalWrite(led,HIGH);
  20. }
  21. void loop()
  22. {
  23.    if(vall==111) PT(SUM,38,sRecog,fDigit,set);   //
  24.    else if(vall==112) BT(SUM,38,sRecog,fDigit,set);   //
  25.    else
  26.       {
  27.        while(1)
  28.          {  res=0;
  29.              res=ASRB.Asr(SUM,38,sRecog,fDigit,set);
  30.              ASR_monitor();
  31.               delay(10);
  32.              ASRB.Busy_SD();
  33.               if (Serial.available() > 0)  break;
  34.           }
  35.        } //
  36. ASRB.AT_command(SUM,38,sRecog,fDigit,set);//
  37.   delay(100);  
  38. }
  39. void ExtInt0Handler ()
  40. {
  41. ASRB.ProcessInt0();                                       
  42. }
  43. void ASR_while(int x,int y,char  (*p)[38],unsigned int dd[],int set)
  44. {
  45.   while(1)
  46.      {
  47.        res=0;
  48.        res=ASRB.Asr(x,y,p,dd,set);
  49.         ASR_monitor();
  50.         delay(10);
  51.         ASRB.Busy_SD();
  52.         if(res<255&&res>0) break;
  53.         if (Serial.available() > 0)  break;  
  54.      // else if(digitalRead(button)==LOW) break;
  55.      }
  56. }
  57. void ASR_BT(int x,int y,char  (*p)[38],unsigned int dd[],int set)
  58. {
  59.   ASRB.send_SD(260);
  60.   delay(50);
  61.   ASRB.Busy_SD();
  62.   ASR_while(x,y,p,dd,set);
  63. }
  64. /**************************************语音控制LED****************************/
  65. void ASR_monitor()
  66. {
  67. if(res==252) digitalWrite(led,LOW);
  68. else if(res==253) digitalWrite(led,HIGH);
  69. }
  70. /*******************************口令模式*************************************/
  71. void PT(int x,int y,char  (*p)[38],unsigned int dd[],int set)
  72. {
  73.    while(1)
  74.    {
  75.      set=1;
  76.    if (Serial.available() > 0)
  77.      {
  78.       set=0;
  79.        break;
  80.      }
  81. int h=ASRB.Asr(x,y,p,dd,set);
  82.   delay(50);
  83.   if(h==254)   //
  84.    {
  85.     set=0;  
  86.      ASRB.send_SD(260);
  87.      delay(50);
  88.     ASRB.Busy_SD();   
  89.      ASR_while(x,y,p,dd,set);     
  90.     }     
  91.   }
  92. }
  93. /*******************************按键模式**************************************/
  94. void BT(int x,int y,char  (*p)[38],unsigned int dd[],int set)
  95. {
  96. char local[10]={0};
  97. char DD[1][6]={"asrbt"};
  98. while(1)
  99. {
  100. if (Serial.available() > 0)
  101.   {
  102.     local[0]= Serial.read();  
  103.     delay(20);
  104.     if(local[0]!=0x41)   
  105.      {
  106.        for(int i=1;i<8;i++)
  107.          {   
  108.          local[i]= Serial.read();  
  109.           if( local[i]==0x0a)  //
  110.            {
  111.             if( local[i-1]==0x0d)
  112.               {
  113.                 local[i]=0;
  114.                 local[i-1]=0;
  115.                 if(strcmp(local,DD[0])==0) //AT
  116.                   {
  117.                  ASR_BT(x,y,p,dd,set);
  118.                    break;
  119.                     }                 
  120.                   }
  121.                }
  122.             }
  123.         }
  124.       else
  125.       break;
  126.     }
  127.    /* else if(digitalRead(button)==LOW)
  128.         {
  129.           delay(100);
  130.          if(digitalRead(button)==LOW)
  131.            {
  132.             ASR_BT(x,y,p,dd,set);
  133.             break;
  134.              }
  135.        }*/
  136.   }
  137. }  
复制代码
我在putty连接了ASR board再传送命令给它, 它只会显示error
求助!<(SKU:DFR0189)ASR Board for Arduino语音识别控制器>用不了...图2

求助!<(SKU:DFR0189)ASR Board for Arduino语音识别控制器>用不了...图1

它的d13的燈是開了
我想问一下是不是我的连接方法有问题, 我就是用普通android我手机线和Arduino Leonardo的线连接电脑, 是板子有问题还是我的问题?

求助!<(SKU:DFR0189)ASR Board for Arduino语音识别控制器>用不了...图3
我跟着官方的资料把<需要复制到SD卡中的AD4音频文件>上传到micro sd card, 再开了<语音识别模块.exe>​​, 然后连接ASR board(Com4), 但是我按了所有按键也没有反应, 再对它的mic说成都, 开灯, 关灯等的词语也没反应, 是我做错了什么步骤吗? 求大神解答..


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(13)
philip2929
philip2929
作者
它在设备管理器的Com是正常的, 就写着Arduino Leonardo, 我就是下了它初始化的程序再下led那个, 就是不知道怎样才可以用它的At command
Cain
Cain
你可以看看板子插上后设备管理器是否有端口号,端口上是否有黄色问号。另外,程序下了没?初始化程序是为了清内存,还是需要下led那程序才能正常工作的
philip2929
philip2929
作者

http://zhidao.baidu.com/link?url=wyfnwM-rsLd0STMCQ6fJ6tYAT8pfV1utuTpXf-dvzUQ_RZhDOzpPos6Yc0AFP_cTXSckj6MlfH2HuQYgm-OBiu3XEkURz1fY3AzABoxCJIi
我把這模板當做了Leonardo, 我在百度找到这个上传方法, 在arduino IDE快要上传前,按下复位键,是成功Upload了, 可是一使用模板的软件连接,软件就会hand了, 而且播放音频和接收252,253,254预设关键词的功能也没了,我现在真的搞不清状况, 究竟是什么问题呢
philip2929
philip2929
作者
那该怎么辨, 我还没有试过这情况
Cain
Cain
是否会是板子的bootloader没了?
philip2929
philip2929
作者
[code]
Sketch uses 4,932 bytes (17%) of program storage space. Maximum is 28,672 bytes.[/code]

谢谢提醒, 我看不见它有什么error, 可是它的状态就是一直维持Uploading...
还有我用我usb dirver是arduino leonardo的dirver, 就是../arduino1.xx/dirvers的那个, 会不会有什么问题

252,253,254的预设语音可以使用,问题就是用不了AT命令和上传arduino code
Holiday
Holiday
你把arduino IDE下面的提示栏拉开点,信息多显示一点
philip2929
philip2929
作者
Arduino IDE狀態維持在Uploading...

输入命令在它的software,但是在接收区没有回应

这是板子的图, D13是亮的, 可是因为输入不到命令, 我说关键词也不会有回应

philip2929
philip2929
作者
救命呀!!我上传了好多次也是Uploading..., 可是它的loading bar已经完成, 但state还是Uploading而不是complete, 大神...求求告诉我怎么解决, 我花了好多时间在这里:'(
现在它的D13着了, 可是我说话也没反应, 我狂按加关键词也没用
还有想问一下如果成功传送AT, 在ASR board软件的接收区会不会显示什么?因为我传送了AT+PLAY=001(放AD4), 也听到板子播放对应的AD4, 可是接收区什么也没好显示
Cain
Cain
uploading说明没上传上去,先上传初始化程序是为了重置EEPROM,所以顺序是初始化程序—开关灯识别程序。每次上传语音识别程序之前都建议初始化一下,然后D13是程序里需要开关的灯,没亮说明没识别到你的话,可以多试几次,识别到是会有语音提示的
philip2929
philip2929
作者
我换了1G卡再试一下, 可以听到.AD4, 可是我上传了asr_board_init.pde后, 再试一下,除了按<播放SD卡音頻文件>,<模擬MP3>和AT+TM=CT它會放音, 其他的也没什麼反应

[code]#include
byte value;
void setup()
{
Serial.begin(9600);
while (!Serial) {
;
}
}
void loop()
{
for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);
delay(50);
EEPROM.write(2,78);
EEPROM.write(5, 3);
delay(50);
value = EEPROM.read(2);
Serial.print(value);
Serial.print("\t");
value = EEPROM.read(5);
Serial.println(value);
while(1);
}[/code]
可是我一开始试的时候先上传了library example>>ASRBled的code, 有影响吗?
[code]#include
#include
#include
#define SUM 35//
int set=0,vall,res;
char sRecog[SUM][38]={"kai deng","guan deng","zhun bei"};//
unsigned int fDigit[SUM]={252,253,254};//AD4
void BT(int x,int y,char (*p)[38],unsigned int dd[],int set);
void PT(int x,int y,char (*p)[38],unsigned int dd[],int set);
void ASR_while(int x,int y,char (*p)[38],unsigned int dd[],int set);
void ASR_BT(int x,int y,char (*p)[38],unsigned int dd[],int set);
int button=3,led=4;
void setup()
{
ASRB.Initialise(SUM,sRecog,fDigit);
attachInterrupt(0,ExtInt0Handler,LOW);
//pinMode(button,INPUT);
pinMode(led,OUTPUT);
digitalWrite(led,HIGH);
}
void loop()
{
if(vall==111) PT(SUM,38,sRecog,fDigit,set); //
else if(vall==112) BT(SUM,38,sRecog,fDigit,set); //
else
{
while(1)
{ res=0;
res=ASRB.Asr(SUM,38,sRecog,fDigit,set);
ASR_monitor();
delay(10);
ASRB.Busy_SD();
if (Serial.available() > 0) break;
}
} //
ASRB.AT_command(SUM,38,sRecog,fDigit,set);//
delay(100);
}
void ExtInt0Handler ()
{
ASRB.ProcessInt0();
}
void ASR_while(int x,int y,char (*p)[38],unsigned int dd[],int set)
{
while(1)
{
res=0;
res=ASRB.Asr(x,y,p,dd,set);
ASR_monitor();
delay(10);
ASRB.Busy_SD();
if(res<255&&res>0) break;
if (Serial.available() > 0) break;
// else if(digitalRead(button)==LOW) break;
}
}
void ASR_BT(int x,int y,char (*p)[38],unsigned int dd[],int set)
{
ASRB.send_SD(260);
delay(50);
ASRB.Busy_SD();
ASR_while(x,y,p,dd,set);
}
/**************************************语音控制LED****************************/
void ASR_monitor()
{
if(res==252) digitalWrite(led,LOW);
else if(res==253) digitalWrite(led,HIGH);
}
/*******************************口令模式*************************************/
void PT(int x,int y,char (*p)[38],unsigned int dd[],int set)
{
while(1)
{
set=1;
if (Serial.available() > 0)
{
set=0;
break;
}
int h=ASRB.Asr(x,y,p,dd,set);
delay(50);
if(h==254) //
{
set=0;
ASRB.send_SD(260);
delay(50);
ASRB.Busy_SD();
ASR_while(x,y,p,dd,set);
}
}
}
/*******************************按键模式**************************************/
void BT(int x,int y,char (*p)[38],unsigned int dd[],int set)
{
char local[10]={0};
char DD[1][6]={"asrbt"};
while(1)
{
if (Serial.available() > 0)
{
local[0]= Serial.read();
delay(20);
if(local[0]!=0x41)
{
for(int i=1;i<8;i++)
{
local[i]= Serial.read();
if( local[i]==0x0a) //
{
if( local[i-1]==0x0d)
{
local[i]=0;
local[i-1]=0;
if(strcmp(local,DD[0])==0) //AT
{
ASR_BT(x,y,p,dd,set);
break;
}
}
}
}
}
else
break;
}
/* else if(digitalRead(button)==LOW)
{
delay(100);
if(digitalRead(button)==LOW)
{
ASR_BT(x,y,p,dd,set);
break;
}
}*/
}
} [/code]
我看见send完之后图下面也是显示uploading... , 是正常吗?
板子的D8在播AD4的时候着了, 但D13依然没着
philip2929
philip2929
作者
我用的sd卡是昨天买的8G, 是否一定要少于2G, 还有是因为卡的问题我不能给命令给它吗?
Cain
Cain回复philip2929
命令与sd卡无关,是否在上传语音识别程序之前先上传库里带的初始化程序asr_board_init.pde
Cain
Cain
上传语音识别程序之前先要上传一边库里带的初始化程序asr_board_init.pde,然后使用的SD卡尽量小于2G,而且和SD卡的品质也有关
- 没有更多了 -