“SKU:RB-13K049 AS-4WD語(yǔ)音識(shí)別操控移動(dòng)機(jī)器人”的版本間的差異

來(lái)自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航搜索
?步驟16:插接藍(lán)牙模塊
?安裝步驟 - 語(yǔ)音操控部分
第284行: 第284行:
 
* IOB+(5V) ———PIN1(5V)
 
* IOB+(5V) ———PIN1(5V)
 
* IOB-(GND)———PIN2(GND)
 
* IOB-(GND)———PIN2(GND)
 +
==例子程序==
 +
===凌陽(yáng)板燒錄程序===
 +
<pre style='color:blue'>//========================================================
 +
//按鍵3可從新訓(xùn)練
 +
//程序說(shuō)明學(xué)習(xí)五條語(yǔ)音命令并控制相應(yīng)動(dòng)作
 +
//命令名稱      對(duì)應(yīng)位置        對(duì)應(yīng)文件      發(fā)送數(shù)據(jù)
 +
//紅燈亮        S_ACT0          go.48k W  第二次‘1’第三次‘2’
 +
//綠燈亮        S_ACT1          back.48k X
 +
//紅燈滅        S_ACT2          left.48k A
 +
//綠燈滅        S_ACT3          right.48k D
 +
//全都滅        S_ACT4          stop.48k S  第二次‘#’接收數(shù)據(jù)
 +
//播放超聲測(cè)試距離精度5CM 范圍1-45CM 超過(guò)播放999
 +
// TXD    IOB10
 +
// RXD    IOB7        高電`平
 +
//========================================================
 +
//修改前后左右提示“請(qǐng)注意”
 +
#include "s480.h"
 +
#include "bsrsd.h"
 +
#include "SPCE061A.h"
 +
 +
#define P_IOA_Data (volatile unsigned int *)0x7000 
 +
#define P_IOA_Dir (volatile unsigned int *)0x7002
 +
#define P_IOA_Attrib (volatile unsigned int *)0x7003
 +
#define P_IOB_Data (volatile unsigned int *)0x7005 
 +
#define P_IOB_Dir (volatile unsigned int *)0x7007 
 +
#define P_IOB_Attrib (volatile unsigned int *)0x7008 
 +
#define P_TimerA_Data (volatile unsigned int *)0x700A 
 +
#define P_TimerA_Ctrl (volatile unsigned int *)0x700B 
 +
#define P_TimerB_Data (volatile unsigned int *)0x700C 
 +
#define P_TimerB_Ctrl (volatile unsigned int *)0x700D 
 +
#define P_Watchdog_Clear (volatile unsigned int *)0x7012 
 +
#define P_INT_Mask (volatile unsigned int *)0x702D 
 +
#define P_INT_Clear (volatile unsigned int *)0x7011 
 +
//=============================================================
 +
// 波特率定義 49MHz情況下使用哪個(gè)用哪個(gè)
 +
//=============================================================
 +
//#define C_UARTBaudRate_9600_H    0x05  ////波特率設(shè)置為9600bps
 +
//#define C_UARTBaudRate_9600_L    0x00
 +
 +
#define C_UARTBaudRate_115200_H    0x00;  //波特率設(shè)置為115200bps
 +
#define C_UARTBaudRate_115200_L    0x6B
 +
 +
#define RED_ON 0x100 //訓(xùn)練存儲(chǔ)地址
 +
#define BLUE_ON 0x101
 +
#define RED_OFF    0x102
 +
#define BLUE_OFF    0x103
 +
#define ALL_OFF 0x104
 +
#define S_ACT0 0 //紅燈亮
 +
#define S_ACT1 1 //綠燈亮
 +
#define S_ACT2 2 //紅燈滅
 +
#define S_ACT3 3 //綠燈滅
 +
#define S_ACT4 4 //全滅
 +
#define S_RDY 5 //Yeah
 +
#define S_AGAIN 6 //請(qǐng)?jiān)僬f(shuō)一遍
 +
#define S_NOVOICE 7 //沒有聽到任何聲音
 +
#define S_CMDDIFF 8 //沒有聽清
 +
#define S_NOISY 8 //沒有聽清
 +
#define S_START 9 //準(zhǔn)備就緒,開始辨識(shí)
 +
#define S_QZY 10 //請(qǐng)注意
 +
#define JIASU 11 //加速
 +
#define QUANSU 12 //減速 
 +
#define DQJL 13 //當(dāng)前距離
 +
#define CM 14 //厘米
 +
#define POINT 15 //點(diǎn)
 +
#define ONE 16 //1
 +
#define TWO 17 //2
 +
#define THREE 18 //3
 +
#define FOUR 19 //4
 +
#define FIVE 20 //5
 +
#define SIX 21 //6
 +
#define SEVEN 22 //7
 +
#define EIGHT 23 //8
 +
#define NINE 24 //9
 +
#define TEN 25 //10
 +
 +
extern  unsigned int BSR_SDModel[100]; //外部變量BSR_SDModel[100],辨識(shí)器自帶
 +
extern void F_FlashWrite1Word(unsigned int addr,unsigned int Value);
 +
extern void F_FlashErase(unsigned int sector);
 +
unsigned int uiTimeset = 3; //運(yùn)行時(shí)間定時(shí),調(diào)整該參數(shù)控制運(yùn)行時(shí)間
 +
unsigned int uiTimecont; //運(yùn)行時(shí)間計(jì)時(shí)
 +
 +
unsigned int SPEED = 0; //速度標(biāo)志位
 +
unsigned int STOP = 0; //停止次數(shù)記錄
 +
unsigned int g_uiData; //收到的數(shù)據(jù)
 +
unsigned int RxNum = 0, RxEndSign = 0; //收到數(shù)據(jù)寄存器
 +
//char RxData[3];
 +
unsigned int TxNumTemp, TxNum, TxEndSign;  //發(fā)送數(shù)據(jù)標(biāo)志
 +
char RXdata;
 +
//=============================================================
 +
// 語(yǔ)法格式: void Delay();
 +
// 實(shí)現(xiàn)功能: 延時(shí)
 +
// 參數(shù): 無(wú)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void Delay()
 +
{
 +
unsigned int i;
 +
for(i=0;i<0x3Fff;i++)
 +
{
 +
*P_Watchdog_Clear=0x0001;
 +
}
 +
}
 +
//=============================================================
 +
// 語(yǔ)法格式: void Delay_Us(unsigned int TimeCnt)
 +
// 實(shí)現(xiàn)功能: 延時(shí)(uS)
 +
// 參數(shù): unsigned int TimeCnt:延時(shí)的us數(shù)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void Delay_Us(unsigned int TimeCnt)
 +
{
 +
int i;
 +
*P_SystemClock = 0x98;
 +
for(i = 0; i < TimeCnt; i++)
 +
{
 +
*P_Watchdog_Clear = 0x0001;
 +
}
 +
}
 +
/*
 +
//=============================================================
 +
// 語(yǔ)法格式:    void IRQ7(void);
 +
// 實(shí)現(xiàn)功能: 接收UART數(shù)據(jù)并存
 +
// 參數(shù):        無(wú)
 +
// 返回值:      無(wú)
 +
//=============================================================
 +
void IRQ7(void) __attribute__ ((ISR));
 +
void IRQ7(void)
 +
{
 +
*P_Watchdog_Clear = 0x0001;
 +
if((*P_UART_Command2&0x0080) != 0)
 +
{
 +
for(RxNum=0;RxNum<3;RxNum++){
 +
g_uiData = *P_UART_Data;                                //取收到數(shù)據(jù)
 +
RxData[RxNum] = g_uiData;
 +
}
 +
 +
}
 +
}*/
 +
/*==========================================================
 +
// 實(shí)現(xiàn)功能    UART中斷
 +
============================================================*/
 +
void IRQ7(void)__attribute__((ISR));
 +
