Cubic Hand project for EECS 249A course.
Dependencies: MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811
GestureRecognition.cpp@56:f95ec9baa4cb, 2014-12-15 (annotated)
- Committer:
- joseoyola
- Date:
- Mon Dec 15 23:55:15 2014 +0000
- Revision:
- 56:f95ec9baa4cb
- Parent:
- 52:0f7a239cdd09
Changes to LedCube.h and LedCube.cpp; ; Renamed ledCube.h and ledCube.cpp to LedCube.h and LedCube.cpp, added documentation to both, added logic to move cube to allow changing size regardless of current position.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
robertbui | 40:bdd949fc3bc2 | 1 | #include "GestureRecognition.h" |
robertbui | 40:bdd949fc3bc2 | 2 | #include "mbed.h" |
robertbui | 40:bdd949fc3bc2 | 3 | |
robertbui | 40:bdd949fc3bc2 | 4 | #define MAX_COUNT 10 |
robertbui | 40:bdd949fc3bc2 | 5 | |
robertbui | 40:bdd949fc3bc2 | 6 | GestureRecognition::GestureRecognition(){ |
robertbui | 40:bdd949fc3bc2 | 7 | counter = 0; |
robertbui | 49:361833355173 | 8 | secondCounter = 0; |
robertbui | 40:bdd949fc3bc2 | 9 | } |
robertbui | 40:bdd949fc3bc2 | 10 | |
robertbui | 40:bdd949fc3bc2 | 11 | GestureRecognition::~GestureRecognition(){ |
robertbui | 40:bdd949fc3bc2 | 12 | } |
robertbui | 40:bdd949fc3bc2 | 13 | |
robertbui | 40:bdd949fc3bc2 | 14 | |
robertbui | 49:361833355173 | 15 | //Finger data is given in range of 0-150. 150 = finger is bent. 0 = finger is straight out. |
robertbui | 40:bdd949fc3bc2 | 16 | |
robertbui | 40:bdd949fc3bc2 | 17 | CubeUpdateParameters GestureRecognition::sensorToGesture(Glove data){ |
robertbui | 49:361833355173 | 18 | CubeUpdateParameters returnParams; |
robertbui | 49:361833355173 | 19 | returnParams.size = 0; |
robertbui | 49:361833355173 | 20 | returnParams.deltaX = 0; |
robertbui | 49:361833355173 | 21 | returnParams.deltaY = 0; |
robertbui | 49:361833355173 | 22 | returnParams.deltaZ = 0; |
naren | 52:0f7a239cdd09 | 23 | int fingerThreshold = 500; |
naren | 52:0f7a239cdd09 | 24 | int thumbThreshold = 200; |
robertbui | 49:361833355173 | 25 | if (++counter >= MAX_COUNT) { |
robertbui | 49:361833355173 | 26 | returnParams.size = 4; |
naren | 51:09796a9ee78d | 27 | secondCounter++; |
naren | 51:09796a9ee78d | 28 | bool fBent[5]; |
naren | 51:09796a9ee78d | 29 | for (int iter = 0; iter < 5; iter++) { |
naren | 51:09796a9ee78d | 30 | if (iter < 4) |
naren | 51:09796a9ee78d | 31 | fBent[iter] = (data.fingers[iter] > fingerThreshold); |
naren | 51:09796a9ee78d | 32 | else |
naren | 51:09796a9ee78d | 33 | fBent[iter] = (data.fingers[iter] > thumbThreshold); |
naren | 51:09796a9ee78d | 34 | } |
robertbui | 49:361833355173 | 35 | if (secondCounter > 3) { |
naren | 51:09796a9ee78d | 36 | //printf("%d %d %d %d %d\r\n", fBent[0], fBent[1], fBent[2], fBent[3], fBent[4]); |
robertbui | 49:361833355173 | 37 | secondCounter = 0; |
robertbui | 49:361833355173 | 38 | } |
naren | 51:09796a9ee78d | 39 | // Change size based on finger gesture |
naren | 51:09796a9ee78d | 40 | if (fBent[0] && fBent[1] && fBent[2] && (!fBent[3]) && fBent[4]) |
robertbui | 40:bdd949fc3bc2 | 41 | returnParams.size = 2; |
naren | 51:09796a9ee78d | 42 | else if (fBent[0] && fBent[1] && (!fBent[2]) && (!fBent[3]) && fBent[4]) |
robertbui | 40:bdd949fc3bc2 | 43 | returnParams.size = 4; |
naren | 51:09796a9ee78d | 44 | else if (fBent[0] && (!fBent[1]) && (!fBent[2]) && (!fBent[3]) && fBent[4]) |
robertbui | 40:bdd949fc3bc2 | 45 | returnParams.size = 6; |
naren | 51:09796a9ee78d | 46 | else if ((!fBent[0]) && (!fBent[1]) && (!fBent[2]) && (!fBent[3]) && fBent[4]) |
naren | 51:09796a9ee78d | 47 | returnParams.size = 8; |
robertbui | 40:bdd949fc3bc2 | 48 | //Change color |
naren | 52:0f7a239cdd09 | 49 | else if (fBent[0] && (!fBent[1]) && (!fBent[2]) && (!fBent[3]) && (!fBent[4])) |
naren | 52:0f7a239cdd09 | 50 | returnParams.hue = 25.0/100.0; |
naren | 52:0f7a239cdd09 | 51 | else if (fBent[0] && fBent[1] && (!fBent[2]) && (!fBent[3]) && (!fBent[4])) |
naren | 52:0f7a239cdd09 | 52 | returnParams.hue = 75.0/100.0; |
naren | 52:0f7a239cdd09 | 53 | else if (fBent[0] && fBent[1] && fBent[2] && (!fBent[3]) && (!fBent[4])) |
naren | 52:0f7a239cdd09 | 54 | returnParams.hue = 100.0/100.0; |
robertbui | 40:bdd949fc3bc2 | 55 | |
robertbui | 40:bdd949fc3bc2 | 56 | //Change position. Roll, pitch, and yaw are given as degrees. |
robertbui | 48:2ba6321d79fc | 57 | if (data.roll > 10 ) |
robertbui | 48:2ba6321d79fc | 58 | returnParams.deltaX = -1; |
robertbui | 48:2ba6321d79fc | 59 | else if (data.roll < -10) |
robertbui | 40:bdd949fc3bc2 | 60 | returnParams.deltaX = 1; |
robertbui | 48:2ba6321d79fc | 61 | if (data.pitch > 10) |
robertbui | 40:bdd949fc3bc2 | 62 | returnParams.deltaZ = 1; |
robertbui | 48:2ba6321d79fc | 63 | else if (data.pitch < -10) |
robertbui | 40:bdd949fc3bc2 | 64 | returnParams.deltaZ = -1; |
robertbui | 48:2ba6321d79fc | 65 | if (data.yaw > 10) |
robertbui | 49:361833355173 | 66 | returnParams.deltaY = -1; |
robertbui | 48:2ba6321d79fc | 67 | else if (data.yaw + 360 > 10 && data.yaw < 0) |
robertbui | 49:361833355173 | 68 | returnParams.deltaY = 1; |
robertbui | 40:bdd949fc3bc2 | 69 | |
robertbui | 40:bdd949fc3bc2 | 70 | counter = 0; |
robertbui | 40:bdd949fc3bc2 | 71 | |
robertbui | 40:bdd949fc3bc2 | 72 | } |
robertbui | 40:bdd949fc3bc2 | 73 | return returnParams; |
robertbui | 40:bdd949fc3bc2 | 74 | } |