今までのジョイスティックの入力を段階分けしていた方式から、アナログ値をできる限りそのまま使用する方式に変更しました。

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Branch:
?????
Revision:
43:2d8bffac06cd
Parent:
42:6cc53727acc2
Child:
44:7b6f627a31da
--- a/ValueProcessor.cpp	Wed Apr 26 11:57:00 2017 +0000
+++ b/ValueProcessor.cpp	Fri Apr 28 10:21:00 2017 +0000
@@ -1,6 +1,8 @@
 #include "ValueProcessor.h"
 #include "mbed.h"
 
+#define PITCHPERROLL 1.0
+
 ValueProcess::ValueProcess()
 {
     rollNeutral = 0.739;
@@ -65,7 +67,6 @@
                 rollUpperDiff = -rollLowerDiff;
             }
         }
-        return value;
     } else if(it == enumPitch) {
         if(Upper > Lower) {
             if(value < neutral) {
@@ -78,8 +79,8 @@
                 pitchUpperDiff= -pitchLowerDiff;
             }
         }
-        return value;
-    } else return value;
+    }
+    return value;
 }
 
 //範囲外に値がない場合にエラーが発生するので範囲内に収める
@@ -116,19 +117,43 @@
     return (roll + pitch * PITCHPERROLL) / (1.0 + PITCHPERROLL);
 }
 
+float ValueProcess::MatchRange(float value)
+{
+    float RangeRacio;
+    if(pitchUpperDiff - pitchLowerDiff > rollUpperDiff - rollLowerDiff) {
+        RangeRacio = pitchUpperDiff / rollUpperDiff;                //このメソッドを呼び出す前に、ピッチとロールの上側と下側の範囲は同じようにしてるので、上側だけから比を取ってくる
+        if(value > rollNeutral)
+            value =  rollNeutral + (value - rollNeutral) * RangeRacio;
+        else
+            value = rollNeutral + (value - rollNeutral) * RangeRacio;
+    } else {
+        RangeRacio = rollUpperDiff / pitchUpperDiff;
+        if(value > pitchNeutral)
+            value =  pitchNeutral + (value - pitchNeutral) * RangeRacio;
+        else
+            value = pitchNeutral + (value - pitchNeutral) * RangeRacio;
+    }
+    return value;
+}
+
 void ValueProcess::Processing(float rollRead,float pitchRead,int* input_R,int* input_L)
 {
+
     setMaxAndMin(enumRoll, rollRead);
     setMaxAndMin(enumPitch, pitchRead);
 
     float MatchedRoll = MatchUpperAndLower(enumRoll, rollNeutral + rollUpperDiff,rollNeutral + rollLowerDiff,rollNeutral,rollRead + neutralDiff);
     float MatchedPitch = MatchUpperAndLower(enumPitch,pitchNeutral + pitchUpperDiff,pitchNeutral + pitchLowerDiff,pitchNeutral,pitchRead);
+
+    MatchedRoll = MatchRange(MatchedRoll);
+    MatchedPitch = MatchRange(MatchedPitch);
+
     float FormatedRoll_R = Format2Range(SetRollPitchRacio(MatchedPitch,MatchedRoll),SetRollPitchRacio(pitchNeutral + pitchUpperDiff,rollNeutral + rollUpperDiff),SetRollPitchRacio(pitchNeutral + pitchLowerDiff,rollNeutral + rollLowerDiff));
+
     *input_R =PhaseFloat(FormatedRoll_R,SetRollPitchRacio(pitchNeutral + pitchUpperDiff,rollNeutral + rollUpperDiff),SetRollPitchRacio(pitchNeutral + pitchLowerDiff,rollNeutral + rollLowerDiff));
 
     float FormatedRoll_L = Format2Range(SetRollPitchRacio(MatchedPitch, - MatchedRoll),SetRollPitchRacio(pitchNeutral + pitchUpperDiff,-rollNeutral - rollLowerDiff),SetRollPitchRacio(pitchNeutral  +pitchLowerDiff, - rollNeutral - rollUpperDiff));
     *input_L = PhaseFloat(FormatedRoll_L,SetRollPitchRacio(pitchNeutral + pitchUpperDiff ,- rollNeutral - rollLowerDiff),SetRollPitchRacio(pitchNeutral + pitchLowerDiff ,- rollNeutral - rollUpperDiff));
-
     if(*input_R < 1)
         *input_R = 1;
     else if(*input_R > PHASE_NUM)