Created
April 10, 2015 21:41
-
-
Save jkredz/4a28caddb533796a4410 to your computer and use it in GitHub Desktop.
Breaking Gesture Sensor Code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/**************************************************************** | |
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 i = 0; | |
void setup() { | |
// 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() { | |
i=0; | |
for (i=0; i<10; i++) { | |
if( isr_flag == 1 ) { | |
detachInterrupt(0); | |
//handleGesture(); | |
isr_flag = 0; | |
i -= 1; | |
attachInterrupt(0, interruptRoutine, FALLING); | |
} | |
Serial.println(i); | |
delay(1000); | |
} | |
} | |
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"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment