Cubic Hand project for EECS 249A course.

Dependencies:   MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811

Committer:
naren
Date:
Thu Dec 11 21:22:42 2014 +0000
Revision:
52:0f7a239cdd09
Parent:
51:09796a9ee78d
Added finger bending as color changes; ; Need to figure out the analog change

Who changed what in which revision?

UserRevisionLine numberNew 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 }