Cubic Hand project for EECS 249A course.

Dependencies:   MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811

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?

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 }