【DigiKey“智造万物,快乐不停”创意大赛】PAJ7620小白教程
[复制链接]
Paj7620手势传感器小白使用教程
PAJ7620使用了一种叫做红外矩阵的技术,通过特殊的布局和处理方式来实现手势的识别。PAJ7620 芯片内部集成了多个红外光接收单元,这些单元按照一定的阵列方式排列,形成一个红外矩阵。当手势或其他物体进入这个矩阵区域时,红外光的反射模式会发生变化。PAJ7620 通过检测这些变化,分析矩阵中不同区域的反射情况,从而判断手势的类型和方向。
我这个小白教程就简单写两个功能,第一个功能就是手势识别:
该库能够识别九种手势,包括向上、向下、向左、向右、向前、向后、顺时针圆圈、逆时针圆圈和挥动。
第二个功能就是位置识别:
功能演示视频:
播放器加载失败: 未检测到Flash Player,请到 安装
演示视频
该库能够直接识别手指在传感器上的位置,如上下左右和正中间。
库函数还有其他功能如读取手势、物体亮度、物体大小、物体位置、波浪计数等信息功能,我为了方便自己理解和学习都在附加代码中写了中文注释,方便大家快速学习使用,楼主是个英语学渣,请见谅,有基础的大佬应该就不需要看这种简单的教程了。
示例代码项目使用pio+arduino,使用了RevEng_PAJ7620库
代码使用非常简单
#include "RevEng_PAJ7620.h"
// Create gesture sensor driver object
RevEng_PAJ7620 sensor = RevEng_PAJ7620();
先#include 库再建一个名为 sensor 的 PAJ7620 手势传感器驱动对象
在创建了 RevEng_PAJ7620 类的一个对象 sensor过程中,调用了其构造函数。在构造函数中,对 PAJ7620 传感器进行了初始化。
在setup中进行对paj7620的初始化进行检测,通过
sensor.begin()
的返回值来检测是否初始化成功,如果返回1就是成功
接着在loop函数中就能对paj7620进行读取操作了
功能1手势识别
Gesture shoushi_corner;
shoushi_corner = sensor.readGesture();
创建一个名为 shoushi_corner 的变量,其类型为 Gesture 枚举类型,然后这个变量设置为sensor.readGesture();读取手势的函数,再通过
switch(shoushi_corner)
{
case GES_NONE:
Serial.println("No gesture");
break;
case GES_RIGHT:
Serial.println("Rightward gesture");
break;
case GES_LEFT:
Serial.println("Leftward gesture");
break;
case GES_UP:
Serial.println("Upwards gesture");
break;
case GES_DOWN:
Serial.println("Downward gesture");
break;
case GES_FORWARD:
Serial.println("Forward gesture");
break;
case GES_BACKWARD:
Serial.println("Backward gesture");
break;
case GES_CLOCKWISE:
Serial.println("Clockwise circular gesture");
break;
case GES_ANTICLOCKWISE:
Serial.println("Anticlockwise circular gesture");
break;
case GES_WAVE:
Serial.println("Wave gesture");
break;
default:
Serial.println("Unknown gesture");
break;
}
就能读取手势信息了。
功能2位置识别
同理创建枚举变量
Corner curr_corner;
curr_corner = sensor.getCorner();
再读取 switch(curr_corner)识别状态
switch(curr_corner)
{
case CORNER_NONE:
Serial.println("No corner");
break;
case CORNER_NE:
Serial.println("NE corner");
break;
case CORNER_NW:
Serial.println("NW corner");
break;
case CORNER_SE:
Serial.println("SE corner");
break;
case CORNER_SW:
Serial.println("SW corner");
break;
case CORNER_MIDDLE:
Serial.println("Middle area");
break;
}
|