Skip to content

Instantly share code, notes, and snippets.

@hsnks100
Created December 3, 2018 08:37
Show Gist options
  • Save hsnks100/80d5726862afb49f20b924a7f9bf80f3 to your computer and use it in GitHub Desktop.
Save hsnks100/80d5726862afb49f20b924a7f9bf80f3 to your computer and use it in GitHub Desktop.
조종 튜닝 오리지널 버전
ublic void onValueChanged(int angle, int power, int direction) {
// TODO Auto-generated method stub
JSONObject json1 = new JSONObject();
float left = 10000, right = 10000;
try {
if(power == 0) {
json1.put("left", 0);
json1.put("right", 0);
}
else {
float normalPower = power;
Button tglTurbo = (Button)findViewById(R.id.tglTurbo);
if(tglTurbo.getText().equals("LOW")) {
normalPower *= 2.0/4.0 / 100.0f;
}
if(tglTurbo.getText().equals("MID")) {
normalPower *= 3.0/4.0 / 100.0f;
}
if(tglTurbo.getText().equals("HIGH")) {
normalPower *= 4.0/4.0 / 100.0f;
}
// normalPower *= 4.0/4.0 / 100.0f;
angle = (int)constrainAngle360((int)angle);
Log.i("stick", "angle : " +angle + ".." + power);
// 낮을수록 선회속도가 낮음
float turningAdjust = 100.0f;
int straightRange = 15;
int turningRange = 85;
int rotateRange = 50;
int backRange = 60;
assert(straightRange*2 + turningRange*2 + rotateRange*2 + backRange == 360);
// 직진
if(360 - straightRange <= angle || angle < straightRange) {
left = 1.0f * normalPower * 1.f;
right = 1.0f * normalPower * 1.f;
json1.put("left", (int)(left * 960));
json1.put("right", (int)(right * 960));
}
// 선회
else if(straightRange <= angle && angle < straightRange + turningRange) {
// normalPower -= angle / turningAdjust;
left = 1.0f * normalPower;
// right = 1.0f * normalPower;
// angle = [15, 100)
right = (1.f - angle / turningAdjust) * normalPower;
json1.put("left", (int)(left * 960));
json1.put("right", (int)(right * 960));
}
// 제자리 돌기
else if(straightRange + turningRange <= angle && angle < straightRange + turningRange + rotateRange) {
left = 1.0f * normalPower * 960.f * 0.32f;
right = -normalPower * 960.f * 0.32f;
json1.put("left", left);
json1.put("right", right);
}
// 빠꾸
else if(straightRange + turningRange + rotateRange <= angle && angle < straightRange + turningRange + rotateRange + backRange) {
json1.put("left",-normalPower * 960.f * 0.5f);
json1.put("right", -normalPower * 960.f * 0.5f);
}
// 제자리 돌기
else if(straightRange + turningRange + rotateRange + backRange <= angle && angle < straightRange + turningRange + rotateRange + backRange + rotateRange) {
left = -normalPower * 960.f * 0.32f;
right = normalPower * 960.f * 0.32f;
json1.put("left", left);
json1.put("right", right);
}
// 선회
else if(straightRange + turningRange + rotateRange + backRange + rotateRange <= angle) {
// left = (1 + angle / 90)
// right = 1.0
// left = 1.f * normalPower;
float minusAngle = 360 - angle;
left = (1.f - minusAngle / turningAdjust) * normalPower;
right = 1.f * normalPower;
json1.put("left", (int)(left * 960));
json1.put("right", (int)(right * 960));
}
else {
json1.put("left", 0);
json1.put("right", 0);
}
}
}
catch (JSONException e) {
e.printStackTrace();
}
sendControlToRobot((short) 98, json1);
}
}, JoystickView.DEFAULT_LOOP_INTERVAL / 10);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment