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

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Revision:
21:9b1f5123f4a8
Parent:
20:d4951f491642
Child:
22:5253367e7d78
Child:
24:72f9cb6e9440
--- a/main.cpp	Sun Mar 19 14:22:39 2017 +0000
+++ b/main.cpp	Sun Mar 19 15:07:25 2017 +0000
@@ -19,13 +19,6 @@
 #define ROLL_INPUT_MAX 0.963 - (OLD_ROLL_NEUTRAL - PITCH_INPUT_NEUTRAL)
 #define ROLL_INPUT_MIN 0.555 - (OLD_ROLL_NEUTRAL - PITCH_INPUT_NEUTRAL)
 
-#define SUMED_INPUT_NEUTRAL 0.457
-#define SUMED_INPUT_MAX (PITCH_INPUT_MAX +ROLL_INPUT_MAX ) / 2.0                  //0.7825
-#define SUMED_INPUT_MIN (PITCH_INPUT_MIN +ROLL_INPUT_MIN ) / 2.0
-
-#define DEC_INPUT_NEUTRAL 0
-#define DEC_INPUT_MAX (PITCH_INPUT_MAX -ROLL_INPUT_MIN ) / 2.0
-#define DEC_INPUT_MIN (PITCH_INPUT_MIN -ROLL_INPUT_MAX ) / 2.0
 #define PHASE_NUM 6 //偶数にしてください
 /*
 roll入力とピッチ入力だとピッチの方が1.5倍効くように
@@ -75,23 +68,6 @@
 CANMessage recmsg_R;
 CANMessage recmsg_L;
 
-
-int SampleFloat(float f)
-{
-    int temp = ((f + 0.025) * 100.0) / 5;
-    float result = temp / 20.0;
-    return result;
-}
-
-float get_analogin_ave(AnalogIn pin)
-{
-    float val = 0;
-    for(int i = 0; i<SUM_UP_NUM; i++) {
-        val += pin.read();
-    }
-    return val/SUM_UP_NUM;
-}
-
 //ジョイスティックの中間値から上と下の幅を合わせます。値を取得するたびに呼び出してください。範囲は広い方に合わせる物とします
 float MatchRollUpperAndLower(float max,float min,float neutral,float value)
 {
@@ -134,31 +110,25 @@
     return value;
 }
 
-float FormatEach2Range(float value,float max,float min)
+//範囲外に値がない場合にエラーが発生するので範囲内に収める
+float Format2Range(float value,float max,float min)
 {
     float result;
+
     if(value > max)
         result= max;
     else if(value < min)
         result = min;
+    else if(value > 1)
+        result = 1;
+    else if(value < 0)
+        result = 0;
     else
         result = value;
     return result;
 }
 
-//値を0から1の範囲に収めます
-float FormatSumed2Range(float value)
-{
-    float result;
-    if(value > 1)
-        result = 1;
-    else if(value < 0)
-        result = 0;
-    else
-        result  = value;
-    return result;
-}
-
+//値をint型の段階に分ける
 int PhaseFloat(float value,float max,float min)
 {
     float PhaseWidth = (max - min) / PHASE_NUM;
@@ -174,21 +144,17 @@
 
 }
 
-
 void InputControlValues()
 {
     pc.printf("Roll:%f      Pitch:%f    ",rollPin.read() - (OLD_ROLL_NEUTRAL - PITCH_INPUT_NEUTRAL),pitchPin.read());
     float MatchedRoll = MatchRollUpperAndLower(ROLL_INPUT_MAX,ROLL_INPUT_MIN,ROLL_INPUT_NEUTRAL,rollPin.read() - (OLD_ROLL_NEUTRAL - PITCH_INPUT_NEUTRAL));
     float MatchedPitch = MatchPitchUpperAndLower(PITCH_INPUT_MAX,ROLL_INPUT_MIN,PITCH_INPUT_NEUTRAL,pitchPin.read());
-    float FormatedEachRollR = FormatEach2Range((MatchedPitch +MatchedRoll ) / 2.0,(changedRollMax + changedPitchMax) / 2.0,(changedRollMin + changedPitchMin) / 2.0);
-    float FormatSumedR =  FormatSumed2Range(FormatedEachRollR);
-    *(int *)inputDatas_R =PhaseFloat(FormatSumedR,(changedRollMax + changedPitchMax)  / 2.0,(changedRollMin + changedPitchMin) / 2.0);
-    pc.printf("FormatR:%f    ",FormatSumedR);
-    float FormatedEachRollL = FormatEach2Range((MatchedPitch - MatchedRoll) / 2.0,(changedPitchMax - changedRollMin)  /2.0,(changedPitchMin - changedRollMax) / 2.0);
-    pc.printf("FormatL:%f    ",FormatedEachRollL);
-    float FormatSumedL =  FormatSumed2Range(FormatedEachRollL);
-    pc.printf("FormatL:%f    ",FormatSumedL);
-    *(int *)inputDatas_L = PhaseFloat(FormatSumedR,changedPitchMax - changedRollMin,changedPitchMin - changedRollMax);
+    
+    float FormatedRollR = Format2Range((MatchedPitch +MatchedRoll ) / 2.0,(changedRollMax + changedPitchMax) / 2.0,(changedRollMin + changedPitchMin) / 2.0);
+    *(int *)inputDatas_R =PhaseFloat(FormatedRollR,(changedRollMax + changedPitchMax)  / 2.0,(changedRollMin + changedPitchMin) / 2.0);
+    
+    float FormatedRollL = Format2Range((MatchedPitch - MatchedRoll) / 2.0,(changedPitchMax - changedRollMin)  /2.0,(changedPitchMin - changedRollMax) / 2.0);
+    *(int *)inputDatas_L = PhaseFloat(FormatedRollR,changedPitchMax - changedRollMin,changedPitchMin - changedRollMax);
 
     if(*(int *)inputDatas_R < 0)
         *(int *)inputDatas_R = 0;
@@ -240,8 +206,6 @@
         toKeikiSerial.putc(inputDatas_R[i]);
         toKeikiSerial.putc(inputDatas_L[i]);
     }
-//    toKeikiSerial.putc(cadence);
-// pc.printf("test\n\r");
 }
 
 void init()
@@ -284,9 +248,6 @@
         wait_us(5);
         receiveDatas();
         SendDatas();
-        //     pc.printf("%d",drug_R.read());
-//        toString_R();
-//        toString_L();
         wait(WAIT_LOOP_TIME);
     }
 }
\ No newline at end of file