From de75ec84e295c3f952a200897aa22aa73d7d5867 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期一, 15 十二月 2025 19:37:11 +0800
Subject: [PATCH] 新增了串口割草机拖尾和缩放比例保存功能
---
src/yaokong/RemoteControlDialog.java | 139 +++++++++++++++++++++++----------------------
1 files changed, 71 insertions(+), 68 deletions(-)
diff --git a/src/yaokong/RemoteControlDialog.java b/src/yaokong/RemoteControlDialog.java
index 850a14c..ca29763 100644
--- a/src/yaokong/RemoteControlDialog.java
+++ b/src/yaokong/RemoteControlDialog.java
@@ -25,6 +25,9 @@
private Timer steeringControlTimer; // 杞悜鎺у埗瀹氭椂鍣�
private int targetForwardSpeed = 0; // 鐩爣鍓嶈繘/鍚庨��閫熷害
private int targetSteeringSpeed = 0; // 鐩爣杞悜閫熷害
+ // 鐙珛璺熻釜姣忎釜鎽囨潌鐨勫綋鍓嶉�熷害锛岄伩鍏嶇浉浜掑奖鍝�
+ private int independentForwardSpeed = 0; // 鐙珛鐨勫墠杩涢�熷害锛堜笉鍙楄浆鍚戞憞鏉嗗奖鍝嶏級
+ private int independentSteeringSpeed = 0; // 鐙珛鐨勮浆鍚戦�熷害锛堜笉鍙楀墠杩涙憞鏉嗗奖鍝嶏級
private List<JButton> bladeButtons = new ArrayList<>(); // 瀛樺偍鍒�鐩樻帶鍒舵寜閽紝鐢ㄤ簬娓呯悊瀹氭椂鍣�
private String bladeUpDefaultText = "鍒�鐩樺崌"; // 鍒�鐩樺崌鎸夐挳榛樿鏂囧瓧
private String bladeDownDefaultText = "鍒�鐩橀檷"; // 鍒�鐩橀檷鎸夐挳榛樿鏂囧瓧
@@ -158,27 +161,38 @@
moveJoystick.setJoystickListener(new JoystickListener() {
@Override
public void onJoystickMoved(double x, double y) {
- // 鍙娇鐢╕杞存帶鍒跺墠杩涘悗閫�锛屽悜涓婏紙鍖楋級涓烘
- // 璁$畻骞跺洓鑸嶄簲鍏ュ埌鏁存暟閫熷害鍊硷紝姝d负鍓嶈繘锛岃礋涓哄悗閫�
+ // 鍙娇鐢╕杞存帶鍒跺墠杩涘悗閫�
+ // y鍊艰寖鍥达細-1.0锛堝悜涓婏級鍒� 1.0锛堝悜涓嬶級
+ // 璁$畻閫熷害鍊硷細鍚戜笅锛坹>0锛変负鍚庨��锛堣礋鍊硷級锛屽悜涓婏紙y<0锛変负鍓嶈繘锛堟鍊硷級
+ // 鍚庨��鍊艰寖鍥达細0 鍒� -100锛屽墠杩涘�艰寖鍥达細0 鍒� 100
int forwardVal = (int) Math.round(-y * 100.0);
// 闄愬埗鍦� [-100, 100]
forwardVal = Math.max(-100, Math.min(100, forwardVal));
- // 鏇存柊鐩爣閫熷害
- targetForwardSpeed = forwardVal;
-
- if (Math.abs(y) > 0.1) {
- // 鎽囨潌涓嶅湪涓績浣嶇疆锛屽惎鍔ㄦ寔缁彂閫佸畾鏃跺櫒
- startForwardControlTimer();
- } else {
- // 鎽囨潌鍥炲埌涓績浣嶇疆锛屽仠姝㈠彂閫�
- stopForwardControlTimer();
- stopForward();
+ // 姝诲尯澶勭悊锛氬鏋滈�熷害鍊煎湪-10鍒�10涔嬮棿锛岃涓�0锛堥伩鍏嶅井灏忔姈鍔級
+ if (Math.abs(forwardVal) <= 10) {
+ forwardVal = 0;
}
- // 鏇存柊椤堕儴鏄剧ず锛堢Щ鍔ㄦ樉绀哄綋鍓嶅墠杩�/鍚庨��閫熷害锛岃浆鍚戝彇褰撳墠杞悜閫熷害浣滀负鍙傝�冿級
- int steeringVal = Control03.getCurrentSteeringSpeed();
- updateJoystickValues(forwardVal, steeringVal);
+ // 鏇存柊鐩爣閫熷害鍜岀嫭绔嬮�熷害
+ targetForwardSpeed = forwardVal;
+ independentForwardSpeed = forwardVal;
+
+ if (forwardVal != 0) {
+ // 鎽囨潌涓嶅湪姝诲尯锛屽惎鍔ㄦ寔缁彂閫佸畾鏃跺櫒
+ // 鍚庨��鏃� forwardVal 涓鸿礋鍊硷紙-100鍒�-11锛夛紝鍓嶈繘鏃� forwardVal 涓烘鍊硷紙11鍒�100锛�
+ startForwardControlTimer();
+ } else {
+ // 鎽囨潌鍦ㄦ鍖烘垨涓績浣嶇疆锛屽仠姝㈠畾鏃跺櫒
+ stopForwardControlTimer();
+ // 灏嗙嫭绔嬬殑鍓嶈繘閫熷害璁剧疆涓�0
+ independentForwardSpeed = 0;
+ // 鍙戦�佸仠姝㈡寚浠わ紙淇濇寔杞悜閫熷害涓嶅彉锛�
+ Control03.setAndSendSpeeds(independentSteeringSpeed, 0);
+ }
+
+ // 鏇存柊椤堕儴鏄剧ず锛堜娇鐢ㄧ嫭绔嬬殑閫熷害鍊硷級
+ updateJoystickValues(forwardVal, independentSteeringSpeed);
}
});
// 杞悜鎽囨潌锛堣摑鑹蹭富棰橈級
@@ -187,26 +201,37 @@
turnJoystick.setJoystickListener(new JoystickListener() {
@Override
public void onJoystickMoved(double x, double y) {
- // 鍙娇鐢╔杞存帶鍒跺乏鍙宠浆鍚戯紝鍚戝彸涓烘
- // 璁$畻骞跺洓鑸嶄簲鍏ュ埌鏁存暟杞悜鍊硷紝姝d负鍙宠浆锛岃礋涓哄乏杞�
+ // 鍙娇鐢╔杞存帶鍒跺乏鍙宠浆鍚�
+ // x鍊艰寖鍥达細-1.0锛堝悜宸︼級鍒� 1.0锛堝悜鍙筹級
+ // 璁$畻杞悜鍊硷細鍚戝乏锛坸<0锛変负宸﹁浆锛堣礋鍊硷級锛屽悜鍙筹紙x>0锛変负鍙宠浆锛堟鍊硷級
+ // 宸﹁浆鍊艰寖鍥达細0 鍒� -100锛屽彸杞�艰寖鍥达細0 鍒� 100
int steeringVal = (int) Math.round(x * 100.0);
steeringVal = Math.max(-100, Math.min(100, steeringVal));
- // 鏇存柊鐩爣閫熷害
- targetSteeringSpeed = steeringVal;
-
- if (Math.abs(x) > 0.1) {
- // 鎽囨潌涓嶅湪涓績浣嶇疆锛屽惎鍔ㄦ寔缁彂閫佸畾鏃跺櫒
- startSteeringControlTimer();
- } else {
- // 鎽囨潌鍥炲埌涓績浣嶇疆锛屽仠姝㈠彂閫�
- stopSteeringControlTimer();
- stopSteering();
+ // 姝诲尯澶勭悊锛氬鏋滈�熷害鍊煎湪-10鍒�10涔嬮棿锛岃涓�0锛堥伩鍏嶅井灏忔姈鍔級
+ if (Math.abs(steeringVal) <= 10) {
+ steeringVal = 0;
}
- // 鏇存柊椤堕儴鏄剧ず锛堣浆鍚戞樉绀哄綋鍓嶈浆鍚戦�熷害锛岀Щ鍔ㄦ樉绀哄綋鍓嶅墠杩涢�熷害锛�
- int forwardVal = Control03.getCurrentForwardSpeed();
- updateJoystickValues(forwardVal, steeringVal);
+ // 鏇存柊鐩爣閫熷害鍜岀嫭绔嬮�熷害
+ targetSteeringSpeed = steeringVal;
+ independentSteeringSpeed = steeringVal;
+
+ if (steeringVal != 0) {
+ // 鎽囨潌涓嶅湪姝诲尯锛屽惎鍔ㄦ寔缁彂閫佸畾鏃跺櫒
+ // 宸﹁浆鏃� steeringVal 涓鸿礋鍊硷紙-100鍒�-11锛夛紝鍙宠浆鏃� steeringVal 涓烘鍊硷紙11鍒�100锛�
+ startSteeringControlTimer();
+ } else {
+ // 鎽囨潌鍦ㄦ鍖烘垨涓績浣嶇疆锛屽仠姝㈠畾鏃跺櫒
+ stopSteeringControlTimer();
+ // 灏嗙嫭绔嬬殑杞悜閫熷害璁剧疆涓�0
+ independentSteeringSpeed = 0;
+ // 鍙戦�佸仠姝㈡寚浠わ紙淇濇寔鍓嶈繘閫熷害涓嶅彉锛�
+ Control03.setAndSendSpeeds(0, independentForwardSpeed);
+ }
+
+ // 鏇存柊椤堕儴鏄剧ず锛堜娇鐢ㄧ嫭绔嬬殑閫熷害鍊硷級
+ updateJoystickValues(independentForwardSpeed, steeringVal);
}
});
joystickPanel.add(moveJoystick);
@@ -625,14 +650,9 @@
}
private void stopForward() {
- if (Control03.getCurrentForwardSpeed() != 0) {
- boolean success = Control03.approachForwardSpeedToZero(20);
- if (!success) {
- showSerialClosedWarning();
- return;
- }
- serialWarningShown = false;
- }
+ // 灏嗙嫭绔嬬殑鍓嶈繘閫熷害璁剧疆涓�0锛屼繚鎸佽浆鍚戦�熷害涓嶅彉
+ independentForwardSpeed = 0;
+ Control03.setAndSendSpeeds(independentSteeringSpeed, 0);
}
private void applySteeringSpeed(int speed) {
@@ -655,14 +675,9 @@
}
private void stopSteering() {
- if (Control03.getCurrentSteeringSpeed() != 0) {
- boolean success = Control03.approachSteeringSpeedToZero(25);
- if (!success) {
- showSerialClosedWarning();
- return;
- }
- serialWarningShown = false;
- }
+ // 灏嗙嫭绔嬬殑杞悜閫熷害璁剧疆涓�0锛屼繚鎸佸墠杩涢�熷害涓嶅彉
+ independentSteeringSpeed = 0;
+ Control03.setAndSendSpeeds(0, independentForwardSpeed);
}
/**
@@ -729,36 +744,24 @@
* 鎸佺画鍙戦�佸墠杩�/鍚庨��閫熷害鎸囦护
*/
private void applyForwardSpeedContinuously(int targetSpeed) {
- int currentSpeed = Control03.getCurrentForwardSpeed();
- int currentSteeringSpeed = Control03.getCurrentSteeringSpeed();
+ // 鏇存柊鐙珛鐨勫墠杩涢�熷害
+ independentForwardSpeed = targetSpeed;
- // 濡傛灉宸茬粡杈惧埌鐩爣閫熷害锛岀洿鎺ュ彂閫佷竴娆′互淇濇寔鐘舵��
- if (currentSpeed == targetSpeed) {
- // 鐩存帴鍙戦�佺洰鏍囬�熷害鎸囦护浠ヤ繚鎸佺姸鎬侊紙鍗充娇閫熷害鐩稿悓涔熻鍙戦�侊級
- Control03.setAndSendSpeeds(currentSteeringSpeed, targetSpeed);
- } else {
- // 閫愭璋冩暣鍒扮洰鏍囬�熷害
- int delta = targetSpeed > currentSpeed ? 10 : -10;
- Control03.adjustForwardSpeed(delta);
- }
+ // 浣跨敤鐙珛鐨勮浆鍚戦�熷害锛堜笉鍙楀墠杩涙憞鏉嗗奖鍝嶏級锛屽彧鏇存柊鍓嶈繘閫熷害
+ // 杩欐牱鍓嶈繘鎽囨潌鐨勬搷浣滀笉浼氬奖鍝嶈浆鍚戦�熷害
+ Control03.setAndSendSpeeds(independentSteeringSpeed, independentForwardSpeed);
}
/**
* 鎸佺画鍙戦�佽浆鍚戦�熷害鎸囦护
*/
private void applySteeringSpeedContinuously(int targetSpeed) {
- int currentSpeed = Control03.getCurrentSteeringSpeed();
- int currentForwardSpeed = Control03.getCurrentForwardSpeed();
+ // 鏇存柊鐙珛鐨勮浆鍚戦�熷害
+ independentSteeringSpeed = targetSpeed;
- // 濡傛灉宸茬粡杈惧埌鐩爣閫熷害锛岀洿鎺ュ彂閫佷竴娆′互淇濇寔鐘舵��
- if (currentSpeed == targetSpeed) {
- // 鐩存帴鍙戦�佺洰鏍囬�熷害鎸囦护浠ヤ繚鎸佺姸鎬侊紙鍗充娇閫熷害鐩稿悓涔熻鍙戦�侊級
- Control03.setAndSendSpeeds(targetSpeed, currentForwardSpeed);
- } else {
- // 閫愭璋冩暣鍒扮洰鏍囬�熷害
- int delta = targetSpeed > currentSpeed ? 15 : -15;
- Control03.adjustSteeringSpeed(delta);
- }
+ // 浣跨敤鐙珛鐨勫墠杩涢�熷害锛堜笉鍙楄浆鍚戞憞鏉嗗奖鍝嶏級锛屽彧鏇存柊杞悜閫熷害
+ // 杩欐牱杞悜鎽囨潌鐨勬搷浣滀笉浼氬奖鍝嶅墠杩涢�熷害
+ Control03.setAndSendSpeeds(independentSteeringSpeed, independentForwardSpeed);
}
// 鏇存柊椤堕儴鏄剧ず鐨勬憞鏉嗘暟鍊硷紙鍦� EDT 涓婅皟鐢級锛屾枃瀛楁牴鎹暟鍊兼槧灏勪负鏂瑰悜鎻忚堪
--
Gitblit v1.10.0