Browse Source

1.自动清洗厕所。
2.调试页数据的读取优化。

Tony 5 years ago
parent
commit
4559569ea3

+ 1 - 0
app/build.gradle

@@ -52,6 +52,7 @@ dependencies {
     //黄油刀
     implementation 'com.android.support:appcompat-v7:28.0.0'
     implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+    testImplementation 'junit:junit:4.12'
     annotationProcessor "com.jakewharton:butterknife-compiler:$butterknifeVersion"
     //retrofit2
     implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"

+ 14 - 0
app/src/main/java/com/sunzee/adapter/DebugParameterAdapter.java

@@ -1,15 +1,19 @@
 package com.sunzee.adapter;
 
+import android.annotation.SuppressLint;
 import android.support.annotation.NonNull;
 import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.CheckBox;
 
 import com.sunzee.R;
+import com.sunzee.utils.PreventSpeedClickUtil;
+import com.sunzee.utils.ToastUtil;
 import com.wuxiaolong.androidutils.library.LogUtil;
 
 import java.util.HashMap;
@@ -62,8 +66,18 @@ public class DebugParameterAdapter extends RecyclerView.Adapter<DebugParameterAd
     public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
         viewHolder.cbManual.setText(paraName[i]);
         viewHolder.cbManual.setOnClickListener(new View.OnClickListener() {
+            @SuppressLint("ResourceAsColor")
             @Override
             public void onClick(View view) {
+                //防止快速点击
+                if (!PreventSpeedClickUtil.isFastClick()) {
+                    ToastUtil.showToast("点击过快!!!");
+                    CheckBox checkBox = (CheckBox) view;
+                    checkBox.setChecked(!checkBox.isChecked());
+                    return;
+                }
+                Log.d(TAG, "onClick: "+i);
+
                 listener.onItemListener(view, i, paraAddress[i]);
             }
         });

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

@@ -15,20 +15,17 @@ public class DebugParameterXAdapter extends RecyclerView.Adapter<RecyclerView.Vi
     private final int NORMAL = 1;
 
     private int[] datas = {
-            R.string.iox2, R.string.iox3, R.string.iox4,
-            R.string.iox5, R.string.iox7, R.string.iox10,
-            R.string.iox11, R.string.iox12, R.string.iox13,
-            R.string.iox14, R.string.iox15, R.string.iox16,
-            R.string.iox17, 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.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,
     };
     private String[] address = {
-            "02", "03", "04", "05", "07",
+            "03", "04", "05", "07",
             "10", "11", "12", "13", "14",
             "15", "16", "17", "20", "21",
-            "22", "23", "24", "25", "26",
-            "27",
+            "22", "23", "24", "25", "26","27"
     };
 
     public void setItemListener(ItemMaintainClickListener listener) {

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

@@ -19,7 +19,7 @@ public class DebugParameterYAdapter extends RecyclerView.Adapter<RecyclerView.Vi
             R.string.ioy5,R.string.ioy6, R.string.ioy7,R.string.ioy10, R.string.ioy11,
             R.string.ioy12,R.string.ioy13,R.string.ioy14,R.string.ioy15,R.string.ioy16,
             R.string.ioy17, R.string.ioy20,R.string.ioy21,R.string.ioy22,R.string.ioy23,
-            R.string.ioy24,R.string.ioy25,
+            R.string.ioy24,R.string.ioy25,R.string.iox12,R.string.ioy27
 
     };
     private String[] address = {
@@ -27,7 +27,7 @@ public class DebugParameterYAdapter extends RecyclerView.Adapter<RecyclerView.Vi
             "05","06", "07", "10", "11",
             "12","13", "14", "15", "16",
             "17","20", "21", "22", "23",
-            "24","25"
+            "24","25","26","27"
     };
 
     public void setItemListener(DebugParameterYAdapter.ItemMaintainClickListener listener) {

+ 59 - 27
app/src/main/java/com/sunzee/mvp/debug/DebugPresenter.java

@@ -33,7 +33,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"));
 
     public void setDebugParameter(String name, ArrayList<String> results, ThreadPoolDebugParameter threadGetParameter1) {
         if (name.equals("M311")) {
@@ -41,8 +41,6 @@ public class DebugPresenter extends BasePresenter<DebugView> {
                 threadGetParameter1.setReceive1(true);
                 threadGetParameter1.stopReadM311();
                 //参数19 D218
-                threadGetParameter1.getValues().set(0, results.get(7));
-                threadGetParameter1.getValues().set(1, results.get(8));
                 threadGetParameter1.getValues().set(2, results.get(9));
                 threadGetParameter1.getValues().set(3, results.get(11));
                 threadGetParameter1.getValues().set(4, results.get(12));
@@ -50,11 +48,25 @@ public class DebugPresenter extends BasePresenter<DebugView> {
                 threadGetParameter1.getValues().set(6, results.get(14));
                 LogUtil.d(TAG, "setDebugParameter: " + threadGetParameter1.getValues());
             }
+        } else if (name.equals("M320")) {
+            if (!threadGetParameter1.isReceive2()) {
+                threadGetParameter1.setReceive2(true);
+                threadGetParameter1.stopReadM320();
+                //参数19 D218
+                threadGetParameter1.getValues().set(7, results.get(0));
+                threadGetParameter1.getValues().set(8, results.get(1));
+                threadGetParameter1.getValues().set(9, results.get(2));
+                threadGetParameter1.getValues().set(10, results.get(3));
+                threadGetParameter1.getValues().set(11, results.get(4));
+                threadGetParameter1.getValues().set(12, results.get(5));
+                LogUtil.d(TAG, "setDebugParameter: " + threadGetParameter1.getValues());
+            }
         }
-        if (threadGetParameter1.isReceive1()) {
+        if (threadGetParameter1.isReceive1() && threadGetParameter1.isReceive2()) {
             mvpView.getDataSuccess();
             mvpView.hideLoading();
             threadGetParameter1.setReceive1(false);
+            threadGetParameter1.setReceive2(false);
         }
     }
 
@@ -62,7 +74,9 @@ public class DebugPresenter extends BasePresenter<DebugView> {
         //通过校验
         int id = messageEvent.getId();
         String name = messageEvent.getName();
-        if (id == 311) {
+        if (id == 1411) {
+            // 不需要读取数据。
+        } else if (id == 320) {
             Log.d(TAG, "event: " + name);
             ArrayList<String> results = HexadecimalUtil.flipString(result);
             //    转成2进制
@@ -73,6 +87,20 @@ public class DebugPresenter extends BasePresenter<DebugView> {
             ArrayList<String> list = new ArrayList(lis);
             list.remove(0);
             setDebugParameter(name, list, poolDebugParameter);
+        } else if (id == 311) {
+            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);
+            for (String s2 : list) {
+                Log.d(TAG, "311setData: " + s2);
+            }
+            setDebugParameter(name, list, poolDebugParameter);
 
         } else if (id == 1 || id == 2) {
             List<String> strList = HexadecimalUtil.getStrList(result, 4);
@@ -88,28 +116,30 @@ public class DebugPresenter extends BasePresenter<DebugView> {
             List<String> list1 = Arrays.asList(sb.toString().split(""));
             ArrayList<String> list2 = new ArrayList(list1);
             list2.remove(0);
+            for (String s : list2) {
+                Log.d(TAG, "list2setData: "+s);
+            }
             if ("X0".equals(name)) {
-                listX.set(0, list2.get(2));
-                listX.set(1, list2.get(3));
-                listX.set(2, list2.get(4));
-                listX.set(3, list2.get(5));
-                listX.set(4, list2.get(7));
-                listX.set(5, list2.get(8));
-                listX.set(6, list2.get(9));
-                listX.set(7, list2.get(10));
-                listX.set(8, list2.get(11));
-                listX.set(9, list2.get(12));
-                listX.set(10, list2.get(13));
-                listX.set(11, list2.get(14));
-                listX.set(12, list2.get(15));
-                listX.set(13, list2.get(16));
-                listX.set(14, list2.get(17));
-                listX.set(15, list2.get(18));
-                listX.set(16, list2.get(19));
-                listX.set(17, list2.get(20));
-                listX.set(18, list2.get(21));
-                listX.set(19, list2.get(22));
-                listX.set(20, list2.get(23));
+                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));
                 mvpView.setXStatu(listX);
             } else if ("Y0".equals(name)) {
                 listY.set(0, list2.get(0));
@@ -134,10 +164,12 @@ public class DebugPresenter extends BasePresenter<DebugView> {
                 listY.set(19, list2.get(19));
                 listY.set(20, list2.get(20));
                 listY.set(21, list2.get(21));
+                listY.set(22, list2.get(22));
+                listY.set(23, list2.get(23));
                 mvpView.setYStatu(listY);
                 Log.d(TAG, list2.size() + "setYStatu: " + list2);
             }
             mvpView.hideLoading();
         }
     }
-}
+}

+ 1 - 1
app/src/main/java/com/sunzee/mvp/debug/DebugView.java

@@ -9,7 +9,7 @@ import java.util.ArrayList;
  */
 public interface DebugView extends BaseView {
     /**
-     * M300读取成功 
+     * M300读取成功
      */
     void getDataSuccess();
 

+ 73 - 35
app/src/main/java/com/sunzee/service/MyService.java

@@ -94,9 +94,12 @@ public class MyService extends Service {
     private boolean isRegularCleaning = false;
     private ThreadPoolAdvanceParameter mPoolAdvanceParameter = new ThreadPoolAdvanceParameter();
     private final static int TOTAL_SUM = 6;
-    private static List<HoleInformation> sHoleInformationList = new CopyOnWriteArrayList<>();//存储X20的信息
+
+    //存储两个数据:是否上过厕所,一开始上厕所的时间是什么时候
+    private static List<HoleInformation> sHoleInformationList = new CopyOnWriteArrayList<>();
+    private static LinkedList<Integer> sCleaningLocationList = new LinkedList<>();//存储要清洗的位置。
+
     private static List<Integer> sToiletList = new CopyOnWriteArrayList<>();//存储是否上过厕所 0表示上过,1表示没有。2表示没有状态。
-    private static LinkedList<String> sCleaningLocationList = new LinkedList<>();//存储要清洗的位置。
 
     @Nullable
     @Override
@@ -111,7 +114,7 @@ public class MyService extends Service {
         EventBus.getDefault().register(this);
         for (int i = 0; i < TOTAL_SUM; i++) {
             sHoleInformationList.add(i, new HoleInformation(2, 0));//初始化
-            sToiletList.add(i, 1);//初始化,一开始都是没上过厕所的。
+            // sToiletList.add(i, 1);//初始化,一开始都是没上过厕所的。
         }
     }
 
@@ -924,6 +927,9 @@ public class MyService extends Service {
                     mThreadPoolMyservice.stopWriteD120();
                     mThreadPoolMyservice.stopSetM8();
                     mThreadPoolMyservice.startSetM8();
+                } else if (messageEvent.getName().equals("DD120")) {
+                    mThreadPoolMyservice.stopWriteDD120();
+                    Log.d(TAG, "DD120event: ");
                 } else if (messageEvent.getName().equals("M17")) {
                     mThreadPoolMyservice.stopSetM17();
                     if (isRegularCleaning) {
@@ -975,39 +981,15 @@ public class MyService extends Service {
                         }
                     } else if (name.equals("X20")) {
                         String results = HexadecimalUtil.hexStringToByte(AsciiUtils.asciiByteArray2HexStr(responseFrame.getData()));
-                        String s1 = HexadecimalUtil.flipString(results, 8).substring(0, TOTAL_SUM);//6个厕所蹲位
-                        char[] chars = s1.toCharArray();
-                        for (int i = 0; i < sHoleInformationList.size(); i++) {
-                            HoleInformation holeInformation = sHoleInformationList.get(i);
-                            //只有不相同的时候才会进行写入。所以这个时候我们是需要更新时间而已,上厕所或不上厕所
-                            if (holeInformation.getState()!=chars[i]) {
-                                //再写入数据
-                                holeInformation.setState(chars[i]);
-                                holeInformation.setTimeDuration(System.currentTimeMillis());
-                                ///sToiletList.get(i)
-                            }else{
-                                //这里我就想要判断是否需要进行写入清洗厕所。
-                                if (chars[i]==0) {
-
-                                } else if (chars[i] ==1) {
-                                    //需要判断之前是否上过厕所
-                                    if (sToiletList.get(i) == 0) {
-                                        //说明上过,那么需要判断是否为1超过30秒,这个如何判断呢?
-                                        //存储的状态肯定是0的,因为刚刚切换过来。所以这个判断应该在没有切换的时候进行。也就是这个就是清洗
-
-                                    }else{
-                                        //说明没闪过
-                                    }
-                                }
-                            }
-
+                        String s1 = HexadecimalUtil.flipString(results, 6).substring(0, TOTAL_SUM);//6个厕所蹲位
+                        List<String> list = Arrays.asList(s1.split(""));
+                        ArrayList<String> result = new ArrayList(list);
+                        result.remove(0);
+                        if ("0".equals(result.get(0))) {
+                            isClean(0);
+                        } else if ("1".equals(result.get(0))) {
+                            addCleanTime(0);
                         }
-                        /*List<String> allState = Arrays.asList(s1);
-                        for (int i = 0; i < allState.size(); i++) {
-                            Integer state = Integer.valueOf(allState.get(i));
-
-                        }*/
-
                     } else {
                         //通过校验
                         Log.d(TAG, "event: " + name);
@@ -1021,6 +1003,62 @@ public class MyService extends Service {
         }
     }
 
+    private void addCleanTime(int number) {
+        Log.d(TAG, "厕所有人开始上厕所了。 ");
+        /**
+         * 1:
+         *     将标志位变为0.,如果我为0 就不执行了。避免时间一直更新。
+         *     存储当前的时间,到指定的集合中【标志位,0time】
+         */
+        HoleInformation holeInformation = sHoleInformationList.get(number);
+        if (holeInformation.getState() != 1) {
+            holeInformation.setState(1);//上厕所
+            holeInformation.setTimeDuration(System.currentTimeMillis());//存储他上厕所的时间
+        }
+    }
+
+    private void isClean(int number) {
+        /**
+         * 0:
+         *    如果标志位为0,表示上一次是被上过厕所,根据存储的时间和现在的时间进行对比:
+         *         超过20秒:【如果为1不判断是否超过20秒】
+         *             表示没人在上厕所,那么判断是否上次为0,如果为0,那么就存储到集合里面开始清洗。
+         *                                                    如果为1,那么就什么都不做。
+         *         没超过20秒:
+         *             表示重新厕所了。
+         *         设置一个变量存储为1,表示一直为1,没人。
+         *     如果标志位为1,表示一直没上厕所
+         *         什么都不做。
+         */
+        HoleInformation holeInformation = sHoleInformationList.get(number);
+        Log.d(TAG, "x20event: " + holeInformation.toString());
+        int state = holeInformation.getState();
+        if (state != 0) {
+            if (state == 1) {
+                Log.d(TAG, "厕所event: " + holeInformation.getTimeDuration());
+                Log.d(TAG, "厕所event: " + System.currentTimeMillis());
+                if (System.currentTimeMillis() - holeInformation.getTimeDuration() > 20000) {
+                    if (sCleaningLocationList.size() == 0) {
+                        //开始清洗厕所。
+                        sCleaningLocationList.add(0);//如果里面已经有了,那么就不需要在加入了。
+                        cleanPositionNumX20(number);
+                    } else {
+
+                    }
+                    holeInformation.setState(0);//改为2或者0都可以。
+                } else {
+                    Log.d(TAG, "厕所没有超过20秒: ");
+                    holeInformation.setState(2);//为什么不是1,如果是1,那么
+                }
+            }
+        }
+    }
+
+    private void cleanPositionNumX20(int data) {
+        mThreadPoolMyservice.stopWriteDD120();
+        mThreadPoolMyservice.startWriteDD120("D120", "000" + data);
+    }
+
     private boolean isOpenReadWarring = true;
     private List<String> errorListM600;
     //前进阻碍

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

@@ -5,6 +5,8 @@ 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.runM1411;
+import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runM320;
 import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runRst;
 import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runSet;
 import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runX;
@@ -90,7 +92,25 @@ public class DebugParameterTask implements Runnable {
             case runY:
                 runY();
                 break;
+            case runM1411:
+                runReadM1411();
+                break;
+            case runM320:
+                runReadM320();
+                break;
+
+        }
+    }
 
+    private void runReadM320() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("M320", 2), 320, "M320");
+        }
+    }
+
+    private void runReadM1411() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("M1411", 2), 1411, "M1411");
         }
     }
 

