Browse Source

1.清洗机器人增加人体传感器逻辑。
2.清洗机器人增加,清洗中如果有人上厕所,需要急停复位。
3.增加调试页参数。
4.增加进阶页参数。

Administrator 4 years ago
parent
commit
5f7bfbe5b0
21 changed files with 458 additions and 168 deletions
  1. 7 5
      app/src/main/java/com/sunzee/adapter/AdvanceParameterAdapter.java
  2. 4 2
      app/src/main/java/com/sunzee/adapter/DebugParameterAdapter.java
  3. 10 9
      app/src/main/java/com/sunzee/adapter/DebugParameterXAdapter.java
  4. 9 3
      app/src/main/java/com/sunzee/model/HoleInformation.java
  5. 16 5
      app/src/main/java/com/sunzee/mvp/advanceparameter/AdvanceParameterPresenter.java
  6. 48 22
      app/src/main/java/com/sunzee/mvp/debug/DebugPresenter.java
  7. 220 103
      app/src/main/java/com/sunzee/service/MyService.java
  8. 9 0
      app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterTask.java
  9. 1 0
      app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterThreadType.java
  10. 27 5
      app/src/main/java/com/sunzee/thread/advanceparameter/ThreadPoolAdvanceParameter.java
  11. 11 0
      app/src/main/java/com/sunzee/thread/debugparameter/DebugParameterTask.java
  12. 5 2
      app/src/main/java/com/sunzee/thread/debugparameter/ThreadPoolDebugParameter.java
  13. 27 0
      app/src/main/java/com/sunzee/thread/myservice/MyserviceTask.java
  14. 3 0
      app/src/main/java/com/sunzee/thread/myservice/MyserviceThreadType.java
  15. 35 4
      app/src/main/java/com/sunzee/thread/myservice/ThreadPoolMyservice.java
  16. 1 1
      app/src/main/java/com/sunzee/ui/activity/AdvertisingActivity.java
  17. 0 3
      app/src/main/java/com/sunzee/ui/activity/HomeActivity.java
  18. 17 2
      app/src/main/java/com/sunzee/ui/fragment/AdvanceParameterFragment.java
  19. 2 2
      app/src/main/java/com/sunzee/ui/fragment/DebugFragment.java
  20. 3 0
      app/src/main/res/values-en/strings.xml
  21. 3 0
      app/src/main/res/values/strings.xml

+ 7 - 5
app/src/main/java/com/sunzee/adapter/AdvanceParameterAdapter.java

@@ -27,10 +27,11 @@ import java.util.HashMap;
 public class AdvanceParameterAdapter extends RecyclerView.Adapter<AdvanceParameterAdapter.ViewHolder> {
 
     public final static int[] paraName = {
-            R.string.advance_parameter_1,R.string.advance_parameter_2,R.string.advance_parameter_3,R.string.advance_parameter_4,
-            R.string.advance_parameter_5,R.string.advance_parameter_6,R.string.advance_parameter_7,R.string.advance_parameter_8,
-            R.string.advance_parameter_9, R.string.advance_parameter_10,R.string.advance_parameter_11, R.string.advance_parameter_12,
-            R.string.advance_parameter_13, R.string.advance_parameter_14,R.string.advance_parameter_15, R.string.advance_parameter_16
+            R.string.advance_parameter_1, R.string.advance_parameter_2, R.string.advance_parameter_3, R.string.advance_parameter_4,
+            R.string.advance_parameter_5, R.string.advance_parameter_6, R.string.advance_parameter_7, R.string.advance_parameter_8,
+            R.string.advance_parameter_9, R.string.advance_parameter_10, R.string.advance_parameter_11, R.string.advance_parameter_12,
+            R.string.advance_parameter_13, R.string.advance_parameter_14, R.string.advance_parameter_15, R.string.advance_parameter_16,
+            R.string.pointmove_speed
     };
 
     private ArrayList<ParameterBean> parameterBeans = new ArrayList<>();
@@ -47,7 +48,8 @@ public class AdvanceParameterAdapter extends RecyclerView.Adapter<AdvanceParamet
             "D420", "D421", "D422", "D423",
             "D424", "D425", "D418", "D419",
             "D426", "D427", "D428", "D429",
-            "D430", "D431", "D432", "D433"};
+            "D430", "D431", "D432", "D433",
+            "D79"};
 
     //保存editText的值
     public HashMap<Integer, String> contents = new HashMap<>();

+ 4 - 2
app/src/main/java/com/sunzee/adapter/DebugParameterAdapter.java

@@ -38,7 +38,8 @@ public class DebugParameterAdapter extends RecyclerView.Adapter<DebugParameterAd
             R.string.e_subtract,R.string.a_top,
             R.string.a_bottom,R.string.x_back_zero,
             R.string.y_back_zero,R.string.z_back_zero,