void IRQ7(void)
 +
{   
 +
   
 +
//    if((*P_UART_Command2&0x80)!=0)
 +
//    {
 +
        RXdata = *P_UART_Data;       
 +
//    }
 +
 +
}
 +
//=============================================================
 +
// 實(shí)現(xiàn)功能: ULTRA初始化
 +
//=============================================================
 +
void UART_Init(void)
 +
{
 +
*P_IOB_Dir |= 0x0400;                                // bit10設(shè)為輸出口(Tx),bit7設(shè)為輸入口(Rx)               
 +
    *P_IOB_Dir &= 0xff7f;
 +
                               
 +
    *P_IOB_Attrib |= 0x0400;
 +
    *P_IOB_Attrib &= 0xff7f;
 +
   
 +
    *P_IOB_Buffer |= 0x0400;
 +
 +
*P_UART_Command1 = C_UART_Reset; //UART復(fù)位
 +
 +
*P_UART_BaudScalarHigh = C_UARTBaudRate_115200_H; //波特率設(shè)為115200
 +
*P_UART_BaudScalarLow = C_UARTBaudRate_115200_L;
 +
 +
*P_UART_Command1 = 0x80;             //UART接收中斷使能
 +
*P_UART_Command2 = 0xc0;             //UART接收發(fā)送管腳使能
 +
}
 +
//=============================================================
 +
// 實(shí)現(xiàn)功能: 串口接收數(shù)據(jù)
 +
//=============================================================
 +
unsigned int UartreciveByte(void)    //該函數(shù)在中斷服務(wù)程序中
 +
{
 +
    int a,dat;
 +
    a=*P_UART_Command2;
 +
    a=a&0x0080;
 +
    while(a==0)                        //Check bit 6 to see if TxRDY = 1
 +
    {
 +
        a=*P_UART_Command2;
 +
        a=a&0x0080;
 +
        *P_Watchdog_Clear=0x0001;
 +
    }
 +
    dat =*P_UART_Data;                // recive data
 +
  return dat;
 +
}
 +
 +
//=============================================================
 +
// 實(shí)現(xiàn)功能: 串口發(fā)送數(shù)據(jù)
 +
//=============================================================
 +
void UartSendByte(unsigned int data)    //
 +
{
 +
int a;
 +
a=*P_UART_Command2;
 +
a=a&0x0040;
 +
while(!a) //Check bit 6 to see if TxRDY = 1
 +
{
 +
a=*P_UART_Command2;
 +
a=a&0x0040;
 +
}
 +
*P_UART_Data=data; // send data
 +
}
 +
 +
//=============================================================
 +
// 語(yǔ)法格式: void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);
 +
// 實(shí)現(xiàn)功能: 語(yǔ)音播放函數(shù)
 +
// 參數(shù): SndIndex-播放語(yǔ)音資源索引號(hào)
 +
// DAC_Channel-播放聲道選擇
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)
 +
{
 +
BSR_StopRecognizer(); //停止識(shí)別器
 +
SACM_S480_Initial(1); //初始化為自動(dòng)播放
 +
SACM_S480_Play(SndIndex, DAC_Channel, 3); //開始播放一段語(yǔ)音
 +
while((SACM_S480_Status()&0x0001)!= 0) //是否播放完畢?
 +
{
 +
SACM_S480_ServiceLoop(); //解碼并填充隊(duì)列
 +
*P_Watchdog_Clear=0x0001; //清看門狗
 +
}
 +
SACM_S480_Stop(); //停止播放
 +
BSR_InitRecognizer(BSR_MIC); //初始化識(shí)別器
 +
}
 +
 +
//=============================================================
 +
// 語(yǔ)法格式: int TrainWord(int WordID,int SndID);
 +
// 實(shí)現(xiàn)功能: 訓(xùn)練一條指令
 +
// 參數(shù): WordID-指令編碼
 +
// SndID-指令提示音索引號(hào)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
int TrainWord(unsigned int WordID,unsigned int SndID)
 +
{
 +
int Result;
 +
PlaySnd(SndID,3); //引導(dǎo)訓(xùn)練,播放指令對(duì)應(yīng)動(dòng)作
 +
while(1)
 +
{
 +
Result = BSR_Train(WordID,BSR_TRAIN_TWICE); //訓(xùn)練兩次,獲得訓(xùn)練結(jié)果
 +
 +
if(Result==0)break;
 +
switch(Result)
 +
{
 +
case -1: //沒有檢測(cè)出聲音
 +
PlaySnd(S_NOVOICE,3);
 +
return -1;
 +
case -2: //需要訓(xùn)練第二次
 +
PlaySnd(S_AGAIN,3);
 +
break;
 +
case -3: //環(huán)境太吵
 +
PlaySnd(S_NOISY,3);
 +
return -3;
 +
case -4: //數(shù)據(jù)庫(kù)滿
 +
return -4;
 +
case -5:             //檢測(cè)出聲音不同
 +
PlaySnd(S_CMDDIFF,3);
 +
return -5;
 +
case -6:             //序號(hào)錯(cuò)誤
 +
return -6;
 +
default:
 +
break;
 +
}
 +
}
 +
return 0;
 +
}
 +
 +
//=============================================================
 +
// 語(yǔ)法格式: void TrainSD();
 +
// 實(shí)現(xiàn)功能: 訓(xùn)練函數(shù)
 +
// 參數(shù): 無(wú)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void TrainSD()
 +
{
 +
while(TrainWord(RED_ON,S_ACT0) != 0);  //訓(xùn)練第1個(gè)動(dòng)作  前進(jìn)
 +
while(TrainWord(BLUE_ON,S_ACT1) != 0);  //訓(xùn)練第2個(gè)動(dòng)作  后退
 +
while(TrainWord(RED_OFF,S_ACT2) != 0);  //訓(xùn)練第3個(gè)動(dòng)作  左
 +
while(TrainWord(BLUE_OFF,S_ACT3) != 0);  //訓(xùn)練第4個(gè)動(dòng)作  右
 +
while(TrainWord(ALL_OFF,S_ACT4) != 0); //訓(xùn)練第5個(gè)動(dòng)作  停
 +
}
 +
 +
//=============================================================
 +
// 語(yǔ)法格式: void StoreSD();
 +
// 實(shí)現(xiàn)功能: 存儲(chǔ)語(yǔ)音模型函數(shù)
 +
// 參數(shù): 無(wú)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void StoreSD()                         
 +
{ unsigned int ulAddr,i,commandID,g_Ret;
 +
F_FlashWrite1Word(0xef00,0xaaaa);
 +
F_FlashErase(0xe000);
 +
  F_FlashErase(0xe100);
 +
  F_FlashErase(0xe200);
 +
  ulAddr=0xe000;//********
 +
for(commandID=0x100;commandID<0x105;commandID++)  //五條commandID<0x105
 +
{
 +
g_Ret=BSR_ExportSDWord(commandID);
 +
while(g_Ret!=0) //模型導(dǎo)出成功?
 +
g_Ret=BSR_ExportSDWord(commandID);
 +
for(i=0;i<100;i++) //保存語(yǔ)音模型SD1(0xe000---0xe063)
 +
{
 +
    F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);
 +
ulAddr+=1;
 +
}
 +
}
 +
}
 +
 +
//=============================================================
 +
// 語(yǔ)法格式: void StoreSD();
 +
// 實(shí)現(xiàn)功能: 裝載語(yǔ)音模型函數(shù)
 +
// 參數(shù): 無(wú)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void LoadSD()                         
 +
{ unsigned int *p,k,jk,Ret,g_Ret;
 +
p=(int *)0xe000;
 +
for(jk=0;jk<5;jk++)//原jk<5/////////////////////////////////////////////////////////////////////////////////////
 +
{
 +
for(k=0;k<100;k++)
 +
{
 +
Ret=*p;
 +
BSR_SDModel[k]=Ret; //裝載語(yǔ)音模型
 +
p+=1;
 +
}
 +
g_Ret=BSR_ImportSDWord();
 +
while(g_Ret!=0) //模型裝載成功?
 +
g_Ret=BSR_ImportSDWord();
 +
}
 +
}
 +
