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

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Branch:
?????
Revision:
42:6cc53727acc2
Parent:
41:d2d123d7a6fa
Child:
43:2d8bffac06cd
--- a/ValueProcessor.cpp	Sun Apr 23 15:12:59 2017 +0000
+++ b/ValueProcessor.cpp	Wed Apr 26 11:57:00 2017 +0000
@@ -1,9 +1,17 @@
 #include "ValueProcessor.h"
+#include "mbed.h"
 
-enum InputType {
-    enumRoll,
-    enumPitch
-};
+ValueProcess::ValueProcess()
+{
+    rollNeutral = 0.739;
+    rollUpperDiff = 0;
+    rollLowerDiff = 0;
+
+    pitchNeutral = 0.468 ;//1って書いた方
+    pitchUpperDiff = 0;
+    pitchLowerDiff = 0;
+    neutralDiff = 0;
+}
 
 void ValueProcess::setMaxAndMin(InputType it,float value)
 {
@@ -22,14 +30,14 @@
     }
 }
 
-void ValueProcessor::setNeutral(float rollRead,float pitchRead)
+void ValueProcess::setNeutral(float rollRead,float pitchRead)
 {
     float rollSum;
     float pitchSum;
 
     for(int i = 0; i < SUM_UP_NUM; i++) {
-        rollSum += rollPin.read();
-        pitchSum += pitchPin.read();
+        rollSum += rollRead;
+        pitchSum += pitchRead;
     }
     rollNeutral = rollSum / SUM_UP_NUM;
     pitchNeutral = pitchSum / SUM_UP_NUM;
@@ -40,7 +48,7 @@
 }
 
 //ジョイスティックの中間値から上と下の幅を合わせます。値を取得するたびに呼び出してください。範囲は広い方に合わせる物とします
-float ValueProcessor::MatchUpperAndLower(InputType it, float max,float min,float neutral,float value)
+float ValueProcess::MatchUpperAndLower(InputType it, float max,float min,float neutral,float value)
 {
     float Upper = max- neutral;
     float Lower  = neutral - min;
@@ -75,7 +83,7 @@
 }
 
 //範囲外に値がない場合にエラーが発生するので範囲内に収める
-float ValueProcessor::Format2Range(float value,float max,float min)
+float ValueProcess::Format2Range(float value,float max,float min)
 {
     float result;
 
@@ -89,7 +97,7 @@
 }
 
 //値をint型の段階に分ける
-int ValueProcessor::PhaseFloat(float value,float max,float min)
+int ValueProcess::PhaseFloat(float value,float max,float min)
 {
     float PhaseWidth = (max - min) / PHASE_NUM;
     if(value< max&& value > min) {
@@ -103,7 +111,30 @@
         return PHASE_NUM;
 }
 
-float ValueProcessor::SetRollPitchRacio(float pitch,float roll)
+float ValueProcess::SetRollPitchRacio(float pitch,float roll)
 {
     return (roll + pitch * PITCHPERROLL) / (1.0 + PITCHPERROLL);
 }
+
+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);
+    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)
+        *input_R   = PHASE_NUM;
+    if(*input_L < 1)
+        *input_L = 1 ;
+    else if(*input_L > PHASE_NUM)
+        *input_L =PHASE_NUM;
+}