Has the Limbic Controller act as a mouse over HID protocol (and wire). Generates absolute position from seat rotation (both shells cumulative), as such disables use of regular mouse.

Dependencies:   MPU6050 QEI USBDevice mbed

Fork of Seeed_Grove_3-Axis_Digital_Accelorometer_Example by Seeed

Revision:
3:b3aa280de9f3
Parent:
2:a7dc264ecd98
--- a/main.cpp	Tue Apr 05 16:19:38 2016 +0000
+++ b/main.cpp	Fri Apr 15 11:21:57 2016 +0000
@@ -35,6 +35,7 @@
 
 float pitchL, yawL, rollL, pitchR, yawR, rollR;
 float pitchL0, yawL0, rollL0, pitchR0, yawR0, rollR0;
+float pitchLold, yawLold, pitchRold, yawRold;
 float pitchAcc[2], rollAcc[2];
 
 QEI encL (p5, p6, NC, 5000);
@@ -50,7 +51,7 @@
           atten += 0.1;
           lowerResTimer.reset();  
     }*/
-    float atten = 5.0;
+    float atten = 1.0;
     yawL = floor((float)encL.getPulses()/atten)*180.0/(5000.0/atten);
     yawR = floor((float)encR.getPulses()/atten)*180.0/(5000.0/atten);
 }
@@ -181,11 +182,13 @@
     bool firstFrame = true;
     pitchL0 = yawL0 = pitchR0 = yawR0 = 0;
     
+    pitchLold = yawLold = pitchRold = yawRold = 0;
+    
     alpha[0] = alpha[1] = ALPHA;
     
     sendtimer.start();
     
-    int x,y;
+    double x,y;
     while(1){
         if(MPUL.read(MPU6050_INT_STATUS) & 0x01){ // check if data ready interrupt
             GetIMUAnglesAvg(LEFT);
@@ -218,13 +221,26 @@
                 yawR0 = yawR;
             }
             
-            int x = -((yawL-yawL0))*960 + 960;
-            int y = ((pitchL-pitchL0)*2)*1080;  
+            float accellYaw;
+
+            if ((abs(yawR - yawRold) + abs(yawL - yawLold)) > 10.0) accellYaw = 100.0;
+            else if ((abs(yawR - yawRold) + abs(yawL - yawLold)) < 0.1) accellYaw = 0.01;
+            else accellYaw = 0.5F;
+            
+            yawRold = yawR;
+            yawLold = yawL;
+            pitchLold = pitchL;
+            pitchRold = pitchR;
+            
+            x = ((yawR-yawR0)+(yawL-yawL0))*0.075*-16384.0 + 16384;
+            y = ((pitchL-pitchL0)+(pitchR-pitchR0))*0.15*16384.0 - 16384;  
             
             if (x < 0) x = 0;
-            if (x > 1920) x = 1920;
+            if (x > 32767) x = 32767;
             if (y < 0) y = 0;
-            if (y > 1080) y = 1080;
+            if (y > 32767) y = 32767;
+            
+            mouse.move((int)x,(int)y);
             
             /*if (((yawL-yawL0)) > 2.5){
                 mouse.press(1);