Sample Test Program for SparkFun APDS9960 Library. Currently only tested with HRM1017.
Dependencies: SparkFun_APDS9960 mbed
Fork of SparkFun_APDS9960_Sample by
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/
main.cpp@2:83b667fcc0fd, 2015-04-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |