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