Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811
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 }
Generated on Fri Jul 29 2022 08:38:47 by
1.7.2

