![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
今までのジョイスティックの入力を段階分けしていた方式から、アナログ値をできる限りそのまま使用する方式に変更しました。
Fork of ControlMain2017 by
Diff: ValueProcessor.cpp
- Branch:
- ?????
- Revision:
- 42:6cc53727acc2
- Parent:
- 41:d2d123d7a6fa
- Child:
- 43:2d8bffac06cd
--- a/ValueProcessor.cpp Sun Apr 23 15:12:59 2017 +0000 +++ b/ValueProcessor.cpp Wed Apr 26 11:57:00 2017 +0000 @@ -1,9 +1,17 @@ #include "ValueProcessor.h" +#include "mbed.h" -enum InputType { - enumRoll, - enumPitch -}; +ValueProcess::ValueProcess() +{ + rollNeutral = 0.739; + rollUpperDiff = 0; + rollLowerDiff = 0; + + pitchNeutral = 0.468 ;//1って書いた方 + pitchUpperDiff = 0; + pitchLowerDiff = 0; + neutralDiff = 0; +} void ValueProcess::setMaxAndMin(InputType it,float value) { @@ -22,14 +30,14 @@ } } -void ValueProcessor::setNeutral(float rollRead,float pitchRead) +void ValueProcess::setNeutral(float rollRead,float pitchRead) { float rollSum; float pitchSum; for(int i = 0; i < SUM_UP_NUM; i++) { - rollSum += rollPin.read(); - pitchSum += pitchPin.read(); + rollSum += rollRead; + pitchSum += pitchRead; } rollNeutral = rollSum / SUM_UP_NUM; pitchNeutral = pitchSum / SUM_UP_NUM; @@ -40,7 +48,7 @@ } //ジョイスティックの中間値から上と下の幅を合わせます。値を取得するたびに呼び出してください。範囲は広い方に合わせる物とします -float ValueProcessor::MatchUpperAndLower(InputType it, float max,float min,float neutral,float value) +float ValueProcess::MatchUpperAndLower(InputType it, float max,float min,float neutral,float value) { float Upper = max- neutral; float Lower = neutral - min; @@ -75,7 +83,7 @@ } //範囲外に値がない場合にエラーが発生するので範囲内に収める -float ValueProcessor::Format2Range(float value,float max,float min) +float ValueProcess::Format2Range(float value,float max,float min) { float result; @@ -89,7 +97,7 @@ } //値をint型の段階に分ける -int ValueProcessor::PhaseFloat(float value,float max,float min) +int ValueProcess::PhaseFloat(float value,float max,float min) { float PhaseWidth = (max - min) / PHASE_NUM; if(value< max&& value > min) { @@ -103,7 +111,30 @@ return PHASE_NUM; } -float ValueProcessor::SetRollPitchRacio(float pitch,float roll) +float ValueProcess::SetRollPitchRacio(float pitch,float roll) { return (roll + pitch * PITCHPERROLL) / (1.0 + PITCHPERROLL); } + +void ValueProcess::Processing(float rollRead,float pitchRead,int* input_R,int* input_L) +{ + setMaxAndMin(enumRoll, rollRead); + setMaxAndMin(enumPitch, pitchRead); + + float MatchedRoll = MatchUpperAndLower(enumRoll, rollNeutral + rollUpperDiff,rollNeutral + rollLowerDiff,rollNeutral,rollRead + neutralDiff); + float MatchedPitch = MatchUpperAndLower(enumPitch,pitchNeutral + pitchUpperDiff,pitchNeutral + pitchLowerDiff,pitchNeutral,pitchRead); + float FormatedRoll_R = Format2Range(SetRollPitchRacio(MatchedPitch,MatchedRoll),SetRollPitchRacio(pitchNeutral + pitchUpperDiff,rollNeutral + rollUpperDiff),SetRollPitchRacio(pitchNeutral + pitchLowerDiff,rollNeutral + rollLowerDiff)); + *input_R =PhaseFloat(FormatedRoll_R,SetRollPitchRacio(pitchNeutral + pitchUpperDiff,rollNeutral + rollUpperDiff),SetRollPitchRacio(pitchNeutral + pitchLowerDiff,rollNeutral + rollLowerDiff)); + + float FormatedRoll_L = Format2Range(SetRollPitchRacio(MatchedPitch, - MatchedRoll),SetRollPitchRacio(pitchNeutral + pitchUpperDiff,-rollNeutral - rollLowerDiff),SetRollPitchRacio(pitchNeutral +pitchLowerDiff, - rollNeutral - rollUpperDiff)); + *input_L = PhaseFloat(FormatedRoll_L,SetRollPitchRacio(pitchNeutral + pitchUpperDiff ,- rollNeutral - rollLowerDiff),SetRollPitchRacio(pitchNeutral + pitchLowerDiff ,- rollNeutral - rollUpperDiff)); + + if(*input_R < 1) + *input_R = 1; + else if(*input_R > PHASE_NUM) + *input_R = PHASE_NUM; + if(*input_L < 1) + *input_L = 1 ; + else if(*input_L > PHASE_NUM) + *input_L =PHASE_NUM; +}