【雕爷学编程】Arduino动手做(95)---GY9960手势传感器之接入中断,串口显示7个不同的手势符号

在这里插入图片描述

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十五:APDS-9960 GY-9960-3.3 RGB红外手势传感器 方向识别模块

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十五:APDS-9960 GY-9960-3.3 RGB红外手势传感器 方向识别模块

1、工具-管理库-搜索“SparkFun_APDS-9960”库-安装

2、项目:串口显示测量的四组数据(未接入LCD)

3、实验接脚

SDA = A4

SCL = A5

GND = GND

VCC = 3.3V

*/



#include <Wire.h>

#include <SparkFun_APDS9960.h>

#include <LiquidCrystal.h>

SparkFun_APDS9960 apds = SparkFun_APDS9960();

uint16_t ambient_light = 0;

uint16_t red_light = 0;

uint16_t green_light = 0;

uint16_t blue_light = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);



void setup() {

 lcd.begin(16, 2);

 Serial.begin(9600);

 Serial.println();

 Serial.println(F("--------------------------------"));

 Serial.println(F("SparkFun APDS-9960 - ColorSensor"));

 Serial.println(F("--------------------------------"));

 if ( apds.init() ) {

  Serial.println(F("APDS-9960 initialization complete"));

 } else {

  Serial.println(F("Something went wrong during APDS-9960 init!"));

 }

 if ( apds.enableLightSensor(false) ) {

  Serial.println(F("Light sensor is now running"));

 } else {

  Serial.println(F("Something went wrong during light sensor init!"));

 }

 delay(500);

}



void loop() {

 if ( !apds.readAmbientLight(ambient_light) ||

    !apds.readRedLight(red_light) ||

    !apds.readGreenLight(green_light) ||

    !apds.readBlueLight(blue_light) ) {

  Serial.println("Error reading light values");

 } else {

  Serial.print("Ambient: ");

  Serial.print(ambient_light);

  lcd.setCursor(1, 0);

   lcd.print(red_light);

  Serial.print(" Red: ");

  Serial.print(red_light);

   lcd.setCursor(7, 0);

   lcd.print(green_light);

  Serial.print(" Green: ");

  Serial.print(green_light);

   lcd.setCursor(1, 1);

   lcd.print(blue_light);

  Serial.print(" Blue: ");

  Serial.println(blue_light);

 }

 delay(1000);

}

实验串口返回情况,不同手势,四组数据各不相同

在这里插入图片描述

实验开源代码之二

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十五:APDS-9960 GY-9960-3.3 RGB红外手势传感器 方向识别模块

1、工具-管理库-搜索“SparkFun_APDS-9960”库-安装

2、项目二:接入中断,串口显示7个不同的手势符号

UP=向上

DOWN=向下

LEFT=向左

RIGHT=向右

NEAR=向近

FAR=向远

NONE=无动作

3、实验接脚

INT = D2

SDA = A4

SCL = A5

GND = GND

VCC = 3.3V

*/



#include <Wire.h>

#include <SparkFun_APDS9960.h>

// Pins

#define APDS9960_INT  2 // Needs to be an interrupt pin

// Constants

// Global Variables

SparkFun_APDS9960 apds = SparkFun_APDS9960();

int isr_flag = 0;



void setup() {
    
    

 // 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(0, interruptRoutine, FALLING);

 // 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 ) {
    
    

  detachInterrupt(0);

  handleGesture();

  isr_flag = 0;

  attachInterrupt(0, interruptRoutine, FALLING);

 }

}

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");

    break;

   case DIR_RIGHT:

    Serial.println("RIGHT");

    break;

   case DIR_NEAR:

    Serial.println("NEAR");

    break;

   case DIR_FAR:

    Serial.println("FAR");

    break;

   default:

    Serial.println("NONE");

  }

 }

}

实验串口返回情况
在这里插入图片描述
实验开源图形编程(Mind+、Mixly、编玩边学)
在这里插入图片描述
在这里插入图片描述

实验开源图形编程(Mind+、Mixly、编玩边学)之二

在这里插入图片描述

实验场景图
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132487455