-            R.string.e_back_zero,R.string.a_back_zero
+            R.string.e_back_zero,R.string.a_back_zero,
+            R.string.jerk
 
     };
     private final String[] paraAddress = {
@@ -48,7 +49,8 @@ public class DebugParameterAdapter extends RecyclerView.Adapter<DebugParameterAd
             "M325","M1002","M1003","M1102",
             "M1103","M1203","M1202","M1302",
             "M1303","M1403","M1402","M1010",
-            "M1110","M1210","M1310","M1410"};
+            "M1110","M1210","M1310","M1410",
+            "M10"};
 
     public DebugParameterAdapter() {
 

+ 10 - 9
app/src/main/java/com/sunzee/adapter/DebugParameterXAdapter.java

@@ -15,17 +15,18 @@ public class DebugParameterXAdapter extends RecyclerView.Adapter<RecyclerView.Vi
     private final int NORMAL = 1;
 
     private int[] datas = {
-            R.string.iox3, R.string.iox4, R.string.iox5, R.string.iox7,
-            R.string.iox10,R.string.iox11,R.string.iox12,R.string.iox12,
-            R.string.iox12,R.string.iox12,R.string.iox12,R.string.iox12,
-            R.string.iox20, R.string.iox21, R.string.iox22,R.string.iox23,
-            R.string.iox24,R.string.iox25, R.string.iox26, R.string.iox27,
+            R.string.iox12,R.string.iox1,R.string.iox2,R.string.iox3, R.string.iox4, R.string.iox5, R.string.iox12, R.string.iox7,
+            R.string.iox10, R.string.iox11, R.string.iox12, R.string.iox12,
+            R.string.iox12, R.string.iox12, R.string.iox12, R.string.iox12,
+            R.string.iox20, R.string.iox21, R.string.iox22, R.string.iox23,
+            R.string.iox24, R.string.iox25, R.string.iox26, R.string.iox27,
     };
     private String[] address = {
-            "03", "04", "05", "07",
-            "10", "11", "12", "13", "14",
-            "15", "16", "17", "20", "21",
-            "22", "23", "24", "25", "26","27"
+            "00", "01", "02", "03", "04",
+            "05", "06", "07", "10", "11",
+            "12", "13", "14", "15", "16",
+            "17", "20", "21", "22", "23",
+            "24", "25", "26", "27"
     };
 
     public void setItemListener(ItemMaintainClickListener listener) {

+ 9 - 3
app/src/main/java/com/sunzee/model/HoleInformation.java

@@ -15,15 +15,21 @@ public class HoleInformation {
      * 廁所中時間
      */
     private long timeDuration;
-
-
-
     /**
      *  改变状态的时间是什么时候
      * 出了廁所的時間
      */
     private long outTimeDuration;
 
+    private String bodySensor ="2";
+
+    public String getBodySensor() {
+        return bodySensor;
+    }
+
+    public void setBodySensor(String bodySensor) {
+        this.bodySensor = bodySensor;
+    }
 
     public HoleInformation(int state, long timeDuration) {
         this.state = state;

+ 16 - 5
app/src/main/java/com/sunzee/mvp/advanceparameter/AdvanceParameterPresenter.java

@@ -12,7 +12,9 @@ import com.sunzee.retrofit.ApiCallback;
 import com.sunzee.thread.advanceparameter.ThreadPoolAdvanceParameter;
 import com.sunzee.utils.AdvacedUtil;
 import com.sunzee.utils.HexadecimalUtil;
+
 import java.util.ArrayList;
+
 import okhttp3.RequestBody;
 
 /**
@@ -39,7 +41,7 @@ public class AdvanceParameterPresenter extends BasePresenter<AdvanceParameterVie
                 threadGetParameter1.getValues()[4] = String.valueOf(get177Data(HexadecimalUtil.hex2dec(results.get(6))));
                 threadGetParameter1.getValues()[5] = String.valueOf(get177Data(HexadecimalUtil.hex2dec(results.get(7))));
 
-                Log.d(TAG, "D418setAdvanced: "+results.size());
+                Log.d(TAG, "D418setAdvanced: " + results.size());
             }
         } else if (name.equals("D426")) {
             if (!threadGetParameter1.isReceive1()) {
@@ -54,14 +56,23 @@ public class AdvanceParameterPresenter extends BasePresenter<AdvanceParameterVie
                 threadGetParameter1.getValues()[13] = String.valueOf(HexadecimalUtil.hex2dec(results.get(6)));
                 threadGetParameter1.getValues()[14] = String.valueOf(HexadecimalUtil.hex2dec(results.get(7)));
                 threadGetParameter1.getValues()[15] = String.valueOf(HexadecimalUtil.hex2dec(results.get(8)));
-                Log.d(TAG, "D426setAdvanced: "+results.size());
+                Log.d(TAG, "D426setAdvanced: " + results.size());
+            }
+        } else if (name.equals("D79")) {
+            if (!threadGetParameter1.isReceive3()) {
+                threadGetParameter1.setReceive3(true);
+                threadGetParameter1.stopReadD79();
+                threadGetParameter1.getValues()[16] = String.valueOf(HexadecimalUtil.hex2dec(results.get(0)));
+                Log.d(TAG, "D79setAdvanced: " + results.size());
             }
         }
         if (threadGetParameter1.isReceive1() &&
-                threadGetParameter1.isReceive2()) {
+                threadGetParameter1.isReceive2() &&
+                threadGetParameter1.isReceive3()) {
             mvpView.getDataSuccess();
             threadGetParameter1.setReceive1(false);
             threadGetParameter1.setReceive2(false);
+            threadGetParameter1.setReceive3(false);
         }
     }
 
@@ -100,7 +111,7 @@ public class AdvanceParameterPresenter extends BasePresenter<AdvanceParameterVie
             //正数 四舍五入
             String s3 = get177Data(l);
             return s3;
-        }else {
+        } else {
             //负数
             String realData = AdvacedUtil.getRealData(s1);
             return realData;
@@ -110,6 +121,6 @@ public class AdvanceParameterPresenter extends BasePresenter<AdvanceParameterVie
     }
 
     private String get177Data(long l) {
-        return String.valueOf(Math.round((l/ Global.num)*10));
+        return String.valueOf(Math.round((l / Global.num) * 10));
     }
 }

+ 48 - 22
app/src/main/java/com/sunzee/mvp/debug/DebugPresenter.java

@@ -9,6 +9,7 @@ import com.sunzee.thread.debugparameter.ThreadPoolDebugParameter;
 import com.sunzee.utils.HexadecimalUtil;
 import com.wuxiaolong.androidutils.library.LogUtil;
 
+import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -29,7 +30,7 @@ public class DebugPresenter extends BasePresenter<DebugView> {
             "0", "0", "0", "0", "0",
             "0", "0", "0", "0", "0",
             "0", "0", "0", "0", "0",
-            "0"));
+            "0", "0", "0", "0", "0"));
     private ArrayList<String> listY = new ArrayList<>(Arrays.asList(
             "0", "0", "0", "0", "0",
             "0", "0", "0", "0", "0",
@@ -63,12 +64,22 @@ public class DebugPresenter extends BasePresenter<DebugView> {
                 threadGetParameter1.getValues().set(12, results.get(5));
                 LogUtil.d(TAG, "setDebugParameter: " + threadGetParameter1.getValues());
             }
+        }else if(name.equals("M10")){
+            if (!threadGetParameter1.isReceive3()) {
+                threadGetParameter1.setReceive3(true);
+                threadGetParameter1.stopReadM10();
+                threadGetParameter1.getValues().set(28, results.get(2));
+                String s = Arrays.toString(results.toArray());
+                LogUtil.d(TAG,"setDebugParameter:"+s);
+                LogUtil.d(TAG,"setDebugParameter: " + threadGetParameter1.getValues());
+            }
         }
-        if (threadGetParameter1.isReceive1() && threadGetParameter1.isReceive2()) {
+        if (threadGetParameter1.isReceive1() && threadGetParameter1.isReceive2()&& threadGetParameter1.isReceive3()) {
             mvpView.getDataSuccess();
             mvpView.hideLoading();
             threadGetParameter1.setReceive1(false);
             threadGetParameter1.setReceive2(false);
+            threadGetParameter1.setReceive3(false);
         }
     }
 
@@ -122,26 +133,30 @@ public class DebugPresenter extends BasePresenter<DebugView> {
                 Log.d(TAG, "list2setData: "+s);
             }
             if ("X0".equals(name)) {
-                listX.set(0, list2.get(3));
-                listX.set(1, list2.get(4));
-                listX.set(2, list2.get(5));
-                listX.set(3, list2.get(7));
-                listX.set(4, list2.get(8));
-                listX.set(5, list2.get(9));
-                listX.set(6, list2.get(10));
-                listX.set(7, list2.get(11));
-                listX.set(8, list2.get(12));
-                listX.set(9, list2.get(13));
-                listX.set(10, list2.get(14));
-                listX.set(11, list2.get(15));
-                listX.set(12, list2.get(16));
-                listX.set(13, list2.get(17));
-                listX.set(14, list2.get(18));
-                listX.set(15, list2.get(19));
-                listX.set(16, list2.get(20));
-                listX.set(17, list2.get(21));
-                listX.set(18, list2.get(22));
-                listX.set(19, list2.get(23));
+                listX.set(0,list2.get(0));
+                listX.set(1,list2.get(1));
+                listX.set(2,list2.get(2));
+                listX.set(3, list2.get(3));
+                listX.set(4, list2.get(4));
+                listX.set(5, list2.get(5));
+                listX.set(6, list2.get(6));
+                listX.set(7, list2.get(7));
+                listX.set(8, list2.get(8));
+                listX.set(9, list2.get(9));
+                listX.set(10, list2.get(10));
+                listX.set(11, list2.get(11));
+                listX.set(12, list2.get(12));
+                listX.set(13, list2.get(13));
+                listX.set(14, list2.get(14));
+                listX.set(15, list2.get(15));
+                listX.set(16, list2.get(16));
+                listX.set(17, list2.get(17));
+                listX.set(18, list2.get(18));
+                listX.set(19, list2.get(19));
+                listX.set(20, list2.get(20));
+                listX.set(21, list2.get(21));
+                listX.set(22, list2.get(22));
+                listX.set(23, list2.get(23));
                 mvpView.setXStatu(listX);
             } else if ("Y0".equals(name)) {
                 listY.set(0, list2.get(0));
@@ -172,6 +187,17 @@ public class DebugPresenter extends BasePresenter<DebugView> {
                 Log.d(TAG, list2.size() + "setYStatu: " + list2);
             }
             mvpView.hideLoading();
+        }else if(id ==10){
+            Log.d(TAG, "event: " + name);
+            ArrayList<String> results = HexadecimalUtil.flipString(result);
+            //    转成2进制
+            String s = HexadecimalUtil.hexStringToByte(result);
+            //翻转后的数据
+            String s1 = HexadecimalUtil.flipString(s, 8);
+            List<String> lis = Arrays.asList(s1.split(""));
+            ArrayList<String> list = new ArrayList(lis);
+            list.remove(0);
+            setDebugParameter(name, list, poolDebugParameter);
         }
     }
 }

+ 220 - 103
app/src/main/java/com/sunzee/service/MyService.java

@@ -77,7 +77,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Timer;
 import java.util.TimerTask;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -92,15 +91,19 @@ public class MyService extends Service {
     private boolean isRead = true;
     private boolean isRegularCleaning = false;
     private ThreadPoolAdvanceParameter mPoolAdvanceParameter = new ThreadPoolAdvanceParameter();
-    public final static int TOTAL_SUM = 6;
+    public final static int TOTAL_SUM = 14;
 
     //存储两个数据:是否上过厕所,一开始上厕所的时间是什么时候
     //CopyOnWriteArrayList并不是完全意义上的线程安全,如果涉及到remove操作,一定要谨慎处理。
     //写操作是加锁,读操作是不加锁的。多读少写时使用
+    //厕所状态从0开始。
     public static final List<HoleInformation> sHoleInformationList = new LinkedList<>();
+    //厕所序号从1开始。
     public static final LinkedList<Integer> sCleaningLocationList = new LinkedList<>();//存储要清洗的位置。
 
     private static volatile boolean isCleanOK = false;
+    private static volatile boolean isToiletClean = true;
+    private volatile Integer last;
 
     @Nullable
     @Override
@@ -112,13 +115,13 @@ public class MyService extends Service {
     public void onCreate() {
         super.onCreate();
         Log.d(TAG, "MyServiceonCreate: ");
-        EventBus.getDefault().register(this);
-        for (int i = 0; i < TOTAL_SUM; i++) {
-            sHoleInformationList.add(new HoleInformation(2, 0));//初始化
-
-
-            // sToiletList.add(i, 1);//初始化,一开始都是没上过厕所的。
+        synchronized (sCleaningLocationList){
+            sHoleInformationList.clear();
+            for (int i = 0; i < TOTAL_SUM; i++) {
+                sHoleInformationList.add(new HoleInformation(2, 0));//初始化
+            }
         }
+        EventBus.getDefault().register(this);
         startRefreshime();
     }
 
@@ -937,10 +940,8 @@ public class MyService extends Service {
 
                 } else if (messageEvent.getName().equals("DD120")) {
                     mThreadPoolMyservice.stopWriteDD120();
-                    Log.d(TAG, "addCleanTime120event: 廁所位置寫入成功");
                     mThreadPoolMyservice.stopSetM8();
                     mThreadPoolMyservice.startSetM8();
-                    Log.d(TAG, "cleanPositionNumX20: "+"D120执行了。");
                 } else if (messageEvent.getName().equals("M17")) {
                     mThreadPoolMyservice.stopSetM17();
                     if (isRegularCleaning) {
@@ -949,16 +950,38 @@ public class MyService extends Service {
                         mThreadPoolMyservice.startSetM8();
                     }
                 } else if (messageEvent.getName().equals("M8")) {
-                    isCleanOK = true;
+
                     mThreadPoolMyservice.stopSetM8();
                     Log.d(TAG, "addCleanTime120event: 開始清洗");
                 } else if (messageEvent.getName().equals("MM3")) {
                     mThreadPoolMyservice.stopWriteMM3();
+                    last = 0;
                     cleanCount = 0;
                     Log.d(TAG, "addCleanTime120event: 開始复位");
-
+                } else if (messageEvent.getName().equals("MM10")) {
+                    mThreadPoolMyservice.stopSetMM10();
+                    mThreadPoolMyservice.stopRstRM10();
+                    mThreadPoolMyservice.startRstRM10("M10");
+                } else if (messageEvent.getName().equals("RM10")) {
+                    //急停复位两次的原因是因为这里会执行两次。
+                    mThreadPoolMyservice.stopRstRM10();
+                    new Handler().postDelayed(new Runnable() {
+                        @Override
+                        public void run() {
+                            Log.d(TAG, "stopSetMMM3run: ");
+                            if (mThreadPoolMyservice != null) {
+                                mThreadPoolMyservice.stopSetMMM3();
+                                mThreadPoolMyservice.startSetMMM3("M3");
+                                Log.d(TAG, "isClean: 開始清洗3");
+                            }
+                        }
+                    }, 2000);
+                } else if (messageEvent.getName().equals("MMM3")) {
+                    Log.d(TAG, "stopSetMMM3runevent: ");
+                    mThreadPoolMyservice.stopSetMMM3();
+                    last = 0;
+                    cleanCount = 0;
                 }
-
                 mPoolAdvanceParameter.stopAll();
                 mPoolAdvanceParameter.startALLRead();
                 break;
@@ -998,17 +1021,19 @@ public class MyService extends Service {
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
-                    } else if (name.equals("X12")) {
+                    }/* else if (name.equals("X12")) {
                         String results = HexadecimalUtil.hexStringToByte(AsciiUtils.asciiByteArray2HexStr(responseFrame.getData()));
                         String s1 = HexadecimalUtil.flipString(results, 6).substring(0, TOTAL_SUM);//6个厕所蹲位
                         List<String> lis = Arrays.asList(s1.split(""));//第0位会是空字符串
                         ArrayList<String> result = new ArrayList(lis);//
                         result.remove(0);
-                        Log.d(TAG, "result event: " + result.get(0) + result.get(1));
+                        String s = Arrays.toString(result.toArray());
+                        Log.d(TAG, "X12event: "+result.size()+";s:"+s);
+                        //  Log.d(TAG, "result event: " + result.get(0) + result.get(1));
 
                         //todo 是否监听
                         //监控1号厕所
-                     /*   monitoring(result.get(0), 1);
+                        monitoring(result.get(0), 1);
                         //监控2号厕所
                         monitoring(result.get(1), 2);
                         //监控3号厕所
@@ -1018,79 +1043,168 @@ public class MyService extends Service {
                         //监控5号厕所
                         monitoring(result.get(4), 5);
                         //监控6号厕所
-                        monitoring(result.get(5), 6);*/
+                        monitoring(result.get(5), 6);
+                    }*/else if(name.equals("X12")){
+                        String result = AsciiUtils.asciiByteArray2HexStr(responseFrame.getData());
+                        List<String> strList = HexadecimalUtil.getStrList(result, 4);
+                        StringBuilder sb = new StringBuilder();
+                        for (int i = 0, len = strList.size(); i < len; i++) {
+                            String str = strList.get(i);
+                            //2进制
+                            String s3 = HexadecimalUtil.hexStringToByte(str);
+                            //2进制翻转
+                            String s2 = HexadecimalUtil.flipString(s3, 8);
+                            sb.append(s2);
+                        }
+                        List<String> list1 = Arrays.asList(sb.toString().split(""));
+                        ArrayList<String> list2 = new ArrayList(list1);
+                        list2.remove(0);
+
+                        String s = Arrays.toString(list2.toArray());
+                        Log.d(TAG, "X12event1: "+s);
+
+
+                        //监控1号厕所
+                        monitoring(list2.get(2), 1,list2.get(8));
+                        //监控2号厕所
+                        monitoring(list2.get(3), 2,list2.get(9));
+                        //监控3号厕所
+                        monitoring(list2.get(4), 3,list2.get(10));
+                        //监控4号厕所
+                        monitoring(list2.get(5), 4,"0"/*list2.get(11)*/);
+                        //监控5号厕所
+                        monitoring(list2.get(6), 5,"0"/*list2.get(12)*/);
+                        //监控6号厕所
+                        monitoring(list2.get(7), 6,"0"/*list2.get(13)*/);
+
                     } else if (name.equals("D2")) {
                         String data = String.valueOf(HexadecimalUtil.hex2dec(HexadecimalUtil.flipString(AsciiUtils.asciiByteArray2HexStr(responseFrame.getData())).get(0)));
-                        Log.d(TAG, "addCleanTimeD2event: " + data);
+                        // Log.d(TAG, "addCleanTimeD2event: " + data);
                         switch (data) {
                             case "0"://复位中
-                                if (!isAwait) {
-                                    isAwait = true;
+                                synchronized (sCleaningLocationList) {
+                                    if (!isAwait) {
+                                        isAwait = true;
+                                    }
+                                    if (!isToiletClean) {
+                                        isToiletClean = true;
+                                    }
                                 }
                                 break;
-                            case "1": //第一次待机中
+                            case "1": //第一次待机中,开机完毕
                                 //复位了,那么就需要判断是否还需要清洗
                                 //todo 这里的代码会一直执行,如果不等于0,那么这里会一直执行。
                                 synchronized (sCleaningLocationList) {//多线程操作需要加上同步锁
                                     if (isAwait) {
                                         isAwait = false;
-                                        if (sCleaningLocationList.size() != 0) {
-                                            while (sCleaningLocationList.size() > 0) {
-                                                Integer first = sCleaningLocationList.getFirst();
-                                                Log.d(TAG, "first: "+first+",state:"+sHoleInformationList.get(first - 1).getState());
-                                                Log.d(TAG, "event: first"+(sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2));
-
-                                                if (sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2) {
-                                                    sCleaningLocationList.removeFirst();
-                                                }else{
-                                                    cleanPositionNumX20(first);
-                                                    cleanCount++;
-                                                    return;
+                                        new Handler().postDelayed(new Runnable() {
+                                            @Override
+                                            public void run() {
+                                                synchronized (sCleaningLocationList) {
+                                                    while (sCleaningLocationList.size() > 0) {
+                                                        Integer first = sCleaningLocationList.getFirst();
+                                                        HoleInformation holeInformation = sHoleInformationList.get(first - 1);
+                                                        if (holeInformation.getState() != 0 && holeInformation.getState() != 2 && "1".equals(holeInformation.getBodySensor())) {
+                                                            //被移除了
+                                                            Log.d(TAG, "被移除了1: " + first);
+                                                            sCleaningLocationList.removeFirst();
+                                                        } else if (holeInformation.getState() != 0 && holeInformation.getState() != 2) {
+                                                            Log.d(TAG, "被移除了3: " + first);
+                                                            sCleaningLocationList.removeFirst();
+                                                        }else {
+                                                            cleanPositionNumX20(first);
+                                                            Log.d(TAG, "isClean開始清洗add: " + first);
+                                                            cleanCount++;
+                                                            return;
+                                                        }
+                                                    }
                                                 }
-
+                                            }
+                                        },6000);
+                                    }
+                                }
+                                break;
+                            case "5":
+                                //todo 清洗中,需要各个10秒再开始
+                                synchronized (sCleaningLocationList) {
+                                    //todo 必须sCleaningLocationList和sHoleInformationList不为空。才能执行里面的代码。
+                                    if (sCleaningLocationList.size()>0 &&sHoleInformationList.size()>0) {
+                                        if (isToiletClean) {
+                                            isCleanOK = true;
+                                            //多线程,我们需要控制只执行一次?
+                                            Integer first = sCleaningLocationList.getFirst();//sCleaningLocationList取出来的数据从1开始。
+                                            HoleInformation holeInformation = sHoleInformationList.get(first - 1);
+                                            Log.d(TAG, "isClean開始清洗add急停: " + holeInformation.getState());
+                                            if (holeInformation.getState() != 2) {
+                                                //如果在清洗中,那么就急停
+                                                isToiletClean = false;
+                                                mThreadPoolMyservice.stopSetMM10();
+                                                mThreadPoolMyservice.startSetMM10("M10");
+                                                Log.d(TAG, "sCleaningLocationList: 紧急停止");
                                             }
                                         }
                                     }
 
+
                                 }
                                 break;
-                            case "3"://清洗完毕----清洗過程中還是清洗完畢
+                            case "7"://清洗完毕----清洗過程中還是清洗完畢
                                 synchronized (sCleaningLocationList) {//多线程操作需要加上同步锁
-                                    Log.d(TAG, "为零event: " + isCleanOK);
                                     if (isCleanOK) {
                                         isCleanOK = false;
-                                        Log.d(TAG, "为零sCleaningLocationListevent: " + sCleaningLocationList.size());
-                                        if (sCleaningLocationList.size() != 0) {
-                                            Integer first = null;
-                                            Integer integer = sCleaningLocationList.removeFirst();
-                                            //如果集合大于0,那么我就取出第一个位置,进行判断是否正在上厕所,如果是,那么就需要移除,继续下一个,
-                                            while (sCleaningLocationList.size() > 0) {
-                                                first = sCleaningLocationList.getFirst();
+
+                                        //准备清洗下一个厕所,如果为10次,那么就需要复位。
+                                        if (cleanCount >= 10) {
+                                            cleanCount = 0;
+                                            mThreadPoolMyservice.stopWriteMM3();
+                                            mThreadPoolMyservice.startWriteMM3("M3");
+                                            return;
+                                        }
+                                        new Handler().postDelayed(new Runnable() {
+                                            @Override
+                                            public void run() {
+                                                synchronized (sCleaningLocationList) {//移除这里出现了问题。
+                                                    if (sCleaningLocationList.size() != 0) {
+                                                        Integer first = null;
+                                                        //上一个清洗的厕所123
+                                                        Log.d(TAG, "被移除了2: " + first);
+                                                        last = sCleaningLocationList.removeFirst();
+                                                        //如果集合大于0,那么我就取出第一个位置,进行判断是否正在上厕所,如果是,那么就需要移除,继续下一个,
+                                                        while (sCleaningLocationList.size() > 0) {
+                                                            first = sCleaningLocationList.getFirst();//现在要清洗的厕所。456
 //                                                if (sHoleInformationList.get(first-1).getState()==3) {
-                                               StringBuilder  sb = new StringBuilder();
-                                                for (Integer integer1 : sCleaningLocationList) {
-                                                    sb.append(integer1);
-                                                }
-                                                Log.d(TAG, "first: "+first+",state:"+sHoleInformationList.get(first - 1).getState()+",sb:"+sb);
-                                                Log.d(TAG, "event: first"+(sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2));
-
-                                                if (sHoleInformationList.get(first - 1).getState() != 0 && sHoleInformationList.get(first - 1).getState() != 2) {
-                                                    sCleaningLocationList.removeFirst();
-                                                } else {
-                                                    Log.d(TAG, "integer: "+integer+",first: "+first+",sb:"+sb);
-                                                    if ((integer == 1 || integer == 2 || integer == 3) && (first == 4 || first == 5 || first == 6)) {
-                                                        mThreadPoolMyservice.stopWriteMM3();
-                                                        mThreadPoolMyservice.startWriteMM3("M3");
-                                                        return;
+                                                            StringBuilder sb = new StringBuilder();
+                                                            for (Integer integer1 : sCleaningLocationList) {
+                                                                sb.append(integer1);
+                                                            }
+
+                                                            HoleInformation holeInformation = sHoleInformationList.get(first - 1);
+                                                            if (holeInformation.getState() != 0 && holeInformation.getState() != 2 && "1".equals(holeInformation.getBodySensor())) {
+                                                                Log.d(TAG, "被移除了3: " + first);
+                                                                sCleaningLocationList.removeFirst();
+                                                                //如果没有人在里面,但是人体传感器检测到有人,那么移除
+                                                                //如果有人在里面,即使人体创奇检测到有人或者没人,都移除。
+                                                            } else if (holeInformation.getState() != 0 && holeInformation.getState() != 2) {
+                                                                Log.d(TAG, "被移除了3: " + first);
+                                                                sCleaningLocationList.removeFirst();
+                                                            } else  {
+                                                                if ((last == 1 || last == 2 || last == 3) && (first == 4 || first == 5 || first == 6)) {
+                                                                    mThreadPoolMyservice.stopWriteMM3();
+                                                                    mThreadPoolMyservice.startWriteMM3("M3");
+                                                                    Log.d(TAG, "isClean: 开始复位4");
+                                                                    return;
+                                                                }
+                                                                cleanPositionNumX20(first);
+                                                                Log.d(TAG, "isClean開始清洗add: " + first);
+                                                                cleanCount++;
+                                                                return;
+                                                            }
+                                                        }
+
                                                     }
-                                                    cleanPositionNumX20(first);
-                                                    cleanCount++;
-                                                    return;
                                                 }
                                             }
-
-                                        }
-
+                                        },6000);
                                     }
                                 }
                                 break;
@@ -1110,31 +1224,33 @@ public class MyService extends Service {
     }
 
 
-    private void monitoring(String number, int position) {
-        Log.d(TAG, "monitoring: " + number + position);
+    private void monitoring(String number, int position, String isSomeone1) {
+        //   Log.d(TAG, "monitoring: " + number + position);
         synchronized (sCleaningLocationList) {//多线程操作需要加上同步锁
             if ("0".equals(number)) {//
                 //是否加入清洗
-                isClean(position);
+                isClean(position,isSomeone1);
             } else if ("1".equals(number)) {
                 //记录
-                addCleanTime(position);
+                addCleanTime(position,isSomeone1);
             }
+            Log.d(TAG, "isClean開始清洗add信号: 厕所"+position+",信号为:" + number);
+
         }
 //        }
     }
 
-    private void addCleanTime(int number) {
-        Log.d(TAG, "厕所有人开始上厕所了。 ");
+    private void addCleanTime(int number, String isSomeone) {
         /**
          * 1:
          *     将标志位变为0.,如果我为0 就不执行了。避免时间一直更新。
          *     存储当前的时间,到指定的集合中【标志位,0time】
          */
-        Log.d(TAG, "addCleanTime: 为零isCleanaddCleanTime1");
+//        Log.d(TAG, "addCleanTime: 为零isCleanaddCleanTime1");
         HoleInformation holeInformation = sHoleInformationList.get(number - 1);
-        Log.d(TAG, "为零isCleanaddCleanTime11: " + sHoleInformationList.size() + holeInformation.getState());
-        Log.d(TAG, "为零isCleanaddCleanTime12: " + (number - 1));
+        holeInformation.setBodySensor(isSomeone);
+//        Log.d(TAG, "为零isCleanaddCleanTime11: " + sHoleInformationList.size() + holeInformation.getState());
+//        Log.d(TAG, "为零isCleanaddCleanTime12: " + (number - 1));
         if (holeInformation.getState() != 1 && holeInformation.getState() != 3) {
             holeInformation.setState(1);//上厕所
             holeInformation.setTimeDuration(System.currentTimeMillis());//存储他上厕所的时间
@@ -1142,17 +1258,19 @@ public class MyService extends Service {
             if (System.currentTimeMillis() - holeInformation.getTimeDuration() > 10000) {
                 //將其標誌位上過廁所。
                 holeInformation.setState(3);
-                Log.d(TAG, "addCleanTime: 上厕所超过20秒");
+                // Log.d(TAG, "addCleanTime: 上厕所超过20秒");
             } else {
-                Log.d(TAG, "addCleanTime: 上厕所没超过20秒");
+                //  Log.d(TAG, "addCleanTime: 上厕所没超过20秒");
             }
         }
     }
 
     //记录清洗次数
-    private int cleanCount = 0;
+    private volatile int cleanCount = 0;
+
+    private void isClean(int number, String isSomeone) {
 
-    private void isClean(int number) {
+        //为什么在60秒后复位会出现两次复位呢?因为复位过程中有的厕所写入清洗了。所以就会出现问题。【问题不大,就是多复位一次。不影响。】
         /**
          * 0:
          *    如果标志位为0,表示上一次是被上过厕所,根据存储的时间和现在的时间进行对比:
@@ -1166,36 +1284,37 @@ public class MyService extends Service {
          *         什么都不做。
          */
         HoleInformation holeInformation = sHoleInformationList.get(number - 1);
-        Log.d(TAG, "为零isCleanaddCleanTime23: " + sHoleInformationList.size() + holeInformation.getState());
-        Log.d(TAG, "为零isCleanaddCleanTime24: " + (number - 1));
+        holeInformation.setBodySensor(isSomeone);
         int state = holeInformation.getState();
         if (state == 3) {
             holeInformation.setState(4);
             holeInformation.setOutTimeDuration(System.currentTimeMillis());//存储他上厕所的时间
         } else if (holeInformation.getState() == 4) {
-            if (System.currentTimeMillis() - holeInformation.getOutTimeDuration() > 5000) {
+            if (System.currentTimeMillis() - holeInformation.getOutTimeDuration() > 10000) {
                 //上廁所超過20秒,那麼將狀態改為上廁所狀態。
                 Log.d(TAG, "为零isClean: " + sCleaningLocationList.size());
                 if (sCleaningLocationList.size() == 0) {
                     //如果不包含,那么就走这里
                     sCleaningLocationList.addLast(number);
                     Log.d(TAG, "为零isCleannumber4: " + number);
-                    isCleanOK = true;
-                    if (cleanCount >= 10) {
-                        //如果为10,那么就需要复位,并且清零了。
-                        mThreadPoolMyservice.stopWriteMM3();
-                        mThreadPoolMyservice.startWriteMM3("M3");
-                        cleanCount = 0;
-                        Log.d(TAG, "厕所event复位1: " + cleanCount);
-                    } else {
-                        cleanCount++;//
+                    if (last != null) {
+                        if ((last == 1 || last == 2 || last == 3) && (number == 4 || number == 5 || number == 6)) {
+                            Log.d(TAG, "isClean: 開始复位1");
+                            mThreadPoolMyservice.stopWriteMM3();
+                            mThreadPoolMyservice.startWriteMM3("M3");
+                            return;
+                        }
+                    }
+                    cleanCount++;//
+                    if ("1".equals(holeInformation.getBodySensor())) {
+                        sCleaningLocationList.removeFirst();
+                        Log.d(TAG, "holeInformation被移除了。: ");
+                    }else{
                         cleanPositionNumX20(number);
-                        Log.d(TAG, "isClean: " + number);
-                        Log.d(TAG, "addCleanTimeisClean: " + "開始清洗");
                     }
-
+                    Log.d(TAG, "isClean開始清洗add: " + number);
+                    Log.d(TAG, "addCleanTimeisClean: " + "開始清洗");
                 } else {
-                    //todo 这里存在一个问题,就是如果刚好,没有清洗,并且长度大于0呢?存在多线程安全问题
                     //那么我们就需要判断是否在清洗,通过一个标志位。清洗中,清洗完毕
                     int index = 100;
                     for (int i = 0; i < sCleaningLocationList.size(); i++) {
@@ -1207,19 +1326,17 @@ public class MyService extends Service {
                         }
                     }
                     if (index != 100) {
+                        Log.d(TAG, "被移除了4: " + index);
                         sCleaningLocationList.remove(index);//如果移除后等于0,集合大小等于0,那么开始清洗。
                         sCleaningLocationList.addLast(number);
-                        isCleanOK = true;
                     } else {
                         sCleaningLocationList.addLast(number);
-                        isCleanOK = true;
                     }
                     Log.d(TAG, "addCleanTime: 清洗集合個數大於0:");
                 }
-                holeInformation.setState(0);//改为2或者0都可以。
+                holeInformation.setState(2);//改为2或者0都可以。
             } else {
                 Log.d(TAG, "addCleanTime进厕所没超过20秒 ");
-                //   holeInformation.setState(2);//为什么不是1,如果是1,那么
             }
         } else if (holeInformation.getState() == 1) {
             if (holeInformation.getState() != 2) {
@@ -1232,7 +1349,6 @@ public class MyService extends Service {
     private void cleanPositionNumX20(int data) {
         mThreadPoolMyservice.stopWriteDD120();
         mThreadPoolMyservice.startWriteDD120("D120", "000" + data);
-        Log.d(TAG, "cleanPositionNumX20: "+"000" + data);
     }
 
     private boolean isOpenReadWarring = true;
@@ -1439,7 +1555,7 @@ public class MyService extends Service {
                 threadGetParameter1.getValues()[4] = String.valueOf(get177Data(HexadecimalUtil.hex2dec(results.get(6))));
                 threadGetParameter1.getValues()[5] = String.valueOf(get177Data(HexadecimalUtil.hex2dec(results.get(7))));
 
-                Log.d(TAG, "D418setAdvanced: "+results.size());
+                Log.d(TAG, "D418setAdvanced: " + results.size());
             }
         } else if (name.equals("D426")) {
             if (!threadGetParameter1.isReceive1()) {
@@ -1454,13 +1570,13 @@ public class MyService extends Service {
                 threadGetParameter1.getValues()[13] = String.valueOf(HexadecimalUtil.hex2dec(results.get(6)));
                 threadGetParameter1.getValues()[14] = String.valueOf(HexadecimalUtil.hex2dec(results.get(7)));
                 threadGetParameter1.getValues()[15] = String.valueOf(HexadecimalUtil.hex2dec(results.get(8)));
-                Log.d(TAG, "D426setAdvanced: "+results.size());
+                Log.d(TAG, "D426setAdvanced: " + results.size());
             }
         }
     }
 
     private String get177Data(long l) {
-        return String.valueOf(Math.round((l/ Global.num)*10));
+        return String.valueOf(Math.round((l / Global.num) * 10));
     }
 
     public void getDataSuccess() {
@@ -1514,10 +1630,11 @@ public class MyService extends Service {
                                 //不能一直复位,因为如果一直厕所呢?所以我们复位后就需要停止继续执行这里面的内容,等到大于0的时候再进行里面的内容
                                 //在集合移除最后一个的时候我们来一个标志位来解决这个问题。
                                 isReset = false;
-                                //等于0 的时候我们就需要进行复位  todo 复位
+                                resetTime = 60;
+                                //等于0 的时候我们就需要进行复位
                                 mThreadPoolMyservice.stopWriteMM3();
                                 mThreadPoolMyservice.startWriteMM3("M3");
-                                Log.d(TAG, "厕所event复位2: " + cleanCount);
+                                Log.d(TAG, "isClean: 開始清洗2");
                                 return;
                             }
                             resetTime--;

+ 9 - 0
app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterTask.java

@@ -86,10 +86,19 @@ public class AdvanceParameterTask implements Runnable {
             case AdvanceParameterThreadType.runD418:
                 runReadD418();
                 break;
+            case AdvanceParameterThreadType.runD79:
+                runReadD79();
+                break;
 
         }
     }
 
+    private void runReadD79() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("D79", 2), 79, "D79");
+        }
+    }
+
     private void runReadD418() {
         if (getIsRun()) {
             SerialPortSendQueue.sendCommand(new ReadCommandFrame("D418", 16), 18, "D418");

+ 1 - 0
app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterThreadType.java

@@ -11,4 +11,5 @@ public interface AdvanceParameterThreadType {
     int runWrite = 2;
     int runD403 = 403;
     int runD418 = 418;
+    int runD79 = 79;
 }

+ 27 - 5
app/src/main/java/com/sunzee/thread/advanceparameter/ThreadPoolAdvanceParameter.java

@@ -1,5 +1,7 @@
 package com.sunzee.thread.advanceparameter;
 
+import android.util.Log;
+
 import com.sunzee.adapter.AdvanceParameterAdapter;
 
 import java.util.concurrent.ScheduledFuture;
@@ -20,10 +22,12 @@ public class ThreadPoolAdvanceParameter {
     private String[] values = new String[AdvanceParameterAdapter.paraName.length];
 
     private ScheduledFuture<?>
-            mScheduledFutureD426, mScheduledFutureWrite, mScheduledFutureD403, mScheduledFutureD418;
+            mScheduledFutureD426, mScheduledFutureWrite, mScheduledFutureD403, mScheduledFutureD418,
+            mScheduledFutureD79;
 
     private AdvanceParameterTask
-            mTaskRunD426, mTaskRunWrite, mTaskRunD403, mTaskRunD418;
+            mTaskRunD426, mTaskRunWrite, mTaskRunD403, mTaskRunD418,
+            mTaskRunD79;
 
     public ThreadPoolAdvanceParameter() {
         scheduled = new ScheduledThreadPoolExecutor(6);
@@ -47,8 +51,18 @@ public class ThreadPoolAdvanceParameter {
         isReceive2 = receive2;
     }
 
+    public boolean isReceive3() {
+        return isReceive3;
+    }
+
+    public void setReceive3(boolean receive3) {
+        isReceive3 = receive3;
+    }
+
     private boolean isReceive1 = false;
     private boolean isReceive2 = false;
+    private boolean isReceive3 = false;
+
 
     public void startALLRead() {
 
@@ -57,15 +71,20 @@ public class ThreadPoolAdvanceParameter {
 
         mTaskRunD426 = new AdvanceParameterTask(AdvanceParameterThreadType.runD426);
         mScheduledFutureD426 = scheduled.scheduleAtFixedRate(mTaskRunD426, 10, 1000, TimeUnit.MILLISECONDS);
-
+    }
+    public void startReadD79() {
+        mTaskRunD79 = new AdvanceParameterTask(AdvanceParameterThreadType.runD79);
+        mScheduledFutureD79 = scheduled.scheduleAtFixedRate(mTaskRunD79, 10, 1000, TimeUnit.MILLISECONDS);
     }
 
-    public void startReadD403(){
+    public void startReadD403() {
         mTaskRunD403 = new AdvanceParameterTask(AdvanceParameterThreadType.runD403);
         mScheduledFutureD403 = scheduled.scheduleAtFixedRate(mTaskRunD403, 10, 1000, TimeUnit.MILLISECONDS);
     }
 
     public void stopAll() {
+        Log.d("ThreadPoolAdvanceParr", "stopAll:  "+mTaskRunD418);
+//        stopReadD79();
         stopReadD426();
         stopWrite();
         stopReadD403();
@@ -84,6 +103,10 @@ public class ThreadPoolAdvanceParameter {
         stopRead(mTaskRunD403, mScheduledFutureD403);
     }
 
+    public void stopReadD79() {
+        stopRead(mTaskRunD79, mScheduledFutureD79);
+    }
+
     public static void stopRead(AdvanceParameterTask threadTask, ScheduledFuture<?> scheduledFuture1) {
         if (threadTask != null) {
             threadTask.setIsRun(false);
@@ -103,5 +126,4 @@ public class ThreadPoolAdvanceParameter {
     }
 
 
-
 }

+ 11 - 0
app/src/main/java/com/sunzee/thread/debugparameter/DebugParameterTask.java

@@ -5,6 +5,7 @@ import com.hboxs.serialport.frame.ReadCommandFrame;
 import com.hboxs.serialport.frame.RstCommandFrame;
 import com.hboxs.serialport.frame.SetCommandFrame;
 
+import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runM10;
 import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runM1411;
 import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runM320;
 import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runRst;
@@ -98,6 +99,16 @@ public class DebugParameterTask implements Runnable {
             case runM320:
                 runReadM320();
                 break;
+            case runM10:
+                runReadM10();
+                break;
+
+        }
+    }
+
+    private void runReadM10() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("M10", 2), 10, "M10");
         }
     }
 

+ 5 - 2
app/src/main/java/com/sunzee/thread/debugparameter/ThreadPoolDebugParameter.java

@@ -30,7 +30,8 @@ public class ThreadPoolDebugParameter {
             "0", "0", "0", "0", "0", "0", "0",
             "0", "0", "0", "0", "0", "0", "0",
             "0", "0", "0", "0", "0", "0", "0",
-            "0", "0", "0", "0", "0", "0", "0"));
+            "0", "0", "0", "0", "0", "0", "0",
+            "0"));
 
     public ThreadPoolDebugParameter() {
         scheduled = new ScheduledThreadPoolExecutor(7);
@@ -64,9 +65,11 @@ public class ThreadPoolDebugParameter {
         mScheduledFutureM320 = scheduled.scheduleAtFixedRate(mTaskRunM320, 50, 1000, TimeUnit.MILLISECONDS);
 
 
-        //读取喷水泵启动、气泵启动、清洁消毒喷水泵、清洗洁厕灵+水、消毒消毒液+水
+        //读取急停
         mTaskRunM10 = new DebugParameterTask(DebugParameterThreadType.runM10);
         mScheduledFutureM10 = scheduled.scheduleAtFixedRate(mTaskRunM10, 60, 1000, TimeUnit.MILLISECONDS);
+
+
     }
 
     public void stopAll() {

+ 27 - 0
app/src/main/java/com/sunzee/thread/myservice/MyserviceTask.java

@@ -114,8 +114,35 @@ public class MyserviceTask implements Runnable {
             case MyserviceThreadType.runnMM3:
                 runnMM3();
                 break;
+            case  MyserviceThreadType.runSetMM10:
+                runnMM10();
+                break;
+            case MyserviceThreadType.runRstRM10:
+                runnRM10();
+                break;
+            case MyserviceThreadType.runnMMM3:
+                runnMMM3();
+                break;
+
 
+        }
+    }
 
+    private void runnMMM3() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new SetCommandFrame(address), 3, "MM"+address);
+        }
+    }
+
+    private void runnRM10() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new RstCommandFrame(address), 10, "R"+address);
+        }
+    }
+
+    private void runnMM10() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new SetCommandFrame(address), 10, "M"+address);
         }
     }
 

+ 3 - 0
app/src/main/java/com/sunzee/thread/myservice/MyserviceThreadType.java

@@ -14,4 +14,7 @@ public interface MyserviceThreadType {
 
     int runD2= 22;
     int runnMM3 = 33;
+    int runRstRM10 = 10;
+    int runSetMM10 = 101;
+    int runnMMM3 = 333;
 }

+ 35 - 4
app/src/main/java/com/sunzee/thread/myservice/ThreadPoolMyservice.java

@@ -1,5 +1,8 @@
 package com.sunzee.thread.myservice;
 
+import com.sunzee.thread.debugparameter.DebugParameterTask;
+import com.sunzee.thread.debugparameter.DebugParameterThreadType;
+
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -14,13 +17,15 @@ public class ThreadPoolMyservice {
     private ScheduledFuture<?>
             mScheduledFutureM600, mScheduledFutureM8, mScheduledFutureM17,
             mScheduledFutureSet, mScheduledFutureRst, mScheduledFutureWrite,
-            mScheduledFutureD120, mScheduledFutureX12,mScheduledFutureDD120,
-            mScheduledFutureD2,mScheduledFutureM3;
+            mScheduledFutureD120, mScheduledFutureX12, mScheduledFutureDD120,
+            mScheduledFutureD2, mScheduledFutureM3, mScheduledFutureRstRM10,
+            mScheduledFutureSetMM10,mScheduledFutureMMM3;
     private MyserviceTask
             mTaskRunM600, MTaskRunM8, MTaskRunM17,
             mTaskRunMRst, mTaskRunMSet, mTaskRunWrite,
-            mTaskRunD120, mTaskRunnX12,mTaskRunDD120,
-            mTaskRunD2,mTaskRunM3;
+            mTaskRunD120, mTaskRunnX12, mTaskRunDD120,
+            mTaskRunD2, mTaskRunM3,mTaskRunMRstRM10,
+            mTaskRunMSetMM10,mTaskRunMMM3;
 
     public ThreadPoolMyservice() {
         scheduled = new ScheduledThreadPoolExecutor(6);
@@ -148,5 +153,31 @@ public class ThreadPoolMyservice {
         stopReadD2();
     }
 
+    public void startRstRM10(String address) {
+        mTaskRunMRstRM10 = new MyserviceTask(MyserviceThreadType.runRstRM10, address);
+        mScheduledFutureRstRM10 = scheduled.scheduleAtFixedRate(mTaskRunMRstRM10, 10, 1000, TimeUnit.MILLISECONDS);
+    }
+
+    public void startSetMM10(String address) {
+        mTaskRunMSetMM10 = new MyserviceTask(MyserviceThreadType.runSetMM10, address);
+        mScheduledFutureSetMM10 = scheduled.scheduleAtFixedRate(mTaskRunMSetMM10, 10, 1000, TimeUnit.MILLISECONDS);
+
+    }
+
+    public void stopRstRM10() {
+        stopRead(mTaskRunMRstRM10, mScheduledFutureRstRM10);
+    }
+
+    public void stopSetMM10() {
+        stopRead(mTaskRunMSetMM10, mScheduledFutureSetMM10);
+    }
 
+    public void stopSetMMM3() {
+        stopRead(mTaskRunMMM3, mScheduledFutureMMM3);
+    }
+
+    public void startSetMMM3(String address) {
+        mTaskRunMMM3 = new MyserviceTask(MyserviceThreadType.runnMMM3,address);
+        mScheduledFutureMMM3 = scheduled.scheduleAtFixedRate(mTaskRunMMM3, 0, 1000, TimeUnit.MILLISECONDS);
+    }
 }

+ 1 - 1
app/src/main/java/com/sunzee/ui/activity/AdvertisingActivity.java

@@ -162,7 +162,7 @@ public class AdvertisingActivity extends MvpActivity<AdvertisingPresenter> imple
         String[] paraAddress = {
                 "D426", "D427", "D428", "D429",
                 "D430", "D431"};
-        for (int i = 0; i < values.length; i++) {
+        for (int i = 0; i < paraAddress.length; i++) {
             parameterBeans.add(new ParameterBean(paraAddress[i], values[i]));
         }
         mvpPresenter.updateAdvanced(parameterBeans);

+ 0 - 3
app/src/main/java/com/sunzee/ui/activity/HomeActivity.java

@@ -441,9 +441,6 @@ public class HomeActivity extends MvpActivity<HomePresenter> implements HomeView
                             MyService.sCleaningLocationList.clear();
                             for (int i = 0; i < MyService.TOTAL_SUM; i++) {
                                 MyService.sHoleInformationList.add(new HoleInformation(2, 0));//初始化
-
-
-                                // sToiletList.add(i, 1);//初始化,一开始都是没上过厕所的。
                             }
                         }
 

+ 17 - 2
app/src/main/java/com/sunzee/ui/fragment/AdvanceParameterFragment.java

@@ -67,6 +67,8 @@ public class AdvanceParameterFragment extends MvpFragment<AdvanceParameterPresen
         EventBus.getDefault().register(this);
         showLoading();
         mPoolAdvanceParameter.stopAll();
+        mPoolAdvanceParameter.stopReadD79();
+        mPoolAdvanceParameter.startReadD79();
         mPoolAdvanceParameter.startALLRead();
     }
 
@@ -74,6 +76,7 @@ public class AdvanceParameterFragment extends MvpFragment<AdvanceParameterPresen
     public void onDestroyView() {
         EventBus.getDefault().unregister(this);
         mPoolAdvanceParameter.stopAll();
+        mPoolAdvanceParameter.stopReadD79();
         Log.d(TAG, "onDestroyView: ");
         super.onDestroyView();
     }
@@ -93,8 +96,20 @@ public class AdvanceParameterFragment extends MvpFragment<AdvanceParameterPresen
                 showLoading();
                 View v = mRvCrrency.getChildAt(position);
                 if (null != mRvCrrency.getChildViewHolder(v)) {
-                    String data = ByteUtils.decimal2fitHex(Integer.valueOf(text));
-                    mPoolAdvanceParameter.startWrite(paraAddress, HexUtils.hexStr2BinStr(data));
+                    if (position==16){
+                        String data = ByteUtils.decimal2fitHex(Integer.valueOf(text));
+                        if (data.length() % 4 != 0) {
+                            int length = data.length();
+                            for (int i = 0; i < 4 - length; i++) {
+                                data = "0" + data;
+                            }
+                        }
+                        mPoolAdvanceParameter.startWrite(paraAddress, HexUtils.hexStr2BinStr(data));
+                    }else{
+                        String data = ByteUtils.decimal2fitHex(Integer.valueOf(text));
+                        mPoolAdvanceParameter.startWrite(paraAddress, HexUtils.hexStr2BinStr(data));
+                    }
+
                 }
             }
         });

+ 2 - 2
app/src/main/java/com/sunzee/ui/fragment/DebugFragment.java

@@ -104,7 +104,7 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
 
     private void initView(View inflate) {
         mRvDebugList = inflate.findViewById(R.id.rv_degbuglist);
-        mRvDebugList.setItemViewCacheSize(28);
+        mRvDebugList.setItemViewCacheSize(29);
         mDebugParameterAdapter = new DebugParameterAdapter();
         GridLayoutManager layoutManager = new GridLayoutManager(BaseApplication.getContext(), 14, GridLayoutManager.HORIZONTAL, false);
         mRvDebugList.setAdapter(mDebugParameterAdapter);
@@ -120,7 +120,7 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
         mDebugParameterXAdapter = new DebugParameterXAdapter();
         mDebugParameterYAdapter = new DebugParameterYAdapter();
         //缓存多少个才进行重新获取数据呢? 23,24,可以进行设置
-        mRvDebugListX.setItemViewCacheSize(23);
+        mRvDebugListX.setItemViewCacheSize(27);
         mRvDebugListY.setItemViewCacheSize(24);
         mRvDebugListX.setAdapter(mDebugParameterXAdapter);
         mRvDebugListY.setAdapter(mDebugParameterYAdapter);

+ 3 - 0
app/src/main/res/values-en/strings.xml

@@ -479,4 +479,7 @@
     <string name="y_back_zero">Y回零</string>
     <string name="e_back_zero">E回零</string>
     <string name="a_back_zero">A回零</string>
+    <string name="iox1">E轴原位传感器</string>
+    <string name="jerk">急停</string>
+    <string name="pointmove_speed">点动速度</string>
 </resources>

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -480,6 +480,9 @@
     <string name="y_back_zero">Y回零</string>
     <string name="e_back_zero">E回零</string>
     <string name="a_back_zero">A回零</string>
+    <string name="iox1">E轴原位传感器</string>
+    <string name="jerk">急停</string>
+    <string name="pointmove_speed">点动速度</string>
 
 
 </resources>