Model-Based Team / Mbed 2 deprecated CubicHand

Dependencies:   MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers GestureRecognition.cpp Source File

GestureRecognition.cpp

00001 #include "GestureRecognition.h"
00002 #include "mbed.h"
00003 
00004 #define MAX_COUNT 10 
00005 
00006 GestureRecognition::GestureRecognition(){ 
00007     counter = 0;  
00008     secondCounter = 0;
00009 }
00010 
00011 GestureRecognition::~GestureRecognition(){
00012 }
00013 
00014 
00015 //Finger data is given in range of 0-150. 150 = finger is bent. 0 = finger is straight out. 
00016 
00017 CubeUpdateParameters GestureRecognition::sensorToGesture(Glove data){
00018     CubeUpdateParameters returnParams; 
00019     returnParams.size = 0;
00020     returnParams.deltaX = 0;
00021     returnParams.deltaY = 0;
00022     returnParams.deltaZ = 0;
00023     int fingerThreshold = 500;
00024     int thumbThreshold = 200;
00025     if (++counter >= MAX_COUNT) { 
00026         returnParams.size = 4;
00027         secondCounter++;
00028         bool fBent[5];
00029         for (int iter = 0; iter < 5; iter++) {
00030             if (iter < 4)
00031                 fBent[iter] = (data.fingers[iter] > fingerThreshold);
00032             else
00033                 fBent[iter] = (data.fingers[iter] > thumbThreshold);
00034         }
00035         if (secondCounter > 3) {
00036             //printf("%d %d %d %d %d\r\n", fBent[0], fBent[1], fBent[2], fBent[3], fBent[4]);
00037             secondCounter = 0;
00038         }
00039         // Change size based on finger gesture    
00040         if (fBent[0] && fBent[1] && fBent[2] && (!fBent[3]) && fBent[4]) 
00041             returnParams.size = 2; 
00042         else if (fBent[0] && fBent[1] && (!fBent[2]) && (!fBent[3]) && fBent[4]) 
00043             returnParams.size = 4; 
00044         else if (fBent[0] && (!fBent[1]) && (!fBent[2]) && (!fBent[3]) && fBent[4]) 
00045             returnParams.size = 6; 
00046         else if ((!fBent[0]) && (!fBent[1]) && (!fBent[2]) && (!fBent[3]) && fBent[4]) 
00047             returnParams.size = 8;
00048         //Change color    
00049         else if (fBent[0] && (!fBent[1]) && (!fBent[2]) && (!fBent[3]) && (!fBent[4]))
00050             returnParams.hue = 25.0/100.0;    
00051         else if (fBent[0] && fBent[1] && (!fBent[2]) && (!fBent[3]) && (!fBent[4]))
00052             returnParams.hue = 75.0/100.0;      
00053         else if (fBent[0] && fBent[1] && fBent[2] && (!fBent[3]) && (!fBent[4]))
00054             returnParams.hue = 100.0/100.0;  
00055         
00056         //Change position. Roll, pitch, and yaw are given as degrees. 
00057         if (data.roll > 10 )
00058             returnParams.deltaX = -1;
00059         else if (data.roll < -10)
00060             returnParams.deltaX = 1;
00061         if (data.pitch > 10)
00062             returnParams.deltaZ = 1;
00063         else if (data.pitch < -10)
00064             returnParams.deltaZ = -1;
00065         if (data.yaw > 10)
00066             returnParams.deltaY = -1;
00067         else if (data.yaw + 360 > 10 && data.yaw < 0)
00068             returnParams.deltaY = 1;
00069            
00070         counter = 0;
00071             
00072     } 
00073         return returnParams; 
00074 }