+ 2 - 0
app/src/main/java/com/sunzee/thread/debugparameter/DebugParameterThreadType.java

@@ -2,6 +2,8 @@ package com.sunzee.thread.debugparameter;
 
 public interface DebugParameterThreadType {
     int runM311 = 11;
+    int runM1411 = 111;
+    int runM320 = 320;
 
 
     int runRst = 0;

+ 39 - 3
app/src/main/java/com/sunzee/thread/debugparameter/ThreadPoolDebugParameter.java

@@ -14,17 +14,21 @@ public class ThreadPoolDebugParameter {
     private ScheduledThreadPoolExecutor scheduled;
 
     private ScheduledFuture<?>
-            mScheduledFutureM311, mScheduledFutureRst, mScheduledFutureSet,
+            mScheduledFutureM1411, mScheduledFutureM311, mScheduledFutureRst, mScheduledFutureSet,
             mScheduledFutureX, mScheduledFutureY;
     private DebugParameterTask
-            mTaskRunM311, mTaskRunMRst, mTaskRunMSet,
+            mTaskRunM1411, mTaskRunM311, mTaskRunMRst, mTaskRunMSet,
             mTaskRunX, mTaskRunY;
+    private DebugParameterTask mTaskRunM320;
+    private ScheduledFuture<?> mScheduledFutureM320;
 
     public ArrayList<String> getValues() {
         return values;
     }
 
-    private ArrayList<String> values = new ArrayList<>(Arrays.asList("0", "0", "0", "0", "0", "0", "0"));
+    private ArrayList<String> values = new ArrayList<>(Arrays.asList(
+            "0", "0", "0", "0", "0", "0", "0",
+            "0", "0", "0", "0", "0", "0"));
 
     public ThreadPoolDebugParameter() {
         scheduled = new ScheduledThreadPoolExecutor(7);
@@ -38,39 +42,71 @@ public class ThreadPoolDebugParameter {
      * 读取全部参数
      */
     public void startALLRead() {
+        //读取 A轴正转 A轴反转
+        mTaskRunM1411 = new DebugParameterTask(DebugParameterThreadType.runM1411);
+        mScheduledFutureM1411 = scheduled.scheduleAtFixedRate(mTaskRunM1411, 0, 1000, TimeUnit.MILLISECONDS);
+
+        //读取喷水泵启动、气泵启动、清洁消毒喷水泵、清洗洁厕灵+水、消毒消毒液+水
         mTaskRunM311 = new DebugParameterTask(DebugParameterThreadType.runM311);
         mScheduledFutureM311 = scheduled.scheduleAtFixedRate(mTaskRunM311, 10, 1000, TimeUnit.MILLISECONDS);
 
+        //X的信号
         mTaskRunX = new DebugParameterTask(DebugParameterThreadType.runX);
         mScheduledFutureX = scheduled.scheduleAtFixedRate(mTaskRunX, 30, 1000, TimeUnit.MILLISECONDS);
 
         mTaskRunY = new DebugParameterTask(DebugParameterThreadType.runY);
         mScheduledFutureY = scheduled.scheduleAtFixedRate(mTaskRunY, 40, 1000, TimeUnit.MILLISECONDS);
+
+        //读取喷水泵启动、气泵启动、清洁消毒喷水泵、清洗洁厕灵+水、消毒消毒液+水
+        mTaskRunM320 = new DebugParameterTask(DebugParameterThreadType.runM320);
+        mScheduledFutureM320 = scheduled.scheduleAtFixedRate(mTaskRunM320, 50, 1000, TimeUnit.MILLISECONDS);
+
+
     }
 
     public void stopAll() {
+        stopReadM1411();
         stopReadM311();
+        stopReadM320();
         stopRst();
         stopSet();
         stopReadX();
         stopReadY();
     }
 
+
     public void setReceive1(boolean receive1) {
         isReceive1 = receive1;
     }
 
     private boolean isReceive1 = false;
+    private boolean isReceive2 = false;
+
+    public boolean isReceive2() {
+        return isReceive2;
+    }
+
+    public void setReceive2(boolean receive2) {
+        isReceive2 = receive2;
+    }
 
     public boolean isReceive1() {
         return isReceive1;
     }
 
     //-------------------------------------------stop read-----------------------------------------------------
+    public void stopReadM320() {
+        stopRead(mTaskRunM320, mScheduledFutureM320);
+    }
+
     public void stopReadM311() {
         stopRead(mTaskRunM311, mScheduledFutureM311);
     }
 
+    public void stopReadM1411() {
+        stopRead(mTaskRunM1411, mScheduledFutureM1411);
+    }
+
     public void stopReadX() {
         stopRead(mTaskRunX, mScheduledFutureX);
     }

+ 10 - 1
app/src/main/java/com/sunzee/thread/myservice/MyserviceTask.java

@@ -104,6 +104,9 @@ public class MyserviceTask implements Runnable {
             case MyserviceThreadType.runD120:
                 runWriteD120();
                 break;
+            case MyserviceThreadType.runDD120:
+                runWriteDD120();
+                break;
             case runX20:
                 runX20();
 
@@ -113,9 +116,15 @@ public class MyserviceTask implements Runnable {
         }
     }
 
+    private void runWriteDD120() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new WriteCommandFrame(address, HexUtils.hexStr2BinStr(data)), 120, "D"+address);
+        }
+    }
+
     private void runX20() {
         if (getIsRun()) {
-            SerialPortSendQueue.sendCommand(new ReadCommandFrame("X20", 8), 20, "X20");
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("X20", 4), 20, "X20");
         }
     }
 

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

