APDS-9960

    This page is to Setup and Config APDS-9960
 

Hardware and Software

Hardware 
    
APDS-9960 and Arduino

Software 
        1. Arduino


Support :

  

Example : 

Sanki Notes

  • Download ADPS-9930 Code Libraries | Zip
  • Download ADPS-9960 Code Libraries | Zip
  • Download ADPS-9930 Datasheet | PDF
  • Download ADPS-9960 Datasheet | PDF

Examples

  1. /****************************************************************
    GestureTest.ino
    APDS-9960 RGB and Gesture Sensor
    Shawn Hymel @ SparkFun Electronics
    May 30, 2014
    https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
    
    Tests the gesture sensing abilities of the APDS-9960. Configures
    APDS-9960 over I2C and waits for gesture events. Calculates the
    direction of the swipe (up, down, left, right) and displays it
    on a serial console. 
    
    To perform a NEAR gesture, hold your hand
    far above the sensor and move it close to the sensor (within 2
    inches). Hold your hand there for at least 1 second and move it
    away.
    
    To perform a FAR gesture, hold your hand within 2 inches of the
    sensor for at least 1 second and then move it above (out of
    range) of the sensor.
    
    Hardware Connections:
    
    IMPORTANT: The APDS-9960 can only accept 3.3V!
     
     Arduino Pin  APDS-9960 Board  Function
     
     3.3V         VCC              Power
     GND          GND              Ground
     A4           SDA              I2C Data
     A5           SCL              I2C Clock
     2            INT              Interrupt
    
    Resources:
    Include Wire.h and SparkFun_APDS-9960.h
    
    Development environment specifics:
    Written in Arduino 1.0.5
    Tested with SparkFun Arduino Pro Mini 3.3V
    
    This code is beerware; if you see me (or any other SparkFun 
    employee) at the local, and you've found our code helpful, please
    buy us a round!
    
    Distributed as-is; no warranty is given.
    ****************************************************************/
    
    #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;
    
    int up=4;
    int right=5;
    int down=6;
    int left=7;
    
    void setup() {
    
      pinMode(up,OUTPUT);
      pinMode(right,OUTPUT);
      pinMode(down,OUTPUT);
      pinMode(left,OUTPUT);
    
      digitalWrite(up,LOW);
      digitalWrite(right,LOW);
      digitalWrite(down,LOW);
      digitalWrite(left,LOW);
      
      // Set interrupt pin as input
      pinMode(APDS9960_INT, INPUT);
    
      // 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");
             digitalWrite(up,HIGH);
             digitalWrite(right,LOW); 
             digitalWrite(down,LOW);
             digitalWrite(left,LOW); 
            break;
          case DIR_DOWN:
            Serial.println("DOWN");
             digitalWrite(up,LOW);
             digitalWrite(right,LOW); 
             digitalWrite(down,HIGH);
             digitalWrite(left,LOW);
            break;
          case DIR_LEFT:
            Serial.println("LEFT");
             digitalWrite(up,LOW);
             digitalWrite(right,LOW); 
             digitalWrite(down,LOW);
             digitalWrite(left,HIGH);
            break;
          case DIR_RIGHT:
            Serial.println("RIGHT");
             digitalWrite(up,LOW);
             digitalWrite(right,HIGH); 
             digitalWrite(down,LOW);
             digitalWrite(left,LOW);
            break;
          case DIR_NEAR:
            Serial.println("NEAR");
            break;
          case DIR_FAR:
            Serial.println("FAR");
            break;
          default:
            Serial.println("NONE");
        }
      }
    }

Output