妈妈再打我一次-双十一特辑

RGB手势传感器简易快速入门
前言

地府罗伯特,最近新推出一款功能强大的RGB手势传感器。集手势,光源强度、颜色识别为一体,尺寸却只比指甲盖大一点点,看着就让人眼馋。

手势传感器.jpg (38.4 KB, 下载次数: 6)

下载附件

保存到相册

2015-11-12 19:31 上传

为此第一时间,拿到了这款传感器,闲言碎语不讲啦。正值双十一上传个简单的测试体验。做点什么呢? 看下面的图:

1.jpg (35.3 KB, 下载次数: 6)

下载附件

保存到相册

2015-11-12 19:24 上传

没错! 手势传感器,用来检测打脸自然最合适不过啦。哈哈哈哈哈哈哈哈

零件清单:

1.RGB手势传感器 X 1
2.WiDo(集成Leonardo主控芯片) X 1

PS: 任何leonardo类型Arduino板子均可。
推荐 DFRobot Leonardo , Beetle控制器。

电路连接图:

电路原理图.png (49.41 KB, 下载次数: 6)

下载附件

保存到相册

2015-11-12 20:09 上传

备注: RGB手势传感器采用的是I2C通讯,同时在监测到有手势的动作时,INT输出一个低电平,用于触发中断。
因此将传感器的I2C Pin脚(SDA、SDL)与控制器的Pin脚连接即可,本例中断Pin脚选择(D0)。
安利下leonardo类控制板的中断引脚为(D0,D1,D2,D3),其中I2C对应的引脚为(D2,D3),因此选择中断引脚时避免与I2C冲突。

程序代码

#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {Keyboard.begin(); // 开始模拟键盘
// Initialize Serial port
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Initialize interrupt service routine
attachInterrupt(2, interruptRoutine, FALLING); //选择中断编号为2,对于的中断引脚为D0
// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Start running the APDS-9960 gesture sensor engine
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
void loop() { if( isr_flag == 1 ) {
handleGesture();
isr_flag = 0;
}
}
void interruptRoutine() {isr_flag = 1;
}

void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
Keyboard.press(KEY_LEFT_ARROW); //键盘左键按下 delay(100);
Keyboard.releaseAll();
break;
case DIR_RIGHT:
Serial.println("RIGHT"); Keyboard.press(KEY_RIGHT_ARROW); //键盘右键按下 delay(100);
Keyboard.releaseAll(); break; case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}

程序分析:
该程序直接选用RGB手势传感器的库的样例程序。导入RGB手势传感器库以后选择File>>Examples>>SparkFunAPDS9960>>GestureTest
这里只修改了样例程序中的中断编号,以及增加了arduino USB键盘类函数。 因为USB键盘类库为arduino的默认库,因此不需要导入。

函数:attachInterrupt(interrupt, function, mode)
功能:对中断引脚进行初始化配置
参数:
interrupt,中断编号,注意,这里的中断编号并不是引脚编号。
function, 中断函数名,当中断被触发后即会运行此函数名称所代表的中断函数
mode, 中断模式。

可用的中断触发模式

可用的中断触发模式.jpg (43.11 KB, 下载次数: 6)

下载附件

保存到相册

2015-11-12 21:43 上传

常见Arduino控制器的中断编号

中断引脚.jpg (29.12 KB, 下载次数: 6)

下载附件

保存到相册

2015-11-12 21:54 上传

函数:Keyboard.begin()功能:开始模拟键盘
函数:Keyboard.press(char)功能:按下按键。当调用该函数时相当于在键盘上按下一个按键并保持。注意如果需要有释放该按键动作,需要使用Keyboard.release()或者Keyboard.releaseAll()函数。语法:Keyboard.press(key)参数:key,需要按下的按键。
这里给出几个常用的按键参数:

keyboard按键对照表.jpg (45.16 KB, 下载次数: 6)

下载附件

保存到相册

2015-11-12 21:24 上传

函数:Keyboard.releaseAll()功能:释放之前调用press(char)函数按下的所有按键。语法:Keyboard.releaseAll()返回值:释放的按键个数

测试视频

附件:

RGB手势传感器库 :

SparkFun_APDS9960.zip

(20.21 KB, 下载次数: 102)

2015-11-13 10:33 上传
点击文件名下载附件
RGB手势传感器库

标签: Arduino教程