Cubic Hand project for EECS 249A course.

Dependencies:   MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811

GestureRecognition.cpp

Committer:
robertbui
Date:
2014-12-11
Revision:
48:2ba6321d79fc
Parent:
40:bdd949fc3bc2
Child:
49:361833355173

File content as of revision 48:2ba6321d79fc:

#include "GestureRecognition.h"
#include "mbed.h"

#define MAX_COUNT 10 

GestureRecognition::GestureRecognition(){ 
    counter = 0;  
}

GestureRecognition::~GestureRecognition(){
}


//Finger data is given in range of 0-150. 1500 = finger is bent. 0 = finger is straight out. 

CubeUpdateParameters GestureRecognition::sensorToGesture(Glove data){
            CubeUpdateParameters returnParams; 
            returnParams.size = 0;
            returnParams.deltaX = 0;
            returnParams.deltaY = 0;
            returnParams.deltaZ = 0;
    if (++counter == MAX_COUNT) { 
        //Change size based on finger gesture    
        if (data.fingers[0] > 75 && data.fingers[1] > 75 && data.fingers[2] > 75 && data.fingers[3] < 75 &&  data.fingers[4] > 75 ) 
            returnParams.size = 2; 
        else if (data.fingers[0] > 75 && data.fingers[1] > 75 && data.fingers[2] < 75 && data.fingers[3] < 75 &&  data.fingers[4] > 75 ) 
            returnParams.size = 4; 
        else if (data.fingers[0] > 75 && data.fingers[1] < 75 && data.fingers[2] < 75 && data.fingers[3] < 75 &&  data.fingers[4] > 75 ) 
            returnParams.size = 6; 
        else if (data.fingers[0] < 75 && data.fingers[1] < 75 && data.fingers[2] < 75 && data.fingers[3] < 75 &&  data.fingers[4] > 75 ) 
            returnParams.size = 8;
        //Change color    
        else if (data.fingers[0] > 75 && data.fingers[1] > 75 && data.fingers[2] > 75 &&  data.fingers[4] > 75 ) {
            returnParams.hue = data.fingers[3]/150.0;    
        }
        
        //Change position. Roll, pitch, and yaw are given as degrees. 
        if (data.roll > 10 )
            returnParams.deltaX = -1;
        else if (data.roll < -10)
            returnParams.deltaX = 1;
        if (data.pitch > 10)
            returnParams.deltaZ = 1;
        else if (data.pitch < -10)
            returnParams.deltaZ = -1;
        if (data.yaw > 10)
            returnParams.deltaY = 1;
        else if (data.yaw + 360 > 10 && data.yaw < 0)
            returnParams.deltaY = -1;
           
        counter = 0;
            
    } 
        return returnParams; 
}