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

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Revision:
22:5253367e7d78
Parent:
21:9b1f5123f4a8
Child:
23:358e97dab762
diff -r 9b1f5123f4a8 -r 5253367e7d78 main.cpp
--- a/main.cpp	Sun Mar 19 15:07:25 2017 +0000
+++ b/main.cpp	Mon Mar 20 09:46:40 2017 +0000
@@ -10,16 +10,16 @@
 #define SUM_UP_NUM 20
 #define SAMPLE_INTERVAL 0.05
 
-#define PITCH_INPUT_NEUTRAL 0.468 //1って書いた方
-#define PITCH_INPUT_MAX 0.884
-#define PITCH_INPUT_MIN 0.110
+#define PITCH_NEUTRAL 0.468 //1って書いた方
+#define PITCH_MAX 0.884
+#define PITCH_MIN 0.110
 
 #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 ROLL_NEUTRAL 0.468 //2て書いた方     //中心の値は二つでお同じにする
+#define ROLL_MAX 0.963 - (OLD_ROLL_NEUTRAL - PITCH_NEUTRAL)
+#define ROLL_MIN 0.555 - (OLD_ROLL_NEUTRAL - PITCH_NEUTRAL)
 
-#define PHASE_NUM 6 //偶数にしてください
+#define PHASE_NUM 12 //偶数にしてください
 /*
 roll入力とピッチ入力だとピッチの方が1.5倍効くように
 */
@@ -76,14 +76,14 @@
     if(Upper > Lower) {
         if(value < neutral) {
             value =  neutral - ((neutral - value) * (Upper / Lower));
-            changedRollMin = ROLL_INPUT_NEUTRAL - (ROLL_INPUT_NEUTRAL - ROLL_INPUT_MIN)* (Upper / Lower);
-            changedRollMax = ROLL_INPUT_MAX;
+            changedRollMin = ROLL_NEUTRAL - (ROLL_NEUTRAL - ROLL_MIN)* (Upper / Lower);
+            changedRollMax = ROLL_MAX;
         }
     } else  {
         if(value > neutral) {
             value =  neutral + ((value - neutral) * (Lower / Upper));
-            changedRollMax = ROLL_INPUT_NEUTRAL + (ROLL_INPUT_MAX - ROLL_INPUT_NEUTRAL)* (Upper / Lower);
-            changedRollMin = ROLL_INPUT_MIN;
+            changedRollMax = ROLL_NEUTRAL + (ROLL_MAX - ROLL_NEUTRAL)* (Upper / Lower);
+            changedRollMin = ROLL_MIN;
         }
     }
     return value;
@@ -97,14 +97,15 @@
     if(Upper > Lower) {
         if(value < neutral) {
             value =  neutral - ((neutral - value) * (Upper / Lower));
-            changedPitchMin = PITCH_INPUT_NEUTRAL - (PITCH_INPUT_NEUTRAL - PITCH_INPUT_MIN)* (Upper / Lower);
-            changedPitchMax = PITCH_INPUT_MAX;
+            //ここで範囲値を再設定する
+            changedPitchMin = PITCH_NEUTRAL - (PITCH_NEUTRAL - PITCH_MIN)* (Upper / Lower);
+            changedPitchMax = PITCH_MAX;
         }
     } else  {
         if(value > neutral) {
             value =  neutral + ((value - neutral) * (Lower / Upper));
-            changedPitchMax = PITCH_INPUT_NEUTRAL + (PITCH_INPUT_MAX - PITCH_INPUT_NEUTRAL)* (Upper / Lower);
-            changedPitchMin = PITCH_INPUT_MIN;
+            changedPitchMax = PITCH_NEUTRAL + (PITCH_MAX - PITCH_NEUTRAL)* (Upper / Lower);
+            changedPitchMin = PITCH_MIN;
         }
     }
     return value;
@@ -114,7 +115,6 @@
 float Format2Range(float value,float max,float min)
 {
     float result;
-
     if(value > max)
         result= max;
     else if(value < min)
@@ -141,20 +141,19 @@
         return 0;
     else if(value>=max)
         return PHASE_NUM;
-
 }
 
 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 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);
+    pc.printf("Roll:%f      Pitch:%f    ",rollPin.read() - (OLD_ROLL_NEUTRAL - PITCH_NEUTRAL),pitchPin.read());
+    float MatchedRoll = MatchRollUpperAndLower(ROLL_MAX,ROLL_MIN,ROLL_NEUTRAL,rollPin.read() - (OLD_ROLL_NEUTRAL - PITCH_NEUTRAL));
+    float MatchedPitch = MatchPitchUpperAndLower(PITCH_MAX,ROLL_MIN,PITCH_NEUTRAL,pitchPin.read());
+
+    float FormatedR = Format2Range((MatchedPitch +MatchedRoll ) / 2.0,(changedRollMax + changedPitchMax) / 2.0,(changedRollMin + changedPitchMin) / 2.0);
+    *(int *)inputDatas_R[0] =(char)PhaseFloat(FormatedR,(changedRollMax + changedPitchMax)  / 2.0,(changedRollMin + changedPitchMin) / 2.0);
+
+    float FormatedL = Format2Range((MatchedPitch - MatchedRoll) / 2.0,(changedPitchMax - changedRollMin)  /2.0,(changedPitchMin - changedRollMax) / 2.0);
+    *(int *)inputDatas_L = (char)PhaseFloat(FormatedL,changedPitchMax - changedRollMin,changedPitchMin - changedRollMax);
 
     if(*(int *)inputDatas_R < 0)
         *(int *)inputDatas_R = 0;
@@ -165,13 +164,16 @@
     else if(*(int *)inputDatas_L > PHASE_NUM)
         *(int *)inputDatas_L =PHASE_NUM;
 
-    pc.printf("input_R:%d   input_L:%d\n\r",*(int *)inputDatas_R,*(int *)inputDatas_L);
+    pc.printf("input_R:%d   input_L:%d      ",*(int *)inputDatas_R,*(int *)inputDatas_L);
     inputDatas_R[4] = (char)drug_R;
     led4 =! led4;
     pc.printf("%c",*(char *)inputDatas_R[4]);
     //pc.printf("%c",(char)drug_R);
     inputDatas_L[4] = (char)drug_L;
     // pc.printf("");
+    for(int i =0 ; i< 4; i++)
+        pc.printf("datas:%c     ",inputDatas_R[i]);
+    pc.printf("\n\r");
 }
 
 
@@ -236,7 +238,6 @@
             led3 = !led3;
             //  pc.printf("%c",yokutanDatas_L[i]);
         }
-        myled2 = !myled2;
     }
 }
 
@@ -244,6 +245,7 @@
 {
     init();
     while(1) {
+        myled2 =! myled2;
         InputControlValues();
         wait_us(5);
         receiveDatas();