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