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