Laser Sensing Display for UI interfaces in the real world

Dependencies:   mbed

Fork of skinGames_forktest by Alvaro Cassinelli

Revision:
0:345b3bc7a0ea
Child:
3:b44ff6de81bd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classLaserSensingTrajectory.cpp	Wed Mar 28 14:40:01 2012 +0000
@@ -0,0 +1,40 @@
+#include "classLaserSensingTrajectory.h"
+
+LaserSensingTrajectory::LaserSensingTrajectory(): lightTouched(false) {
+}
+
+LaserSensingTrajectory::~LaserSensingTrajectory() {
+   // lsdTrajectory.clear(); // there is no need to clear the vector, the destructor of this vector is called by default (and it's NOT a vector of pointers)
+}
+
+void LaserSensingTrajectory::processSensedData() {
+    // Compute max and min intensity on the loop
+    maxI=0;
+    minI=4096;
+    for (int i = 0; i < lsdTrajectory.size(); i++) {
+        float mesI=lsdTrajectory[i].intensity;
+        if (maxI<mesI)  maxI=mesI;
+        if (minI>mesI)  minI=mesI;
+    }
+
+    // Compute autoThreshold:
+    if (1.0*maxI/(minI+0.1) > MIN_CONTRAST_RATIO ) {
+        autoThreshold = 1.0 * (maxI-minI) * THRESHOLD_FACTOR + minI;    // THRESHOLD_FACTOR = 2/3 or 1/2 is a good value.
+    } else {// ... otherwise, we consider that the saccade is FULL on something white
+        autoThreshold=-1;
+    }
+
+    // Segment the trajectory (only two levels for the time being, but we can have more - meaning different forces, real or even complex values to have different angle forces...):
+    // NOTE: if using 1 and -1 instead of 1 and 0, we can avoid having to add a "blob internal pressure"! -1 means a force towards the interior, and +1 outwards...
+    // This means that the loop will naturally become inside-out depending on the color of the main surface! (but will mantain its normal size). Much better and elegant solution than the
+    // idea of the blob "constant" internal pressure...
+    lightTouched=false;
+    for (int i = 0; i <  lsdTrajectory.size(); i++) {
+        if (lsdTrajectory[i].intensity>autoThreshold) { // this means a WHITE zone:
+            lsdTrajectory[i].lightZone= -1;//1;
+        } else { // something touched: DARK ZONE
+            lsdTrajectory[i].lightZone= 2;//0;
+            lightTouched=true; // (for the whole loop)
+        }
+    }
+}