![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
今までのジョイスティックの入力を段階分けしていた方式から、アナログ値をできる限りそのまま使用する方式に変更しました。
Fork of ControlMain2017 by
Diff: main.cpp
- 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();