/*
 +
//=============================================================
 +
// 語(yǔ)法格式: void paydistance(data);
 +
// 實(shí)現(xiàn)功能: 播放串口數(shù)據(jù)
 +
// 參數(shù): 無(wú)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void playdistance(unsigned int udata){
 +
unsigned int decade;
 +
unsigned int theunit;
 +
unsigned int hundreds;
 +
if(udata > 100){
 +
hundreds = udata/100;
 +
udata = udata - hundreds*100;
 +
}
 +
 +
decade = udata/10;
 +
theunit = udata%10;
 +
if(decade >0 && decade < 10){ //沒有十位時(shí)不讀
 +
PlaySnd(decade+15,3);//
 +
PlaySnd(TEN,3);//10
 +
}else if(theunit > 0&& theunit <10){ //沒有個(gè)位時(shí)不讀
 +
PlaySnd(theunit+15,3);//
 +
// data = 0;//清除接收緩存
 +
}
 +
}
 +
*/
 +
//=============================================================
 +
// 語(yǔ)法格式: void BSR(void);
 +
// 實(shí)現(xiàn)功能: 辨識(shí)子函數(shù)
 +
// 參數(shù): 無(wú)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
void BSR(void)
 +
{
 +
int Result; //辨識(shí)結(jié)果寄存
 +
Result = BSR_GetResult(); //獲得識(shí)別結(jié)果
 +
 +
if(Result>0) //有語(yǔ)音觸發(fā)?
 +
{
 +
*P_Watchdog_Clear = 0x1;
 +
switch(Result)
 +
{
 +
case RED_ON:
 +
if(SPEED == 0){
 +
  UartSendByte('W');
 +
  SPEED++;STOP = 0;
 +
  PlaySnd(S_ACT0,3);//播放前進(jìn)
 +
}else if(SPEED == 1){
 +
UartSendByte('1');
 +
SPEED++;STOP = 0;
 +
  PlaySnd(JIASU,3);    //播放加速前進(jìn)
 +
}else if(SPEED == 2){
 +
UartSendByte('2');
 +
SPEED = 2;STOP = 0; //預(yù)留檔位
 +
PlaySnd(QUANSU,3);//播放全速前進(jìn)
 +
}
 +
break;
 +
case BLUE_ON:
 +
  UartSendByte('X');
 +
  PlaySnd(S_ACT1,3);    //后退
 +
  PlaySnd(S_QZY,3);    //請(qǐng)注意
 +
  SPEED = 0;STOP = 0; //轉(zhuǎn)彎后減到一檔  清除STOP次數(shù)
 +
break;
 +
case RED_OFF:
 +
UartSendByte('A');
 +
  PlaySnd(S_ACT2,3);    //左轉(zhuǎn)
 +
//  PlaySnd(S_QZY,3);    //請(qǐng)注意
 +
  SPEED = 0;STOP = 0; //轉(zhuǎn)彎后減到一檔 清除STOP次數(shù)
 +
break;
 +
case BLUE_OFF:
 +
UartSendByte('D');
 +
  PlaySnd(S_ACT3,3);    //右轉(zhuǎn)
 +
//  PlaySnd(S_QZY,3);    //請(qǐng)注意
 +
  SPEED = 0;STOP = 0; //轉(zhuǎn)彎后減到一檔 清除STOP次數(shù)
 +
break;
 +
case ALL_OFF:
 +
if(STOP == 0){
 +
  UartSendByte('S');
 +
  STOP = 1;
 +
  PlaySnd(S_ACT4,3);    //停止
 +
  SPEED = 0; //轉(zhuǎn)彎后減到一檔
 +
}else if(STOP == 1){
 +
STOP = 1; //允許重復(fù)讀取
 +
UartSendByte('#'); //發(fā)送超聲波數(shù)據(jù)請(qǐng)求
 +
Delay(600); //等待數(shù)據(jù)接收完
 +
while(RXdata != 0){
 +
switch(RXdata){
 +
case 'a':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(ONE,3);//1
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'b':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(ONE,3);//1
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'c':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(TWO,3);//2
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'd':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(TWO,3);//2
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'e':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(THREE,3);//3
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'f':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(THREE,3);//3
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'g':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(FOUR,3);//4
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
case 'h':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(FOUR,3);//4
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'i':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'j':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'k':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(SIX,3);//6
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'l':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(SIX,3);//6
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'm':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(SEVEN,3);//7
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'n':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(SEVEN,3);//7
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'o':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(EIGHT,3);//8
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'p':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(EIGHT,3);//8
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'q':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(NINE,3);//9
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
case 'r':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(NINE,3);//9
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
STOP = 1; //允許重復(fù)讀取
 +
break;
 +
/* case 's':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(FOUR,3);//4
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
break;
 +
case 't':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(FOUR,3);//4
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
break;
 +
case 'u':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(FOUR,3);//4
 +
PlaySnd(TEN,3);//10
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
break;
 +
*/
 +
case '~':
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
  PlaySnd(NINE,3);//9
 +
PlaySnd(NINE,3);//9
 +
PlaySnd(NINE,3);//9
 +
PlaySnd(CM,3);//厘米
 +
RXdata = 0;
 +
break;
 +
default:
 +
RXdata = 0;
 +
break;
 +
}
 +
}
 +
  }
 +
 +
break;
 +
default:
 +
break;
 +
}
 +
}
 +
}
 +
//=============================================================
 +
// 語(yǔ)法格式: int main(void);
 +
// 實(shí)現(xiàn)功能: 主函數(shù)
 +
// 參數(shù): 無(wú)
 +
// 返回值: 無(wú)
 +
//=============================================================
 +
int main(void)
 +
{
 +
unsigned int BS_Flag; //Train標(biāo)志位  空
 +
BSR_DeleteSDGroup(0); //初始化存儲(chǔ)器RAM
 +
BS_Flag=*(unsigned int *)0xe000; //讀存儲(chǔ)單元0xe000
 +
if(BS_Flag==0xffff) //沒有經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0xffff)
 +
{
 +
TrainSD(); //訓(xùn)練
 +
StoreSD(); //存儲(chǔ)訓(xùn)練結(jié)果(語(yǔ)音模型)
 +
}
 +
else //經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0x0055)
 +
{
 +
LoadSD(); //語(yǔ)音模型載入識(shí)別器
 +
}
 +
 +
PlaySnd(S_START,3); //開始識(shí)別提示
 +
BSR_InitRecognizer(BSR_MIC); //初始化識(shí)別器
 +
 +
UART_Init(); //UART初始化
 +
 +
__asm("IRQ ON"); //開中斷
 +
while(1)
 +
{
 +
   
 +
  BSR();// 語(yǔ)音識(shí)別
 +
  *P_Watchdog_Clear=0x0001;
 +
// __asm("IRQ OFF"); //跳出關(guān)中斷
 +
if((*P_IOA_Data)&0x0004) //按鍵4從新訓(xùn)練
 +
{
 +
F_FlashErase(0xe000);
 +
while(1);
 +
}
 +
if((*P_IOA_Data)&0x0002){ //緊急停止按鍵2
 +
UartSendByte('S');
 +
// playdistance(RxData[0]-30);
 +
// UartSendByte(RxData[0]);//RXdata -48
 +
// playdistance(RxData[1]-30);
 +
// UartSendByte(RxData[1]);//RXdata -48
 +
// UartSendByte(RxData[2]);//RXdata -48
 +
}
 +
if((*P_IOA_Data)&0x0001) //按鍵1播放所有聲音
 +
{
 +
PlaySnd(S_ACT0,3);//測(cè)試聲音
 +
PlaySnd(S_ACT1,3);//測(cè)試聲音
 +
PlaySnd(S_ACT2,3);//測(cè)試聲音
 +
PlaySnd(S_ACT3,3);//測(cè)試聲音
 +
PlaySnd(S_ACT4,3);//測(cè)試聲音
 +
PlaySnd(S_RDY,3);//測(cè)試聲音
 +
PlaySnd(S_AGAIN,3);//測(cè)試聲音
 +
PlaySnd(S_NOISY,3);//測(cè)試聲音
 +
PlaySnd(S_START,3);//測(cè)試聲音
 +
PlaySnd(S_QZY,3);//測(cè)試聲音
 +
PlaySnd(JIASU,3);//測(cè)試聲音
 +
PlaySnd(QUANSU,3);//測(cè)試聲音
 +
PlaySnd(DQJL,3);//當(dāng)前距離
 +
PlaySnd(CM,3);//厘米
 +
PlaySnd(POINT,3);//點(diǎn)
 +
PlaySnd(ONE,3);//1
 +
PlaySnd(TWO,3);//2
 +
PlaySnd(THREE,3);//3
 +
PlaySnd(FOUR,3);//4
 +
PlaySnd(FIVE,3);//5
 +
PlaySnd(SIX,3);//6
 +
PlaySnd(SEVEN,3);//7
 +
PlaySnd(EIGHT,3);//8
 +
PlaySnd(NINE,3);//9
 +
PlaySnd(TEN,3);//10
 +
}
 +
 +
}
 +
}
 +
 +
