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

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Revision:
19:6387e3f02b37
Parent:
18:31722545ecf1
Child:
20:d4951f491642
--- a/main.cpp	Sun Mar 19 10:44:14 2017 +0000
+++ b/main.cpp	Sun Mar 19 12:18:41 2017 +0000
@@ -10,22 +10,26 @@
 #define SUM_UP_NUM 20
 #define SAMPLE_INTERVAL 0.05
 
-#define PITCH_INPUT_NEUTRAL 0.457 //1って書いた方
+#define PITCH_INPUT_NEUTRAL 0.468 //1って書いた方
 #define PITCH_INPUT_MAX 0.884
 #define PITCH_INPUT_MIN 0.110
 
-#define ROLL_INPUT_NEUTRAL 0.739 //2て書いた方
-#define ROLL_INPUT_MAX 0.963
-#define ROLL_INPUT_MIN 0.555
+#define OLD_ROLL_NEUTRAL 0.739
+#define ROLL_INPUT_NEUTRAL 0.468 //2て書いた方
+#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.598
-#define SUMED_INPUT_MAX 0.9235
-#define SUMED_INPUT_MIN 0.3325
+#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.141
-#define DEC_INPUT_MAX -0.0395
-#define DEC_INPUT_MIN -0.2225
+#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 7 //奇数にしてください
+/*
+roll入力とピッチ入力だとピッチの方が1.5倍効くように
+*/
 
 //-----------------------------------(resetInterrupt def)
 extern "C" void mbed_reset();
@@ -143,26 +147,28 @@
 
 void InputControlValues()
 {
-    float MatchedRoll = MatchUpperAndLower(ROLL_INPUT_MAX,ROLL_INPUT_MIN,ROLL_INPUT_NEUTRAL,rollPin.read());
-    float MatchedPitch = MatchUpperAndLower(PITCH_INPUT_MAX,ROLL_INPUT_MIN,PITCH_INPUT_NEUTRAL,pitchPin.read() - (ROLL_INPUT_NEUTRAL - PITCH_INPUT_NEUTRAL));
-    float FormatedEachRollR = FormatEach2Range((MatchedRoll + MatchedPitch) / 2.0,SUMED_INPUT_MAX,SUMED_INPUT_MIN);
+    pc.printf("Roll:%f      Pitch:%f    ",rollPin.read() - (OLD_ROLL_NEUTRAL - PITCH_INPUT_NEUTRAL),pitchPin.read());
+    float MatchedRoll = MatchUpperAndLower(ROLL_INPUT_MAX,ROLL_INPUT_MIN,ROLL_INPUT_NEUTRAL,rollPin.read() - (OLD_ROLL_NEUTRAL - PITCH_INPUT_NEUTRAL));
+    float MatchedPitch = MatchUpperAndLower(PITCH_INPUT_MAX,ROLL_INPUT_MIN,PITCH_INPUT_NEUTRAL,pitchPin.read());
+    float FormatedEachRollR = FormatEach2Range((MatchedPitch +MatchedRoll ) / 2.0,SUMED_INPUT_MAX,SUMED_INPUT_MIN);
     float FormatSumedR =  FormatSumed2Range(FormatedEachRollR);
-    *(int *)inputDatas_R =PhaseFloat(FormatSumedR,ROLL_INPUT_MAX,ROLL_INPUT_MIN);
-    
-     float FormatedEachRollL = FormatEach2Range((MatchedRoll - MatchedPitch) / 2.0,ROLL_INPUT_MAX,ROLL_INPUT_MIN);
+    *(int *)inputDatas_R =PhaseFloat(FormatSumedR,SUMED_INPUT_MAX,SUMED_INPUT_MIN);
+    pc.printf("FormatR:%f    ",FormatSumedR);
+    float FormatedEachRollL = FormatEach2Range((MatchedPitch - MatchedRoll) / 2.0,DEC_INPUT_MAX,DEC_INPUT_MIN);
     float FormatSumedL =  FormatSumed2Range(FormatedEachRollL);
-    *(int *)inputDatas_L = PhaseFloat(FormatSumedR,ROLL_INPUT_MAX,ROLL_INPUT_MIN);
+    pc.printf("FormatL:%f    ",FormatSumedL);
+    *(int *)inputDatas_L = PhaseFloat(FormatSumedR,DEC_INPUT_MAX,DEC_INPUT_MIN);
 
-    if(*(float *)inputDatas_R < 0)
-        *(float *)inputDatas_R = 0;
+    if(*(int *)inputDatas_R < 0)
+        *(int *)inputDatas_R = 0;
     else if(*(int *)inputDatas_R > PHASE_NUM)
         *(int *)inputDatas_R = PHASE_NUM;
-    if(*(float *)inputDatas_L < 0)
-        *(float *)inputDatas_L = 0 ;
+    if(*(int *)inputDatas_L < 0)
+        *(int *)inputDatas_L = 0 ;
     else if(*(int *)inputDatas_L > PHASE_NUM)
         *(int *)inputDatas_L =PHASE_NUM;
 
-    pc.printf("input_R:%f   input_L:%f\n\r",*(float *)inputDatas_R,*(float *)inputDatas_L);
+    pc.printf("input_R:%d   input_L:%d\n\r",*(int *)inputDatas_R,*(int *)inputDatas_L);
     inputDatas_R[4] = (char)drug_R;
     led4 =! led4;
     pc.printf("%c",*(char *)inputDatas_R[4]);