SparkFun RGB and Gesture Sensor - APDS-9960
手勢的部份支援
Left , Right , Up , Down , Near, Far
先把腳位焊上去,方便接線。
接下來去下載Lib的ZIP檔
https://github.com/sparkfun/SparkFun_APDS-9960_Sensor_Arduino_Library
加入ZIP程式庫
我是拿Gesture Test出來改的
接線方式
ADPS 9960 Arduino
VCC 3.3V
GND GND
SDA A4
SCL A5
INT 2
LED
上 4
右 5
下 6
左 7
記得LED的GND 也要接到Arduino GND
程式碼 (拿範例程式來改,加上LED功能)
/**************************************************************** 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"); } } }
執行情況
參考網址:
沒有留言:
張貼留言