</pre>
 +
 +
===4WD 平臺(tái)端程序===

2016年7月26日 (二) 16:41的版本

RB13K04901.png

目錄

產(chǎn)品概述

AS - 4WD 語(yǔ)音識(shí)別移動(dòng)機(jī)器人語(yǔ)音識(shí)別采用凌陽(yáng)單片機(jī)控制器,它可以學(xué)習(xí)記錄你的聲音,并且跟你實(shí)現(xiàn)人機(jī)對(duì)話,通過(guò)識(shí)別和理解過(guò)程把語(yǔ)音信號(hào)轉(zhuǎn)變?yōu)橄鄳?yīng)的命令,經(jīng)過(guò)無(wú)線藍(lán)牙模塊傳輸給機(jī)器人,從而可以完成前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、測(cè)距播報(bào)等功能,實(shí)現(xiàn)人機(jī)互動(dòng)。

技術(shù)參數(shù)

平臺(tái)參數(shù)

  • 平臺(tái)長(zhǎng)度:206mm
  • 平臺(tái)寬度:200mm
  • 平臺(tái)高度:65mm
  • 平臺(tái)重量:620g

平臺(tái)尺寸圖

RB13K00610.png

直流減速電機(jī)(1:48)

  • 驅(qū)動(dòng)電機(jī)齒輪箱減速比:1:48
  • 額定轉(zhuǎn)速(6V):275±10 rpm
  • 額定轉(zhuǎn)速(7.4V):345±10 rpm
  • 額定電流(6V):180±10 mA
  • 額定電流(7.4V):200±10 mA
  • 最大扭矩(6V):0.095 Nm
  • 最大扭矩(7.4V):0.11 Nm
  • 尺寸大小:70.50 mm×27.00 mm×23.00 mm(長(zhǎng)×寬×高)
  • 重量大?。杭s30g

語(yǔ)音操控小車參數(shù)

  1. 尺寸:215 * 200 * 120 mm
  2. 重量:1.5kg
  3. 機(jī)器人類型:移動(dòng)機(jī)器人
  4. 工作電壓:7 - 12V
  5. 主控器:Carduino UNO R3
  6. 操控方式:語(yǔ)音操控
  7. 操控距離:5 m - 8 m

配件清單

  • 4WD 鋁合金移動(dòng)平臺(tái) * 1套
RB13K00601.jpg
  • 4WD 語(yǔ)音識(shí)別操控移動(dòng)機(jī)器人附件
RB13K04900.png

安裝步驟 - 4WD鋁合金平臺(tái)部分

