Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

[经验] 【Arduino】108种传感器模块系列实验(99)---GY9960手势传感器

[复制链接]
 楼主| 发表于 2022-4-27 17:17 | 显示全部楼层
(3)实验场景图

5.11-15.jpg

 楼主| 发表于 2022-4-27 17:18 | 显示全部楼层
2、程序二:测试颜色识别模式
1)Arduino参考开源代码
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序二:测试颜色识别模式
  4.   注:设备的 I2C 地址为 0x39
  5. */

  6. #include "Adafruit_APDS9960.h"//导入APDS9960驱动库

  7. //创建APDS9960对象
  8. Adafruit_APDS9960 apds;

  9. void setup() {
  10.   Serial.begin(115200);

  11.   if (!apds.begin()) {
  12.     Serial.println("初始化设备失败!请检查您的接线。");
  13.   }
  14.   else Serial.println("设备已初始化!");

  15.   //启用颜色识别模式
  16.   apds.enableColor(true);
  17. }

  18. void loop() {
  19.   //创建一些变量来存储颜色数据
  20.   uint16_t r, g, b, c;

  21.   //等待颜色数据准备好
  22.   while (!apds.colorDataReady()) {
  23.     delay(5);
  24.   }

  25.   //获取数据并打印不同的通道
  26.   apds.getColorData(&r, &g, &b, &c);
  27.   Serial.print("红色:");
  28.   Serial.println(r);

  29.   Serial.print("绿色: ");
  30.   Serial.println(g);

  31.   Serial.print("蓝色: ");
  32.   Serial.println(b);

  33.   Serial.print("清除:");
  34.   Serial.println(c);
  35.   Serial.println();

  36.   delay(5000);
  37. }
复制代码


 楼主| 发表于 2022-4-27 17:19 | 显示全部楼层
2)实验串口返回情况

5.11-16.jpg

 楼主| 发表于 2022-4-27 17:19 | 显示全部楼层
程序三:一旦接近模式感应到靠近的东西,进入测试手势模式
1)Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序三:一旦接近模式感应到靠近的东西,进入测试手势模式
  4.   注:设备的 I2C 地址为 0x39
  5. */

  6. #include "Adafruit_APDS9960.h"//导入APDS9960驱动库

  7. //创建APDS9960对象
  8. Adafruit_APDS9960 apds;

  9. // 当你按下复位或给电路板供电时,设置函数运行一次
  10. void setup() {
  11.   Serial.begin(115200);

  12.   if (!apds.begin()) {
  13.     Serial.println("初始化设备失败!请检查您的接线。");
  14.   }
  15.   else Serial.println("设备已初始化!");

  16.   //一旦接近模式感应到靠近的东西,就会进入手势模式
  17.   apds.enableProximity(true);
  18.   apds.enableGesture(true);
  19. }

  20. // 循环函数永远一遍又一遍地运行
  21. void loop() {
  22.   //从设备读取手势
  23.   uint8_t gesture = apds.readGesture();
  24.   if (gesture == APDS9960_DOWN)
  25.     Serial.println("v");//下
  26.   if (gesture == APDS9960_UP)
  27.     Serial.println("^");//上
  28.   if (gesture == APDS9960_LEFT)
  29.     Serial.println("<");//左
  30.   if (gesture == APDS9960_RIGHT)
  31.     Serial.println(">");//右
  32.   delay(1000);
  33. }
复制代码


 楼主| 发表于 2022-4-27 17:20 | 显示全部楼层
(2)实验串口返回情况

5.11-17.jpg

 楼主| 发表于 2022-4-27 17:21 | 显示全部楼层
程序四:读取手势传感器的数值
1)实验开源图形编程(Mind+、编玩边学)

5.11-18.jpg

 楼主| 发表于 2022-4-27 17:22 | 显示全部楼层
2)实验串口返回情况

5.11-19.jpg

 楼主| 发表于 2022-4-27 17:23 | 显示全部楼层
程序五:手势控制二只LED的亮灭
1)实验开源图形编程(Mind+、编玩边学)


5.11-20.jpg
 楼主| 发表于 2022-4-27 17:24 | 显示全部楼层
2)实验场景图

5.11-21.jpg

 楼主| 发表于 2022-4-27 17:25 | 显示全部楼层
程序六:计算滑动方向(上、下、左、右)并显示在串口上
1)Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序六:计算滑动方向(上、下、左、右)并显示在串口上
  4.   注:设备的 I2C 地址为 0x39
  5. */

  6. #include <Wire.h>

  7. #include <SparkFun_APDS9960.h>//导入9960驱动库

  8. // 引脚
  9. #define APDS9960_INT    2 // 中断引脚为D2

  10. // 常量

  11. // 全局变量
  12. SparkFun_APDS9960 apds = SparkFun_APDS9960();
  13. int isr_flag = 0;

  14. void setup() {

  15.   // 设置中断引脚为输入
  16.   pinMode(APDS9960_INT, INPUT);

  17.   //初始化串口
  18.   Serial.begin(9600);

  19.   Serial.println();
  20.   Serial.println(F("--------------------------------"));
  21.   Serial.println(F("     APDS-9960 - 手势测试"));
  22.   Serial.println(F("--------------------------------"));

  23. //初始化中断服务程序
  24.   attachInterrupt(0, interruptRoutine, FALLING);

  25.   // 初始化 APDS-9960(配置 I2C 和初始值)
  26.   if ( apds.init() ) {
  27.     Serial.println(F("APDS-9960 初始化完成"));
  28.   } else {
  29.     Serial.println(F("APDS-9960 初始化期间出现问题!"));
  30.   }

  31.   // 开始运行 APDS-9960 手势传感器引擎
  32.   if ( apds.enableGestureSensor(true) ) {
  33.     Serial.println(F("手势传感器正在运行"));
  34.   } else {
  35.     Serial.println(F("手势传感器初始化过程中出现问题!"));
  36.   }
  37. }

  38. void loop() {
  39.   if ( isr_flag == 1 ) {
  40.     detachInterrupt(0);
  41.     handleGesture();
  42.     isr_flag = 0;
  43.     attachInterrupt(0, interruptRoutine, FALLING);
  44.   }
  45. }

  46. void interruptRoutine() {
  47.   isr_flag = 1;
  48. }

  49. void handleGesture() {
  50.   if ( apds.isGestureAvailable() ) {
  51. switch ( apds.readGesture() ) {

  52.       case DIR_UP:
  53.         Serial.println("向上");
  54.         break;
  55.       case DIR_DOWN:
  56.         Serial.println("向下");
  57.         break;
  58.       case DIR_LEFT:
  59.         Serial.println("向左");
  60.         break;
  61.       case DIR_RIGHT:
  62.         Serial.println("向右");
  63.         break;
  64.       case DIR_NEAR:
  65.         Serial.println("靠近");
  66.         break;
  67.       case DIR_FAR:
  68.         Serial.println("远离");
  69.         break;
  70.       default:
  71.         Serial.println("无动作");
  72.     }
  73.   }
  74. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-9 23:37 , Processed in 0.072320 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表