@@ -10,4 +10,5 @@ public interface MyserviceThreadType {
     int runWrite = 2;
     int runD120 = 120;
     int runX20 = 20;
+    int runDD120 = 121;
 }

+ 12 - 2
app/src/main/java/com/sunzee/thread/myservice/ThreadPoolMyservice.java

@@ -18,11 +18,11 @@ public class ThreadPoolMyservice {
     private ScheduledFuture<?>
             mScheduledFutureM600, mScheduledFutureM8, mScheduledFutureM17,
             mScheduledFutureSet, mScheduledFutureRst, mScheduledFutureWrite,
-            mScheduledFutureD120, mScheduledFutureX20;
+            mScheduledFutureD120, mScheduledFutureX20,mScheduledFutureDD120;
     private MyserviceTask
             mTaskRunM600, MTaskRunM8, MTaskRunM17,
             mTaskRunMRst, mTaskRunMSet, mTaskRunWrite,
-            mTaskRunD120, mTaskRunnX20;
+            mTaskRunD120, mTaskRunnX20,mTaskRunDD120;
 
     public ThreadPoolMyservice() {
         scheduled = new ScheduledThreadPoolExecutor(6);
@@ -53,6 +53,15 @@ public class ThreadPoolMyservice {
         mScheduledFutureRst = scheduled.scheduleAtFixedRate(mTaskRunMRst, 0, 1000, TimeUnit.MILLISECONDS);
     }
 
+    public void startWriteDD120(String paraAddress, String data) {
+        mTaskRunDD120 = new MyserviceTask(MyserviceThreadType.runDD120, paraAddress, data);
+        mScheduledFutureDD120 = scheduled.scheduleAtFixedRate(mTaskRunDD120, 0, 1000, TimeUnit.MILLISECONDS);
+    }
+
+    public void stopWriteDD120() {
+        stopRead(mTaskRunDD120, mScheduledFutureDD120);
+    }
+
     public void startWriteD120(String paraAddress, String data) {
         mTaskRunD120 = new MyserviceTask(MyserviceThreadType.runD120, paraAddress, data);
         mScheduledFutureD120 = scheduled.scheduleAtFixedRate(mTaskRunD120, 0, 1000, TimeUnit.MILLISECONDS);
@@ -119,6 +128,7 @@ public class ThreadPoolMyservice {
         stopSetM8();
         stopSetM17();
         stopWriteD120();
+        stopWriteDD120();
         stopReadX20();
     }
 

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

@@ -1,5 +1,6 @@
 package com.sunzee.ui.fragment;
 
+import android.annotation.SuppressLint;
 import android.app.ProgressDialog;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
@@ -29,6 +30,7 @@ import com.sunzee.mvp.debug.DebugView;
 import com.sunzee.thread.debugparameter.ThreadPoolDebugParameter;
 import com.sunzee.utils.CustomDecoration;
 import com.sunzee.utils.PreventSpeedClickUtil;
+import com.sunzee.utils.ToastUtil;
 import com.sunzee.utils.UiUtil;
 
 import org.greenrobot.eventbus.EventBus;
@@ -49,7 +51,7 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
     private RecyclerView mRvDebugListY;
     private DebugParameterXAdapter mDebugParameterXAdapter;
     private DebugParameterYAdapter mDebugParameterYAdapter;
-    private PreventSpeedClickUtil mPreventSpeedClickUtil;
+
 
     @Nullable
     @Override
@@ -85,10 +87,6 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
         mDebugParameterAdapter.setItemListener(new DebugParameterAdapter.ItemParaClickListener() {
             @Override
             public void onItemListener(View view, int position, String address) {
-                //防止快速点击
-                if (!mPreventSpeedClickUtil.isFastClick()) {
-                    return;
-                }
                 showLoading();
                 //点击的时候就开始写入
                 //final String address = paraAddress[position];
@@ -124,7 +122,6 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
         mRvDebugListY.setItemViewCacheSize(24);
         mRvDebugListX.setAdapter(mDebugParameterXAdapter);
         mRvDebugListY.setAdapter(mDebugParameterYAdapter);
-        mPreventSpeedClickUtil = new PreventSpeedClickUtil();
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
@@ -164,18 +161,19 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
     public void getDataSuccess() {
         getValue(mPoolDebugParameter.getValues());
     }
+
     @Override
     public void setXStatu(ArrayList<String> list2) {
         for (int i = 0; i < list2.size(); i++) {
-            getXValue(list2,i,i,mRvDebugListX);
+            getXValue(list2, i, i, mRvDebugListX);
         }
     }
 
     @Override
     public void setYStatu(ArrayList<String> list2) {
-        Log.d(TAG, "setYStatu: "+list2);
+        Log.d(TAG, "setYStatu: " + list2);
         for (int i = 0; i < list2.size(); i++) {
-            getYValue(list2,i,i,mRvDebugListY);
+            getYValue(list2, i, i, mRvDebugListY);
         }
     }
 
@@ -189,7 +187,7 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
     private void getXValue(final List<String> lis, final int index, int position, RecyclerView recyclerView) {
         //通过RecyclerView getChildAt();是不能正确获取item的view的,前几个获取可能还是正常的,往后滑后面的获取就不正常了
         //View view = recyclerView.getChildAt(position+1);
-        View view = recyclerView.getLayoutManager().findViewByPosition(position+1);
+        View view = recyclerView.getLayoutManager().findViewByPosition(position + 1);
         if (view == null) {
             Log.d("空1", "getXYValue: p=" + position + "  index=" + index);
         } else {
@@ -204,6 +202,7 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
 
 
     }
+
     /**
      * 改变对应的状态
      *
@@ -212,7 +211,7 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
      * @param position 要改变的图片的位置
      */
     private void getYValue(final List<String> lis, final int index, int position, RecyclerView recyclerView) {
-        View view = recyclerView.getLayoutManager().findViewByPosition(position+1);
+        View view = recyclerView.getLayoutManager().findViewByPosition(position + 1);
         if (view == null) {
             Log.d("空1", "getXYValue: p=" + position + "  index=" + index);
         } else {
@@ -233,12 +232,17 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
      *
      * @param value
      */
+    @SuppressLint("ResourceAsColor")
     private void getValue(ArrayList<String> value) {
         //311-318
         for (int i = 0; i < value.size(); i++) {
             View view = mRvDebugList.getChildAt(i);
             if (null != mRvDebugList.getChildViewHolder(view)) {
                 DebugParameterAdapter.ViewHolder viewHolder = (DebugParameterAdapter.ViewHolder) mRvDebugList.getChildViewHolder(view);
+                if (i==1||i ==0) {
+                    viewHolder.cbManual.setChecked(!viewHolder.cbManual.isChecked());
+                    continue;
+                }
                 if (!value.get(i).equals("0")) {
                     //当它为选择状态时,无需设置,避免闪硕
                     if (!viewHolder.cbManual.isChecked()) {
@@ -249,6 +253,7 @@ public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugV
                         viewHolder.cbManual.setChecked(false);
                     }
                 }
+
             }
         }
 

+ 1 - 1
app/src/main/res/layout/item_debugparameter.xml

@@ -16,6 +16,6 @@
         android:gravity="center"
         android:textColor="@drawable/selector_manual_tv_color"
         android:textSize="@dimen/sp_6"
-        
+
         android:layout_marginRight="@dimen/dp_10"/>
 </LinearLayout>

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

@@ -598,5 +598,6 @@
     <string name="hole_lamp4">蹲位4工作灯</string>
     <string name="hole_lamp5">蹲位5工作灯</string>
     <string name="hole_lamp6">蹲位6工作灯</string>
+    <string name="ioy27">Z轴电磁阀</string>
 
 </resources>

+ 62 - 0
app/src/test/java/com/sunzee/ExampleUnitTest.java

@@ -1,9 +1,71 @@
 package com.sunzee;
 
+import android.util.Log;
+
+import com.sunzee.model.HoleInformation;
+
+import org.junit.Test;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
 /**
  * Example local unit test, which will execute on the development machine (host).
  *
  * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  */
 public class ExampleUnitTest {
+    private static final String TAG = "Test";
+    public static char[] chars = {0, 0, 0, 0, 0, 0};
+    //存储两个数据:是否上过厕所,一开始上厕所的时间是什么时候
+    private static List<HoleInformation> sHoleInformationList = new CopyOnWriteArrayList<>();
+    private static LinkedList<Integer> sCleaningLocationList = new LinkedList<>();//存储要清洗的位置。
+    private static int sum = 0;
+    @Test
+    public void test(){
+        for (int i = 0; i < 6; i++) {
+            sHoleInformationList.add(i, new HoleInformation(2, 0));//初始化
+        }
+
+        while (true) {
+            sum++;
+            System.out.println(sum);
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            if (sum == 15) {
+                sum = 0;
+                chars[0] = 1;
+            } else {
+                chars[0] = 0;
+            }
+            if (chars[0] == 1) {
+                HoleInformation holeInformation = sHoleInformationList.get(0);
+                int state = holeInformation.getState();
+                if (state != 1) {
+                    if (state == 0) {
+                        if (System.currentTimeMillis() - holeInformation.getTimeDuration() > 20000) {
+                            //开始清洗厕所。
+                            sCleaningLocationList.add(0);
+                            System.out.println("出来厕所。");
+                        } else {
+                            System.out.println("又上厕所了。");
+                        }
+                    }
+                }else{
+                    //说明是第一次,还没上厕所。
+                }
+            } else {
+                HoleInformation holeInformation = sHoleInformationList.get(0);
+                if (holeInformation.getState() != 0) {
+                    holeInformation.setState(0);//上厕所
+                    holeInformation.setTimeDuration(System.currentTimeMillis());//存储他上厕所的时间
+                }
+                System.out.println("在上厕所。");
+            }
+        }
+    }
 }