4wd 鋁合金平臺(tái)內(nèi)部元件詳解(圖片標(biāo)號(hào)對(duì)應(yīng)清單序號(hào)

13K00820.png

步驟1:焊接部分

電機(jī)連接線焊接

1、準(zhǔn)備如下圖所示的材料

  • 4 * 直流減速電機(jī);
  • 4 * 紅色導(dǎo)線(長(zhǎng)度為 15cm);
  • 4 * 黑色導(dǎo)線(長(zhǎng)度為 15cm);
  • 4 * 扎帶
13K00821.png

2、如下圖所示,將紅黑導(dǎo)線焊接到電機(jī)上,并將兩個(gè)電機(jī)連接到一起

13K00822.png

3、如下圖所示,分別在兩組電機(jī)上焊接兩條線,為了后續(xù)連接到驅(qū)動(dòng)板使用,再將四個(gè)電機(jī)都捆綁上扎帶后,電機(jī)部分的焊接就完成了

13K00823.png

開關(guān)接口線焊接

1、準(zhǔn)備如下圖所示的材料

  • 充電接口
  • 撥動(dòng)開關(guān)
  • 連接線(紅色 10cm * 1條、紅色 15cm * 1條、黑色 15cm * 1條、紅色 20cm * 1條、黑色 20cm * 1條)、熱縮管、電池盒
13K00824.png

2、如圖所示,進(jìn)行連接線的焊接

13K008251.png

3、如圖所示,連接充電接口和撥動(dòng)開關(guān)

13K00826.png

4、如圖所示,使用兩根較短的線連接電池盒

13K00827.png

注意:本例中小車的供電使用的電池盒,本電池盒需要使用的是 6 節(jié) 5 號(hào)電池盒,若使用鋰電池,焊接的方式是相同的。
更加詳細(xì)的制作過(guò)程,可以點(diǎn)擊:充電接口及撥動(dòng)開關(guān)制作方法

步驟2:側(cè)板電機(jī)安裝

1、準(zhǔn)備如下圖所示的材料:

  • 2 * 黃色直流減速電機(jī)
  • 1 * 平臺(tái)側(cè)板
  • 4 * M3 * 25 螺絲
  • 4 * M3 六角螺母
13K00828.png

2、如圖所示,將電機(jī)安裝到側(cè)板 實(shí)物安裝圖:

13K00829.png
RB13K00607.png

3、進(jìn)行另一側(cè)板電機(jī)的安裝,如圖所示,為兩側(cè)電機(jī)安裝完成效果圖

13K00830.png

步驟3:側(cè)板與底板的安裝

1、準(zhǔn)備如下圖所示的材料:

  • 2 * 步驟 2 中安裝好的側(cè)板
  • 1 * 平臺(tái)底板
  • 4 * M3 * 6螺絲
13K00831.png

2、按照下圖進(jìn)行安裝 安裝實(shí)物圖:

13K00832.png
RB13K00602.png

步驟4:電機(jī)驅(qū)動(dòng)板的安裝

1、準(zhǔn)備如下圖所示的材料:

  • 步驟 3 中安裝好的零件
  • 1 * 電機(jī)驅(qū)動(dòng)板
  • 4 * M3 * 6螺絲
  • 4 * M3 螺母
  • 4 * M3 * 10 尼龍柱
13K00833.png

2、將尼龍柱固定到小車的底板上,位置如下圖所示:

13K00834.png

3、安裝雙H橋驅(qū)動(dòng)板,如圖所示:

13K00835.png

步驟5:電機(jī)接線

1、如圖所示,將兩側(cè)電機(jī)的紅線連接到電機(jī)驅(qū)動(dòng)板的 A 接口,黑線連接到電機(jī)驅(qū)動(dòng)板的 B 接口

13K00836.png

2、安裝完成效果如下圖所示

13K00837.png

步驟6:上板充電接口撥動(dòng)開關(guān)安裝

1、準(zhǔn)備如下圖所示的材料:

  • 步驟 1 中做好的充電接口撥動(dòng)開關(guān)連接線
  • 平臺(tái)上板
13K00838.png

2、安裝完成效果如圖所示

13K00839.png
RB13K00603.png

步驟7:控制器的安裝

1、準(zhǔn)備如下圖所示的材料

  • 步驟 6 中安裝好的零件
  • Carduino UNO 控制器
  • 傳感器擴(kuò)展板 V5.0
  • 3 * 尼龍柱 M3 * 10
  • 3 * M3 螺母
  • 3 * M3 * 6 螺絲
13K00840.png

2、在小車上支撐板安裝控制器的固定尼龍柱,位置如下圖所示:

13K00841.png

3、如圖所示,安裝 Carduino UNO 控制器

13K00842.png

4、如圖所示,插入擴(kuò)展板

13K00843.png

擴(kuò)展板插入效果圖:

13K00844.png

步驟8:電控部分接線

1、準(zhǔn)備如下圖所示的材料

  • 2 * 3P 傳感器連接線
  • 供電線,紅色黑色各一條 * 20cm
  • 平臺(tái)車體
  • 平臺(tái)上板
13K00845.png

2、如圖所示為雙H橋驅(qū)動(dòng)板和 Carduino UNO 控制器的接線順序
(1) 雙H橋驅(qū)動(dòng)板端接線順序

  • 黃色 EA、紅色 I2、黑色 I1
  • 黃色 EB、紅色 I4、黑色 I1
13K00846.png

(2)傳感器擴(kuò)展板端接線順序

  • EA - D5、I2 - D6、I1 - D7
  • EB - D11、I4 - D10、I3 - D9
13K05631.png

(3)完成效果如下圖所示,為了布線看起來(lái)更加整齊,我們將 3P 線從小車上板的孔穿出

13K00848.png

3、供電部分連接
(1)如圖所示為雙H橋驅(qū)動(dòng)板部分供電線連接,充電接口紅色導(dǎo)線接到 VMS,黑色導(dǎo)線接到 GND;將雙 H 橋驅(qū)動(dòng)板輸出的 5v 電源連接到 V5.0 擴(kuò)展板的紅色端子,連接時(shí)注意正負(fù)極不要接錯(cuò)

13K00849.png

(2)如圖所示為傳感器擴(kuò)展板 V5.0 供電線連接

13K00850.png

步驟9:舵機(jī)安裝

1、準(zhǔn)備如下圖所示的材料:

  • 1 * 35PG 舵機(jī)
  • 1 * 小車車體
  • 1 * M4 * 8 螺絲套裝
13K05650.png

2、按照下圖進(jìn)行安裝 安裝實(shí)物圖:

13K05651.png

步驟10:超聲波傳感器支架安裝

1、準(zhǔn)備如下圖所示的材料:

  • 1 * 超聲波傳感器支架
  • 1 * 圓形舵盤
  • 1 * 黑色自攻釘(大)
  • 4 * 黑色自攻釘(小)
13K05652.png

2、按照下圖給超聲波傳感器支架分別安裝橡膠套圈、圓形舵盤 安裝實(shí)物圖:

13K05653.png
13K05654.png



3、如圖所示,將超聲波支架連接到舵機(jī)軸,注意在連接舵機(jī)和超聲波支架的時(shí)候,盡量不要轉(zhuǎn)動(dòng)舵機(jī),使舵機(jī)仍然保持在中間位置上

13K05655.png

步驟11:超聲波傳感器安裝

1、準(zhǔn)備如下圖所示的材料:

  • 1 * 安裝好的車體
  • 1 * 超聲波傳感器
  • 2 * M3 * 10 尼龍柱
  • 2 * M3 螺母
  • 2 * M3 * 6 螺絲
13K05656.png

2、如下圖所示,首先將超聲波傳感器調(diào)節(jié)到模式 1

13K05657.png

3、在下圖所示位置安裝尼龍柱用來(lái)固定超聲波傳感器,并將 4P 線從超聲波支架較小的孔中穿出

13K05658.png

4、如圖所示,安裝超聲波傳感器,由于例程中使用的是單模式,超聲波傳感器只需連接 input 引腳,所以我們將 4P 線中的黃色線取掉

13K05659.png

步驟12:傳感器接線

如圖所示,將超聲波傳感器連接到傳感器擴(kuò)展板 V5.0
注意:4WD 語(yǔ)音識(shí)別小車中的舵機(jī),不需要連接任何接口,只是起到了固定超聲波傳感器的作用。

RB13K049041.png

步驟13:4WD 平臺(tái)上板安裝

1、準(zhǔn)備如下圖所示的材料:

  • 未固定上板的車體
  • 4 * M3 * 6螺絲
13K056611.png

2、在圖中圓圈位置安裝 4 個(gè) M3 * 6 螺絲來(lái)固定小車上板

13K056622.png

步驟14:4WD 平臺(tái)端板安裝

1、準(zhǔn)備如下圖所示的材料:

  • 步驟 13 中安裝好的車體
  • 2 * 小車端板
  • 8 * M3 * 6 螺絲
13K056633.png

2、如圖所示,將端板與車體進(jìn)行固定

13K056644.png

步驟15:4WD 平臺(tái)車輪安裝

1、準(zhǔn)備如下圖所示的材料:

  • 步驟 14 中安裝好的車體
  • 4 * 車輪
13K056655.png

2、如圖所示,將車輪與車體安裝在一起

13K056666.png

步驟16:插接藍(lán)牙模塊

1、準(zhǔn)備如下圖所示的材料:

  • 1 * 藍(lán)牙模塊
  • 步驟 15 中安裝好的小車平臺(tái)整體
RB13K049021.png

2、將藍(lán)牙模塊插接到傳感器擴(kuò)展板的藍(lán)牙接口上,如圖所示

RB13K049031.png

安裝步驟 - 語(yǔ)音操控部分

1、準(zhǔn)備如下產(chǎn)品

  • 凌陽(yáng)開發(fā)板 * 1套
  • 藍(lán)牙模塊 * 1個(gè)(模式:主)

注:如果不知道如何配置藍(lán)牙模塊主從模式,可以參考:藍(lán)牙模塊說(shuō)明書

  • 10P 杜邦線 * 1組

2、凌陽(yáng)61實(shí)驗(yàn)板部分接線

  • 如圖所示,連接電池盒凌陽(yáng)實(shí)驗(yàn)板
RB13K049100.png

3、語(yǔ)音訓(xùn)練
按一下KEY3 鍵開始按照語(yǔ)音提示進(jìn)行語(yǔ)音訓(xùn)練。

RB13K049101.png

訓(xùn)練采用應(yīng)答形式,每條指令訓(xùn)練兩次,每條命令的訓(xùn)練方法是相同的,以第一條命令“前進(jìn)”為例說(shuō)明:
第一步:控制器提示“前進(jìn)”
第二步:我們對(duì)著話筒說(shuō)“前進(jìn)”
第三步:語(yǔ)音控制器提示“再說(shuō)一遍”
第四步:我們?cè)俅螌?duì)著話筒說(shuō)“前進(jìn)”
到此第一條命令訓(xùn)練完畢。如果訓(xùn)練成功控制器會(huì)自動(dòng)進(jìn)入下一條命令的訓(xùn)練,如果環(huán)境很吵或前后你說(shuō)的話偏差太大,控制器會(huì)提示“沒有聲音”或者“沒有聽清”這樣這條命令就會(huì)從新訓(xùn)練。當(dāng)所有的命令訓(xùn)練完畢,控制器會(huì)提示“準(zhǔn)備好了”。此時(shí)命令已經(jīng)存儲(chǔ)完畢,斷電后開啟不用從新訓(xùn)練,如果在訓(xùn)練過(guò)程中斷電,則再次上電時(shí)會(huì)從新從第一條訓(xùn)練。
4、按鍵說(shuō)明
按鍵位置圖:

