Sample Test Program for SparkFun APDS9960 Library. Currently only tested with HRM1017.

Dependencies:   SparkFun_APDS9960 mbed

Fork of SparkFun_APDS9960_Sample by devsar devsar

Sample Program for APDS9960 library using HRM1017. Tested Pin Connection:

APDS9960 <=======> HRM1017

  • VL (Not Connected)
  • GND <=======> GND (0V)
  • VCC <=======> VDD (3.3V)
  • SDA <=======> P0_22 (sda I2C0)
  • SCL <=======> P0_20 (scl I2C0)
  • INT <=======> P0_2

Gesture result is printed out using Serial (PC).

PS: Currently planning to use HRM1017 BLE to send the result to smartphone.

APDS9960 Pinout: https://learn.sparkfun.com/tutorials/apds-9960-rgb-and-gesture-sensor-hookup-guide

HRM1017 Pinout: http://developer.mbed.org/platforms/mbed-HRM1017/

Committer:
devsar
Date:
Mon Apr 06 23:59:56 2015 +0000
Revision:
2:83b667fcc0fd
Parent:
1:530e1adf4cf4
Remove BLE library (not use it yet)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
devsar 0:86488c9c33d7 1 /**
devsar 0:86488c9c33d7 2 *
devsar 0:86488c9c33d7 3 * I'm using HRM1017 for testing.
devsar 0:86488c9c33d7 4 * Connect the following pin:
devsar 0:86488c9c33d7 5 * APDS9960 HRM1017
devsar 0:86488c9c33d7 6 * VL (Not Connected)
devsar 0:86488c9c33d7 7 * GND <----------> GND (0V)
devsar 0:86488c9c33d7 8 * VCC <----------> VDD (3.3V)
devsar 0:86488c9c33d7 9 * SDA <----------> P0_22 (sda I2C0)
devsar 0:86488c9c33d7 10 * SCL <----------> P0_20 (scl I2C0)
devsar 0:86488c9c33d7 11 * INT <----------> P0_2
devsar 1:530e1adf4cf4 12 *
devsar 1:530e1adf4cf4 13 * Result will be print out to serial.
devsar 0:86488c9c33d7 14 */
devsar 0:86488c9c33d7 15
devsar 0:86488c9c33d7 16 #include "mbed.h"
devsar 0:86488c9c33d7 17 #include "apds9960.h"
devsar 0:86488c9c33d7 18
devsar 0:86488c9c33d7 19 Ticker timer;
devsar 0:86488c9c33d7 20 Serial pc(USBTX, USBRX);
devsar 0:86488c9c33d7 21 apds9960 sensor(P0_22,P0_20);
devsar 0:86488c9c33d7 22 bool intFlag = false;
devsar 0:86488c9c33d7 23 InterruptIn interrupt(P0_2);
devsar 0:86488c9c33d7 24 DigitalOut myled(LED1);
devsar 0:86488c9c33d7 25
devsar 0:86488c9c33d7 26 void trigger() {
devsar 0:86488c9c33d7 27 // pc.printf("triggered\n\r");
devsar 0:86488c9c33d7 28 intFlag = true;
devsar 0:86488c9c33d7 29 }
devsar 0:86488c9c33d7 30
devsar 0:86488c9c33d7 31 void printGesture(int gesture) {
devsar 0:86488c9c33d7 32 switch ( gesture ) {
devsar 0:86488c9c33d7 33 case DIR_UP:
devsar 0:86488c9c33d7 34 pc.printf("UP\n\r");
devsar 0:86488c9c33d7 35 break;
devsar 0:86488c9c33d7 36 case DIR_DOWN:
devsar 0:86488c9c33d7 37 pc.printf("DOWN\n\r");
devsar 0:86488c9c33d7 38 break;
devsar 0:86488c9c33d7 39 case DIR_LEFT:
devsar 0:86488c9c33d7 40 pc.printf("LEFT\n\r");
devsar 0:86488c9c33d7 41 break;
devsar 0:86488c9c33d7 42 case DIR_RIGHT:
devsar 0:86488c9c33d7 43 pc.printf("RIGHT\n\r");
devsar 0:86488c9c33d7 44 break;
devsar 0:86488c9c33d7 45 case DIR_NEAR:
devsar 0:86488c9c33d7 46 pc.printf("NEAR\n\r");
devsar 0:86488c9c33d7 47 break;
devsar 0:86488c9c33d7 48 case DIR_FAR:
devsar 0:86488c9c33d7 49 pc.printf("FAR\n\r");
devsar 0:86488c9c33d7 50 break;
devsar 0:86488c9c33d7 51 default:
devsar 0:86488c9c33d7 52 pc.printf("NONE\n\r");
devsar 0:86488c9c33d7 53 }
devsar 0:86488c9c33d7 54 }
devsar 0:86488c9c33d7 55
devsar 0:86488c9c33d7 56 int getGesture() {
devsar 0:86488c9c33d7 57
devsar 0:86488c9c33d7 58 if(sensor.isGestureAvailable()) {
devsar 0:86488c9c33d7 59 pc.printf("Gesture Available!\n\r");
devsar 0:86488c9c33d7 60 // Process it.
devsar 0:86488c9c33d7 61 switch ( sensor.readGesture() ) {
devsar 0:86488c9c33d7 62 case DIR_UP: return DIR_UP;
devsar 0:86488c9c33d7 63 case DIR_DOWN: return DIR_DOWN;
devsar 0:86488c9c33d7 64 case DIR_LEFT: return DIR_LEFT;
devsar 0:86488c9c33d7 65 case DIR_RIGHT: return DIR_RIGHT;
devsar 0:86488c9c33d7 66 case DIR_NEAR: return DIR_NEAR;
devsar 0:86488c9c33d7 67 case DIR_FAR: return DIR_FAR;
devsar 0:86488c9c33d7 68 default: return DIR_NONE;
devsar 0:86488c9c33d7 69 }
devsar 0:86488c9c33d7 70 }
devsar 0:86488c9c33d7 71 return DIR_NONE;
devsar 0:86488c9c33d7 72 }
devsar 0:86488c9c33d7 73
devsar 0:86488c9c33d7 74 int main()
devsar 0:86488c9c33d7 75 {
devsar 0:86488c9c33d7 76 pc.baud(115200);
devsar 0:86488c9c33d7 77 pc.printf("Start\n\r");
devsar 0:86488c9c33d7 78
devsar 0:86488c9c33d7 79 myled = 0;
devsar 0:86488c9c33d7 80
devsar 0:86488c9c33d7 81 if ( sensor.ginit(pc) ) {
devsar 0:86488c9c33d7 82 pc.printf("APDS-9960 initialization complete\n\r");
devsar 0:86488c9c33d7 83 } else {
devsar 0:86488c9c33d7 84 pc.printf("Something went wrong during APDS-9960 init\n\r");
devsar 0:86488c9c33d7 85 return 1;
devsar 0:86488c9c33d7 86 }
devsar 0:86488c9c33d7 87
devsar 0:86488c9c33d7 88 // Start running the APDS-9960 gesture sensor engine
devsar 0:86488c9c33d7 89 if ( sensor.enableGestureSensor(true) ) {
devsar 0:86488c9c33d7 90 pc.printf("Gesture sensor is now running\n\r");
devsar 0:86488c9c33d7 91 } else {
devsar 0:86488c9c33d7 92 pc.printf("Something went wrong during gesture sensor init!\n\r");
devsar 0:86488c9c33d7 93 return 1;
devsar 0:86488c9c33d7 94 }
devsar 0:86488c9c33d7 95
devsar 0:86488c9c33d7 96 interrupt.fall(&trigger);
devsar 0:86488c9c33d7 97
devsar 0:86488c9c33d7 98 while(1) {
devsar 0:86488c9c33d7 99
devsar 0:86488c9c33d7 100 // when interrupt trigerred, flag is set.
devsar 0:86488c9c33d7 101 if(intFlag) {
devsar 0:86488c9c33d7 102 //
devsar 0:86488c9c33d7 103 printGesture(getGesture());
devsar 0:86488c9c33d7 104
devsar 0:86488c9c33d7 105 // Clean interrupt handler flag.
devsar 0:86488c9c33d7 106 intFlag = false;
devsar 0:86488c9c33d7 107 }
devsar 0:86488c9c33d7 108
devsar 0:86488c9c33d7 109 // Do somethings else
devsar 0:86488c9c33d7 110 wait_ms(100);
devsar 0:86488c9c33d7 111 }
devsar 0:86488c9c33d7 112 }