本文首发于DF创客社区,作者:Jeff2
原文链接:http://mc.dfrobot.com.cn/thread-289776-1-1.html
项目背景
之前和朋友做AI训练街霸游戏,想加入人工语音识别输出特定技能或者连环招式,以增加游戏的趣味性。也联想到目前某些游戏按键技能太多,经常操作跟不上思想。于是就想着开发一个 输出全靠吼的硬件。说盘就盘。
boom表
LD3320
arduino leonardo
杜邦线
面包板
软件要求:
先下载ld3320 库文件,并复制到arduino的libraries文件夹下。地址
http://www.waveshare.net/study/portal.php?mod=atta...
连接 LD3320 语音模块到arduino leonardo
3.3V -- VCC
GND -- GND
MISO -- D12
MOSI -- D11
SCK -- D13
NSS -- D4
RST -- D9
IRQ -- D2
WR -- GND
先做个简单测试
#include <ld3320.h>
VoiceRecognition Voice;
//声明一个语音识别对象
#define Led 8 //定义LED控制引脚
void
setup()
{
pinMode(Led,OUTPUT);
//初始化LED引脚为输出模式
digitalWrite(Led,LOW);
//LED引脚低电平
Voice.init();
//初始化VoiceRecognition模块
Voice.addCommand(
"kai deng"
,0);
//添加指令,参数(指令内容,指令标签(可重复))
Voice.addCommand(
"guan deng"
,1);
//添加指令,参数(指令内容,指令标签(可重复))
Voice.start();
//开始识别
}
void
loop() {
switch
(Voice.read())
//判断识别
{
case
0:
//若是指令“kai deng”
digitalWrite(Led,HIGH);
//点亮LED
break
;
case
1:
//若是指令“guan deng”
digitalWrite(Led,LOW);
//熄灭LED
break
;
default
:
break
;
}
}
上面代码测试
开灯 口令能点亮LED说明LD3320通了
接下研究下KEYBORAD代码
arduino leonardo可以直接用arduino的keyboard实例
我这边经过修改后代码如下
#include <Keyboard.h>
#include <ld3320.h>
#include <PinMap.h>
VoiceRecognition Voice;
//声明一个语音识别对象
bool
lastCapsLockState;
void
setup() {
// initialize control over the keyboard:
Keyboard.begin();
TIMSK0 = 0;
Voice.init();
//初始化VoiceRecognition模块
//add fun
Voice.noiseTime(0x10);
Voice.voiceMaxLength(0x14);
Voice.micVol(0x55);
Voice.addCommand(
"zhuo mian"
, 0);
//添加指令,参数(指令内容,指令标签(可重复))
Voice.addCommand(
"hong"
, 0);
Voice.addCommand(
"tui chu"
, 1);
Voice.addCommand(
"xia ye"
, 2);
Voice.addCommand(
"shang qu"
, 3);
Voice.addCommand(
"di bu"
, 4);
Voice.addCommand(
"zui shang"
, 5);
Voice.addCommand(
"liu lang qi"
, 6);
Voice.addCommand(
"guan bi"
, 7);
Voice.addCommand(
"xian shi"
, 8);
Voice.addCommand(
"qie huan"
, 9);
Voice.addCommand(
"shui jiao"
, 10);
Voice.addCommand(
"fang da"
, 11);
Voice.addCommand(
"bi ge"
, 11);
Voice.addCommand(
"suo xiao"
, 12);
Voice.addCommand(
"si mou"
, 12);
Voice.addCommand(
"mi ma"
, 13);
Voice.addCommand(
"en"
, 14);
Voice.addCommand(
"oh"
, 14);
Voice.addCommand(
"pi"
, 14);
Voice.addCommand(
"kiu"
, 14);
Voice.addCommand(
"wu"
, 14);
Voice.addCommand(
"a"
, 14);
Voice.addCommand(
"ei"
, 14);
Voice.addCommand(
"si"
, 14);
Voice.addCommand(
"jie suo"
, 15);
Voice.start();
//开始识别
}
void
loop() {
switch
(Voice.read())
//判断识别
{
case
0:
//若是指令“ei”
Keyboard.press(KEY_LEFT_GUI);
//左win
Keyboard.press(
'd'
);
break
;
case
1:
//若是指令“B”
Keyboard.press(KEY_ESC);
//Keyboard.print("You pressed the button ");
// Keyboard.print(counter);
// Keyboard.println(" times.");
break
;
case
2:
Keyboard.press(KEY_PAGE_DOWN);
break
;
case
3:
Keyboard.press(KEY_PAGE_UP);
break
;
case
4:
Keyboard.press(KEY_END);
break
;
case
5:
Keyboard.press(KEY_HOME);
break
;
case
6:
Keyboard.press(KEY_LEFT_GUI);
//左alt
Keyboard.press(
'2'
);
break
;
case
7:
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_F4);
break
;
case
8:
Keyboard.press(
'f'
);
break
;
case
9:
Keyboard.press(KEY_LEFT_ALT);
//左alt
Keyboard.press(KEY_TAB);
break
;
case
10:
Keyboard.press(KEY_LEFT_GUI);
//左win
delay(500);
Keyboard.press(
'l'
);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.release(
'l'
);
break
;
case
11:
Keyboard.press(KEY_RIGHT_CTRL);
Keyboard.print(
'+'
);
break
;
case
12:
Keyboard.press(KEY_RIGHT_CTRL);
Keyboard.print(
'-'
);
break
;
case
13:
Keyboard.println(
"12312311"
);
break
;
case
14:
;
break
;
case
15:
Keyboard.press(KEY_RETURN);
break
;
default
:
break
;
delayMicroseconds(20000);
}
Keyboard.releaseAll();
Keyboard.end();
//结束键盘通讯
}