RB13K049101.png
  • KEY1:按下KEY1 鍵播放控制器內(nèi)所有語(yǔ)音(控制器自檢功能)
  • KEY2:緊急停止命令等同語(yǔ)音“停止”命令
  • KEY3:從新進(jìn)行語(yǔ)音訓(xùn)練(當(dāng)識(shí)別靈敏度降低或更換法令人時(shí)使用)

5、接線說(shuō)明
按照?qǐng)D中說(shuō)明連接凌陽(yáng)61板和藍(lán)牙模塊

RB13K049102.png

說(shuō)明:控制器——無(wú)線藍(lán)牙模塊

  • IOB7(RXD) ——PIN5(TXD)
  • IOB10(TXD)——PIN4(RXD)
  • IOB+(5V) ———PIN1(5V)
  • IOB-(GND)———PIN2(GND)

例子程序

凌陽(yáng)板燒錄程序

//========================================================
//按鍵3可從新訓(xùn)練
//程序說(shuō)明學(xué)習(xí)五條語(yǔ)音命令并控制相應(yīng)動(dòng)作
//命令名稱       對(duì)應(yīng)位置        對(duì)應(yīng)文件       發(fā)送數(shù)據(jù)
//紅燈亮         S_ACT0          go.48k			W  第二次‘1’第三次‘2’
//綠燈亮         S_ACT1          back.48k		X
//紅燈滅         S_ACT2          left.48k		A
//綠燈滅         S_ACT3          right.48k		D
//全都滅         S_ACT4          stop.48k		S  第二次‘#’接收數(shù)據(jù)
//播放超聲測(cè)試距離精度5CM 范圍1-45CM	超過(guò)播放999
//	TXD     IOB10
//	RXD     IOB7        高電`平
//========================================================
//修改前后左右提示“請(qǐng)注意”
#include "s480.h"
#include "bsrsd.h"
#include "SPCE061A.h"

#define	P_IOA_Data 			(volatile unsigned int *)0x7000   
#define P_IOA_Dir 			(volatile unsigned int *)0x7002
#define P_IOA_Attrib 		(volatile unsigned int *)0x7003
#define P_IOB_Data			(volatile unsigned int *)0x7005  
#define P_IOB_Dir			(volatile unsigned int *)0x7007   
#define P_IOB_Attrib		(volatile unsigned int *)0x7008   
#define P_TimerA_Data		(volatile unsigned int *)0x700A   
#define P_TimerA_Ctrl		(volatile unsigned int *)0x700B   
#define P_TimerB_Data		(volatile unsigned int *)0x700C   
#define P_TimerB_Ctrl		(volatile unsigned int *)0x700D   
#define P_Watchdog_Clear	(volatile unsigned int *)0x7012   
#define P_INT_Mask			(volatile unsigned int *)0x702D   
#define P_INT_Clear			(volatile unsigned int *)0x7011   
//=============================================================
// 波特率定義 49MHz情況下使用哪個(gè)用哪個(gè)
//=============================================================
//#define 	C_UARTBaudRate_9600_H     0x05   	////波特率設(shè)置為9600bps
//#define 	C_UARTBaudRate_9600_L     0x00

#define 	C_UARTBaudRate_115200_H     0x00;  //波特率設(shè)置為115200bps
#define 	C_UARTBaudRate_115200_L     0x6B

#define RED_ON 			0x100						//訓(xùn)練存儲(chǔ)地址
#define BLUE_ON 		0x101
#define RED_OFF     	0x102
#define BLUE_OFF    	0x103
#define ALL_OFF		 	0x104
#define S_ACT0				0							//紅燈亮
#define S_ACT1				1							//綠燈亮
#define S_ACT2				2							//紅燈滅
#define S_ACT3				3							//綠燈滅
#define S_ACT4				4							//全滅	
#define S_RDY				5							//Yeah
#define S_AGAIN				6							//請(qǐng)?jiān)僬f(shuō)一遍
#define S_NOVOICE			7							//沒有聽到任何聲音
#define S_CMDDIFF			8							//沒有聽清
#define S_NOISY				8							//沒有聽清
#define S_START				9							//準(zhǔn)備就緒,開始辨識(shí)
#define S_QZY				10							//請(qǐng)注意	
#define JIASU				11							//加速
#define QUANSU				12							//減速  
#define DQJL				13							//當(dāng)前距離
#define CM					14							//厘米
#define POINT				15							//點(diǎn)
#define ONE					16							//1	
#define TWO					17							//2
#define THREE				18							//3
#define FOUR				19							//4
#define FIVE				20							//5
#define SIX					21							//6
#define SEVEN				22							//7
#define EIGHT				23							//8
#define NINE				24							//9
#define TEN					25							//10

extern  unsigned int BSR_SDModel[100];					//外部變量BSR_SDModel[100],辨識(shí)器自帶
extern void F_FlashWrite1Word(unsigned int addr,unsigned int Value);
extern void F_FlashErase(unsigned int sector);
unsigned int uiTimeset = 3;								//運(yùn)行時(shí)間定時(shí),調(diào)整該參數(shù)控制運(yùn)行時(shí)間
unsigned int uiTimecont; 								//運(yùn)行時(shí)間計(jì)時(shí)

unsigned int SPEED = 0;						//速度標(biāo)志位
unsigned int STOP = 0;						//停止次數(shù)記錄
unsigned int g_uiData;						//收到的數(shù)據(jù)
unsigned int RxNum = 0, RxEndSign = 0;	//收到數(shù)據(jù)寄存器
//char RxData[3];
unsigned int TxNumTemp, TxNum, TxEndSign;  	//發(fā)送數(shù)據(jù)標(biāo)志
char RXdata;
//=============================================================
// 語(yǔ)法格式:	void Delay();
// 實(shí)現(xiàn)功能:	延時(shí)
// 參數(shù):		無(wú)
// 返回值:		無(wú)
//=============================================================
void Delay()							
{
	unsigned int i;
	for(i=0;i<0x3Fff;i++)
	{
		*P_Watchdog_Clear=0x0001;
	}
}
//=============================================================
// 語(yǔ)法格式:	void Delay_Us(unsigned int TimeCnt)
// 實(shí)現(xiàn)功能:	延時(shí)(uS)
// 參數(shù):		unsigned int TimeCnt:延時(shí)的us數(shù)
// 返回值:		無(wú)
//=============================================================
void Delay_Us(unsigned int TimeCnt)
{
	int i;
	*P_SystemClock = 0x98;
	for(i = 0; i < TimeCnt; i++)
	{
		*P_Watchdog_Clear = 0x0001;
	}
}
/*
//============================================================= 
// 語(yǔ)法格式:    void IRQ7(void);
// 實(shí)現(xiàn)功能:	接收UART數(shù)據(jù)并存
// 參數(shù):        無(wú)
// 返回值:      無(wú)
//=============================================================
void IRQ7(void) __attribute__ ((ISR));
void IRQ7(void)
{
	*P_Watchdog_Clear = 0x0001;
	if((*P_UART_Command2&0x0080) != 0)
	{
		for(RxNum=0;RxNum<3;RxNum++){
			g_uiData = *P_UART_Data;                                 	//取收到數(shù)據(jù)
			RxData[RxNum] = g_uiData;
		}

	}	
}*/
/*==========================================================
//		實(shí)現(xiàn)功能     UART中斷
============================================================*/
void IRQ7(void)__attribute__((ISR));
void IRQ7(void)
{    
    
//    if((*P_UART_Command2&0x80)!=0)
//    {
        RXdata = *P_UART_Data;        
//    }

}
//=============================================================
// 實(shí)現(xiàn)功能:	ULTRA初始化
//=============================================================
void UART_Init(void)
{
 	*P_IOB_Dir |= 0x0400;                                // bit10設(shè)為輸出口(Tx),bit7設(shè)為輸入口(Rx)                
    *P_IOB_Dir &= 0xff7f;
                                 
    *P_IOB_Attrib |= 0x0400;
    *P_IOB_Attrib &= 0xff7f;
    
    *P_IOB_Buffer |= 0x0400;
						
	*P_UART_Command1 = C_UART_Reset;					//UART復(fù)位
	
	*P_UART_BaudScalarHigh = C_UARTBaudRate_115200_H;		//波特率設(shè)為115200
	*P_UART_BaudScalarLow = C_UARTBaudRate_115200_L;

	*P_UART_Command1 = 0x80;				            //UART接收中斷使能
	*P_UART_Command2 = 0xc0;				            //UART接收發(fā)送管腳使能
}
//=============================================================
// 實(shí)現(xiàn)功能:	串口接收數(shù)據(jù)
//=============================================================
unsigned int UartreciveByte(void)    //該函數(shù)在中斷服務(wù)程序中
{
    int a,dat;
    a=*P_UART_Command2;
    a=a&0x0080;
    while(a==0)                        //Check bit 6 to see if TxRDY = 1
    {
        a=*P_UART_Command2;
        a=a&0x0080;
        *P_Watchdog_Clear=0x0001;
    }
    dat =*P_UART_Data;                // recive data
  return dat;
}

//=============================================================
// 實(shí)現(xiàn)功能:	串口發(fā)送數(shù)據(jù)
//=============================================================
void UartSendByte(unsigned int data)    //
{
	int a;
	a=*P_UART_Command2;
	a=a&0x0040;
	while(!a)						//Check bit 6 to see if TxRDY = 1
	{
		a=*P_UART_Command2;
		a=a&0x0040;
	}
	*P_UART_Data=data;				// send data
}

//=============================================================
// 語(yǔ)法格式:	void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);
// 實(shí)現(xiàn)功能:	語(yǔ)音播放函數(shù)
// 參數(shù):		SndIndex-播放語(yǔ)音資源索引號(hào)
//				DAC_Channel-播放聲道選擇
// 返回值:		無(wú)
//=============================================================
void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)
{
	BSR_StopRecognizer();								//停止識(shí)別器
	SACM_S480_Initial(1);								//初始化為自動(dòng)播放
	SACM_S480_Play(SndIndex, DAC_Channel, 3);			//開始播放一段語(yǔ)音
	while((SACM_S480_Status()&0x0001)!= 0)				//是否播放完畢?
	{
		SACM_S480_ServiceLoop();						//解碼并填充隊(duì)列
		*P_Watchdog_Clear=0x0001;						//清看門狗
	}
	SACM_S480_Stop();									//停止播放
	BSR_InitRecognizer(BSR_MIC);						//初始化識(shí)別器
}

//=============================================================
// 語(yǔ)法格式:	int TrainWord(int WordID,int SndID);
// 實(shí)現(xiàn)功能:	訓(xùn)練一條指令
// 參數(shù):		WordID-指令編碼
//				SndID-指令提示音索引號(hào)
// 返回值:		無(wú)
//=============================================================
int TrainWord(unsigned int WordID,unsigned int SndID)
{
	int Result;
	PlaySnd(SndID,3);									//引導(dǎo)訓(xùn)練,播放指令對(duì)應(yīng)動(dòng)作
	while(1)
	{
		Result = BSR_Train(WordID,BSR_TRAIN_TWICE);		//訓(xùn)練兩次,獲得訓(xùn)練結(jié)果
										
		if(Result==0)break;
		switch(Result)
		{
		case -1:										//沒有檢測(cè)出聲音
			PlaySnd(S_NOVOICE,3);
			return -1;
		case -2: 										//需要訓(xùn)練第二次
			PlaySnd(S_AGAIN,3);
			break;
		case -3:										//環(huán)境太吵
			PlaySnd(S_NOISY,3);
			return -3;	
		case -4:										//數(shù)據(jù)庫(kù)滿
	 		return -4;	
		case -5: 			            				//檢測(cè)出聲音不同
			PlaySnd(S_CMDDIFF,3);
			return -5;
		case -6: 			            				//序號(hào)錯(cuò)誤
			return -6;
		default:
			break;
		}
	}
	return 0;
}

//=============================================================
// 語(yǔ)法格式:	void TrainSD();
// 實(shí)現(xiàn)功能:	訓(xùn)練函數(shù)
// 參數(shù):		無(wú)
// 返回值:		無(wú)
//=============================================================
void TrainSD()
{
	while(TrainWord(RED_ON,S_ACT0) != 0);  		//訓(xùn)練第1個(gè)動(dòng)作   前進(jìn)
	while(TrainWord(BLUE_ON,S_ACT1) != 0);  	//訓(xùn)練第2個(gè)動(dòng)作   后退
	while(TrainWord(RED_OFF,S_ACT2) != 0);  	//訓(xùn)練第3個(gè)動(dòng)作   左
	while(TrainWord(BLUE_OFF,S_ACT3) != 0);  	//訓(xùn)練第4個(gè)動(dòng)作   右
	while(TrainWord(ALL_OFF,S_ACT4) != 0);		//訓(xùn)練第5個(gè)動(dòng)作   停
}

//=============================================================
// 語(yǔ)法格式:	void StoreSD();
// 實(shí)現(xiàn)功能:	存儲(chǔ)語(yǔ)音模型函數(shù)
// 參數(shù):		無(wú)
// 返回值:		無(wú)
//=============================================================
void StoreSD()                           			
{	unsigned int ulAddr,i,commandID,g_Ret;
	F_FlashWrite1Word(0xef00,0xaaaa);
 	F_FlashErase(0xe000);
   	F_FlashErase(0xe100);
   	F_FlashErase(0xe200);
   	ulAddr=0xe000;//********
	for(commandID=0x100;commandID<0x105;commandID++)  	//五條commandID<0x105
	{
		g_Ret=BSR_ExportSDWord(commandID);			
		while(g_Ret!=0)									//模型導(dǎo)出成功?
		g_Ret=BSR_ExportSDWord(commandID);		
		for(i=0;i<100;i++)								//保存語(yǔ)音模型SD1(0xe000---0xe063)
		{
		    F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);
			ulAddr+=1;												
		}
	}
}

//=============================================================
// 語(yǔ)法格式:	void StoreSD();
// 實(shí)現(xiàn)功能:	裝載語(yǔ)音模型函數(shù)
// 參數(shù):		無(wú)
// 返回值:		無(wú)
//=============================================================
void LoadSD()                           			
{	unsigned int *p,k,jk,Ret,g_Ret;
	p=(int *)0xe000;																					
	for(jk=0;jk<5;jk++)//原jk<5/////////////////////////////////////////////////////////////////////////////////////
	{
		for(k=0;k<100;k++)
		{
			Ret=*p;							
			BSR_SDModel[k]=Ret;					//裝載語(yǔ)音模型			
			p+=1;													
		}					
		g_Ret=BSR_ImportSDWord();				
		while(g_Ret!=0)							//模型裝載成功?
		g_Ret=BSR_ImportSDWord();								
	}
}
/*
//=============================================================
// 語(yǔ)法格式:	void paydistance(data);
// 實(shí)現(xiàn)功能:	播放串口數(shù)據(jù)
// 參數(shù):		無(wú)
// 返回值:		無(wú)
//=============================================================
void playdistance(unsigned int udata){
	unsigned int decade;
	unsigned int theunit;
	unsigned int hundreds;
	if(udata > 100){
		hundreds = udata/100;
		udata = udata - hundreds*100;
	}
	
	decade = udata/10;
	theunit = udata%10;
	if(decade >0 && decade < 10){			//沒有十位時(shí)不讀
	PlaySnd(decade+15,3);//
	PlaySnd(TEN,3);//10
	}else if(theunit > 0&& theunit <10){		//沒有個(gè)位時(shí)不讀
	PlaySnd(theunit+15,3);//
//	data = 0;//清除接收緩存
	}
}
*/
//=============================================================
// 語(yǔ)法格式:	void BSR(void);
// 實(shí)現(xiàn)功能:	辨識(shí)子函數(shù)
// 參數(shù):		無(wú)
// 返回值:		無(wú)
//=============================================================
void BSR(void)
{	
	int Result;									//辨識(shí)結(jié)果寄存
	Result = BSR_GetResult();					//獲得識(shí)別結(jié)果
	
	if(Result>0)								//有語(yǔ)音觸發(fā)?
	{	
		*P_Watchdog_Clear = 0x1;
		switch(Result)
		{
		case RED_ON:		
 			if(SPEED == 0){				
  							UartSendByte('W');
  							SPEED++;STOP = 0;
  							PlaySnd(S_ACT0,3);//播放前進(jìn)
 							}else if(SPEED == 1){
 												UartSendByte('1');
 												SPEED++;STOP = 0;
  												PlaySnd(JIASU,3);     	//播放加速前進(jìn)
 												}else if(SPEED == 2){
 													UartSendByte('2');
 													SPEED = 2;STOP = 0;				//預(yù)留檔位
 													PlaySnd(QUANSU,3);//播放全速前進(jìn)
 												}
			break;
		case BLUE_ON:
  			UartSendByte('X');
  			PlaySnd(S_ACT1,3);    //后退
  			PlaySnd(S_QZY,3);    //請(qǐng)注意
  			SPEED = 0;STOP = 0;			//轉(zhuǎn)彎后減到一檔  清除STOP次數(shù)
			break;
		case RED_OFF:			
			UartSendByte('A');
  			PlaySnd(S_ACT2,3);    //左轉(zhuǎn)
//  			PlaySnd(S_QZY,3);    //請(qǐng)注意
  			SPEED = 0;STOP = 0;			//轉(zhuǎn)彎后減到一檔	清除STOP次數(shù)		
			break;
		case BLUE_OFF:			
			UartSendByte('D');
  			PlaySnd(S_ACT3,3);    //右轉(zhuǎn)
//  			PlaySnd(S_QZY,3);    //請(qǐng)注意
  			SPEED = 0;STOP = 0;			//轉(zhuǎn)彎后減到一檔	清除STOP次數(shù)
			break;
		case ALL_OFF:
			if(STOP == 0){
  				UartSendByte('S');
  				STOP = 1;	
  				PlaySnd(S_ACT4,3);    //停止
  				SPEED = 0;		//轉(zhuǎn)彎后減到一檔	
			}else if(STOP == 1){
					STOP = 1;			//允許重復(fù)讀取
					UartSendByte('#');	//發(fā)送超聲波數(shù)據(jù)請(qǐng)求
					Delay(600);			//等待數(shù)據(jù)接收完
					while(RXdata != 0){
						switch(RXdata){
							case 'a':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(ONE,3);//1
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'b':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(ONE,3);//1
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'c':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(TWO,3);//2
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'd':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(TWO,3);//2
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'e':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(THREE,3);//3
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'f':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(THREE,3);//3
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'g':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(FOUR,3);//4
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							case 'h':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(FOUR,3);//4
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'i':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(FIVE,3);//5
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'j':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(FIVE,3);//5
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'k':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(SIX,3);//6
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'l':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(SIX,3);//6
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'm':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(SEVEN,3);//7
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'n':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(SEVEN,3);//7
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'o':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(EIGHT,3);//8
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'p':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(EIGHT,3);//8
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'q':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(NINE,3);//9
							PlaySnd(TEN,3);//10
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
							case 'r':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(NINE,3);//9
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							STOP = 1;			//允許重復(fù)讀取
							break;
/*							case 's':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(FOUR,3);//4
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							break;
							case 't':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(FOUR,3);//4
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							break;
							case 'u':
							PlaySnd(DQJL,3);//當(dāng)前距離	
							PlaySnd(FOUR,3);//4
							PlaySnd(TEN,3);//10
							PlaySnd(FIVE,3);//5
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							break;
*/
							case '~':
							PlaySnd(DQJL,3);//當(dāng)前距離	
			  				PlaySnd(NINE,3);//9
							PlaySnd(NINE,3);//9
							PlaySnd(NINE,3);//9
							PlaySnd(CM,3);//厘米
							RXdata = 0;
							break;
						default:
							RXdata = 0;
							break;
						}
					}
				  }
				
			break;
		default:
			break;
		}
	}
}
//=============================================================
// 語(yǔ)法格式:	int main(void);
// 實(shí)現(xiàn)功能:	主函數(shù)
// 參數(shù):		無(wú)
// 返回值:		無(wú)
//=============================================================
int main(void)
 {	
 	unsigned int BS_Flag;						//Train標(biāo)志位   空
	BSR_DeleteSDGroup(0);						//初始化存儲(chǔ)器RAM
	BS_Flag=*(unsigned int *)0xe000;			//讀存儲(chǔ)單元0xe000
	if(BS_Flag==0xffff)							//沒有經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0xffff)
	{
		TrainSD();								//訓(xùn)練
		StoreSD();								//存儲(chǔ)訓(xùn)練結(jié)果(語(yǔ)音模型)
	}
	else 										//經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0x0055)
	{
		LoadSD();								//語(yǔ)音模型載入識(shí)別器
	}
	
	PlaySnd(S_START,3);							//開始識(shí)別提示
	BSR_InitRecognizer(BSR_MIC);				//初始化識(shí)別器
	
	UART_Init();								//UART初始化

	__asm("IRQ ON");							//開中斷	
	while(1)
	{
		     
  		BSR();// 語(yǔ)音識(shí)別
  		*P_Watchdog_Clear=0x0001;
//		__asm("IRQ OFF");								//跳出關(guān)中斷	
		if((*P_IOA_Data)&0x0004)				//按鍵4從新訓(xùn)練
		{	
			F_FlashErase(0xe000);
			while(1);
		}
		if((*P_IOA_Data)&0x0002){				//緊急停止按鍵2
		UartSendByte('S');	
//		playdistance(RxData[0]-30);
//		UartSendByte(RxData[0]);//RXdata -48
//		playdistance(RxData[1]-30);
//		UartSendByte(RxData[1]);//RXdata -48
//		UartSendByte(RxData[2]);//RXdata -48
		}
		if((*P_IOA_Data)&0x0001)				//按鍵1播放所有聲音
		{
		PlaySnd(S_ACT0,3);//測(cè)試聲音
		PlaySnd(S_ACT1,3);//測(cè)試聲音
		PlaySnd(S_ACT2,3);//測(cè)試聲音
		PlaySnd(S_ACT3,3);//測(cè)試聲音
		PlaySnd(S_ACT4,3);//測(cè)試聲音
		PlaySnd(S_RDY,3);//測(cè)試聲音
		PlaySnd(S_AGAIN,3);//測(cè)試聲音
		PlaySnd(S_NOISY,3);//測(cè)試聲音
		PlaySnd(S_START,3);//測(cè)試聲音
		PlaySnd(S_QZY,3);//測(cè)試聲音	
		PlaySnd(JIASU,3);//測(cè)試聲音	
		PlaySnd(QUANSU,3);//測(cè)試聲音
		PlaySnd(DQJL,3);//當(dāng)前距離
		PlaySnd(CM,3);//厘米
		PlaySnd(POINT,3);//點(diǎn)
		PlaySnd(ONE,3);//1
		PlaySnd(TWO,3);//2
		PlaySnd(THREE,3);//3
		PlaySnd(FOUR,3);//4
		PlaySnd(FIVE,3);//5
		PlaySnd(SIX,3);//6
		PlaySnd(SEVEN,3);//7
		PlaySnd(EIGHT,3);//8
		PlaySnd(NINE,3);//9
		PlaySnd(TEN,3);//10
		}
				
	}
}

4WD 平臺(tái)端程序