OtherDevice.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857
  1. package com.siwei.recyclebox.deviceUtils;
  2. import android.hardware.usb.UsbManager;
  3. import android.speech.tts.TextToSpeech;
  4. import android.util.Log;
  5. import com.aliyuncs.exceptions.ClientException;
  6. import com.siwei.recyclebox.ui.main.MainViewModel;
  7. import com.hoho.android.usbserial.driver.UsbSerialDriver;
  8. import com.hoho.android.usbserial.driver.UsbSerialPort;
  9. import android.os.Handler;
  10. import java.io.IOException;
  11. import java.util.Spliterator;
  12. import java.util.logging.LogRecord;
  13. import me.goldze.mvvmhabit.utils.SPUtils;
  14. import me.goldze.mvvmhabit.utils.Utils;
  15. /**
  16. * 温度传感器、红外传感器、距离、锁。
  17. */
  18. public class OtherDevice extends BaseDeviceEntity {
  19. private static final String TAG = "OtherDevice";
  20. public OtherDevice(UsbManager usbManager, UsbSerialDriver driver) {
  21. super(usbManager, driver);
  22. }
  23. /**
  24. * 串口的连接参数:
  25. * baudRate: 波特率
  26. * dataBits: 数据位 一般为8
  27. * stopBits: 停止位 一般为1
  28. * parity: 奇偶校验 UsbSerialPort.PARITY_ODD、UsbSerialPort.PARITY_EVEN、UsbSerialPort.PARITY_NONE
  29. */
  30. @Override
  31. int getBaudRate() {
  32. // return 9600;
  33. return 115200;
  34. }
  35. @Override
  36. int getDataBits() {
  37. return UsbSerialPort.DATABITS_8;
  38. }
  39. @Override
  40. int getStopBits() {
  41. return UsbSerialPort.STOPBITS_1;
  42. }
  43. @Override
  44. int getParity() {
  45. return UsbSerialPort.PARITY_NONE;
  46. }
  47. @Override
  48. int getVendorId() {
  49. return 6790;
  50. }
  51. @Override
  52. void onDataReceived(byte[] response) {
  53. //设备回复: AA BB 0C 01 55 01 00 DB FF FF CC DD //距离感应器
  54. if(response.length != 12){
  55. //回报长度不正确
  56. return;
  57. }
  58. if(response[0] == 0xAA && response[1] == 0xBB && response[10] == 0xCC && response[11] == 0xDD){
  59. //正确的包头包尾
  60. switch (response[2]){
  61. case 0x0A://电控锁
  62. break;
  63. case 0x01://距离/温度
  64. }
  65. }
  66. }
  67. public void getRodOpenNumber(){//计算开门次数
  68. String rodNumberStr= SPUtils.getInstance().getString("RodNumber");
  69. if(rodNumberStr.equals("")){
  70. rodNumberStr="0";
  71. }
  72. int rodNumberInt=Integer.parseInt(rodNumberStr)+1;
  73. rodNumberStr=String.valueOf(rodNumberInt);
  74. SPUtils.getInstance().put("RodNumber",rodNumberStr);
  75. Log.i(TAG,"开门次数"+rodNumberStr);
  76. }
  77. public void getLockOpenNumber(){//计算开门次数
  78. String lockNumberStr=SPUtils.getInstance().getString("LockNumber");
  79. if(lockNumberStr.equals("")){
  80. lockNumberStr="0";
  81. }
  82. int lockNumberInt=Integer.parseInt(lockNumberStr)+1;
  83. lockNumberStr=String.valueOf(lockNumberInt);
  84. SPUtils.getInstance().put("LockNumber",lockNumberStr);
  85. Log.i(TAG,"开锁次数"+lockNumberStr);
  86. }
  87. private Handler mHandler=new Handler(msg -> {
  88. return true;
  89. });
  90. /**
  91. * 查询门磁数值
  92. */
  93. public Integer queryMagDoor(){
  94. try {
  95. byte[] pushRodOrderBytes = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x55, 0x04, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  96. port.write(pushRodOrderBytes, 150);//
  97. byte[] response = new byte[12];
  98. int readLen = port.read(response,200);
  99. System.out.println("读取门磁命令:"+ByteUtil.bytesToString(pushRodOrderBytes));
  100. System.out.println("读取门磁返回:"+ByteUtil.bytesToString(response));
  101. if(readLen == 12 && response[5]==4&&response[6]==1/*&& response[0] == 0xAA&&response[1]==0xBB&& response[2]==0x0A&&response[3]==0x01&&response[4]==0x55 && response[5] == 0x03*/){
  102. Log.i(TAG,"response[6] 门磁读取到"+response[6]);
  103. return 0;
  104. }
  105. if(readLen == 12 && response[5]==4&&response[6]==2/*&& response[0] == 0xAA&&response[1]==0xBB&& response[2]==0x0A&&response[3]==0x01&&response[4]==0x55 && response[5] == 0x03*/){
  106. Log.i(TAG,"response[6] 门磁读取到"+response[6]);
  107. return 1;
  108. }
  109. // MainViewModel.reportDeviceEvent("queryMagDoor");
  110. return 3;
  111. }catch ( Exception e ){
  112. e.printStackTrace();
  113. SPUtils.getInstance().put("RunningState",1);
  114. MainViewModel.SendSmsResponse("其他设备未检测到");
  115. Log.e(TAG,"读取门磁错误",e);
  116. return 3;
  117. }
  118. }
  119. /*
  120. * 查询电流过大标志 00 没有 01 有
  121. * */
  122. public Integer queryCurrent(){
  123. try{
  124. // AA BB 0A 01 55 05 FF FF FF FF CC DD 查询电流过大标志 回复00 没有 01 有
  125. port.write(new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x55, 0x05, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD}, 150);//
  126. byte[] response = new byte[12];
  127. int readLen=port.read(response,200);
  128. if(readLen == 12&&response[5]==5){
  129. Log.i(TAG,"电流过大返回值response[6]========"+response[6]);
  130. return (int) response[6];
  131. }
  132. // MainViewModel.reportDeviceEvent("queryCurrent");
  133. return 0;
  134. }catch (Exception e){
  135. e.printStackTrace();
  136. // MainViewModel.reportDeviceEvent("queryCurrent");
  137. Log.e(TAG,"查询电流过大失败");
  138. return 3;
  139. }
  140. }
  141. /*
  142. * 电流过大标志清零
  143. * */
  144. public void clearCurrent(){
  145. try{
  146. port.write(new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x06, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD}, 150);//
  147. }catch (Exception e){
  148. e.printStackTrace();
  149. Log.i(TAG,"电流过大标志清零失败");
  150. }
  151. }
  152. /**
  153. * 查询红外感应器数值
  154. */
  155. public Integer queryInfrared(){
  156. try {
  157. port.write(new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x55, 0x03, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD}, 100);//
  158. byte[] response = new byte[12];
  159. int readLen = port.read(response,200);
  160. System.out.println("读取红外返回:"+ByteUtil.bytesToString(response));
  161. if(readLen == 12 &&response[5]==3&&response[6]==1/*&& response[0] == 0xAA&&response[1]==0xBB&& response[2]==0x0A&&response[3]==0x01&&response[4]==0x55 && response[5] == 0x03*/){
  162. Log.i(TAG,"response[6]"+response[6]);
  163. return (int) 1;
  164. }
  165. if(readLen == 12 &&response[5]==3&&response[6]==2/*&& response[0] == 0xAA&&response[1]==0xBB&& response[2]==0x0A&&response[3]==0x01&&response[4]==0x55 && response[5] == 0x03*/){
  166. Log.i(TAG,"response[6]"+response[6]);
  167. return (int) 2;
  168. }
  169. int num=SPUtils.getInstance().getInt("queryInfraredError");
  170. SPUtils.getInstance().put("queryInfraredError",num+1);
  171. return 0;
  172. }catch ( Exception e ){
  173. Log.e(TAG,"读取红外线读数错误",e);
  174. SPUtils.getInstance().put("RunningState",1);
  175. MainViewModel.SendSmsResponse("其他设备未检测到");
  176. e.printStackTrace();
  177. return 0;
  178. }
  179. }
  180. /*
  181. * 设置电流阈值
  182. * */
  183. public void setPower(){
  184. try {
  185. // byte[] setPower = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x0A, 0x02, 0x60, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  186. byte[] setPower = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x0A, 0x02, 0x44, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  187. port.write(setPower, 500);
  188. byte[] response = new byte[12];
  189. port.read(response,500);
  190. Log.i(TAG,ByteUtil.bytesToString(response)+"设置电流");
  191. }catch(Exception e){
  192. e.printStackTrace();
  193. }
  194. }
  195. public void setPowerBigger(){
  196. try {
  197. // byte[] setPower = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x0A, 0x02, 0x60, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  198. byte[] setPower = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x0A, 0x03, 0x60, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  199. port.write(setPower, 500);
  200. byte[] response = new byte[12];
  201. port.read(response,500);
  202. Log.i(TAG,ByteUtil.bytesToString(response)+"设置电流");
  203. }catch(Exception e){
  204. e.printStackTrace();
  205. }
  206. }
  207. public void queryPower(){
  208. try{
  209. byte[] readPushOrderBytes=new byte[]{(byte)0xAA, (byte) 0xBB,0x0A, 0x01, 0x55 ,0x01 , (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  210. port.write(readPushOrderBytes, 100);
  211. byte[] responseRead = new byte[ 12];
  212. port.read(responseRead,200);
  213. System.out.println("Read response:"+ByteUtil.bytesToString(responseRead));
  214. }catch (Exception e){
  215. e.printStackTrace();
  216. }
  217. }
  218. /**
  219. * 伸杆关门
  220. */
  221. public void pushRod(){//关门
  222. Thread thread = new Thread(new Runnable() {
  223. @Override
  224. public void run() {
  225. try {
  226. SPUtils.getInstance().put("RodSwitch","0");
  227. //门 66后面 01 表示杆 01表示伸杆 1c表示多少秒 02 1c 表示电流
  228. // System.out.println("------------push rod------------------------");
  229. SPUtils.getInstance().put("queryInfraredError",0);
  230. // byte[] setPower = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x0A, 0x02, 0x1C, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  231. // port.write(setPower, 100);
  232. byte[] pushRodOrderBytes = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x01, 0x01,(byte)0x0B, (byte) 0xff, (byte) 0xff, (byte) 0xCC, (byte) 0xDD};
  233. port.write(pushRodOrderBytes, 100);
  234. System.out.println("bytes:"+ByteUtil.bytesToString(pushRodOrderBytes));
  235. // byte[] pushRodOrderBytes2 = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x01, 0x01,0x1c, (byte) 0xFF,0x1c, (byte) 0xCC, (byte) 0xDD};
  236. // port.write(pushRodOrderBytes2, 100);
  237. getRodOpenNumber();
  238. byte[] response = new byte[ 12];
  239. port.read(response,200);
  240. mHandler.postDelayed(new Runnable() {
  241. @Override
  242. public void run() {
  243. byte[] readPushOrderBytes=new byte[]{(byte)0xAA, (byte) 0xBB,0x0A, 0x01, 0x55 ,0x01 , (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  244. try {
  245. port.write(readPushOrderBytes, 100);
  246. byte[] responseRead = new byte[ 12];
  247. port.read(responseRead,200);
  248. System.out.println("pushRead response:"+ByteUtil.bytesToString(responseRead));
  249. } catch (IOException e) {
  250. e.printStackTrace();
  251. }
  252. }
  253. },1000);
  254. System.out.println("push response:"+ByteUtil.bytesToString(response));
  255. SPUtils.getInstance().getInt("infraredNum1",0);
  256. long curr=System.currentTimeMillis();
  257. Thread.sleep(500);
  258. while (System.currentTimeMillis() - curr < 6000) {
  259. Thread.sleep(300);
  260. Integer infrared = queryInfrared();
  261. int ErrorNum=SPUtils.getInstance().getInt("queryInfraredError");
  262. if(ErrorNum>15){
  263. MainViewModel.SendSmsResponse("红外读取失灵");
  264. }
  265. if (infrared == 1) {//有障碍物
  266. //停止关门
  267. Log.i(TAG, "有障碍物,停止关门");
  268. port.write(new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x01, 0x03, (byte) 0x05, (byte) 0xff, (byte) 0xff, (byte) 0xCC, (byte) 0xDD}, 200);
  269. byte[] response3 = new byte[ 12];
  270. port.read(response3,200);
  271. Log.i("停止关门",response3+"");
  272. int num=SPUtils.getInstance().getInt("infraredNum1",0)+1;
  273. SPUtils.getInstance().put("infraredNum1",num);
  274. if(num<3){
  275. mHandler.postDelayed(new Runnable() {
  276. @Override
  277. public void run() {
  278. pushRod();
  279. }
  280. },5000);
  281. break;
  282. }else {
  283. mHandler.postDelayed(new Runnable() {
  284. @Override
  285. public void run() {
  286. try {
  287. port.write(pushRodOrderBytes, 100);
  288. } catch (IOException e) {
  289. e.printStackTrace();
  290. }
  291. }
  292. },5000);
  293. break;
  294. }
  295. }
  296. }
  297. }catch (Exception e ){
  298. e.printStackTrace();
  299. SPUtils.getInstance().put("RunningState",1);
  300. MainViewModel.SendSmsResponse("其他设备未检测到");
  301. Log.i(TAG,"关门失败");
  302. }
  303. }
  304. });
  305. thread.start();
  306. }
  307. /**
  308. * 伸杆开门
  309. */
  310. public void pullRod(){//开门
  311. Thread thread1=new Thread(new Runnable() {
  312. @Override
  313. public void run() {
  314. try {
  315. SPUtils.getInstance().put("infraredNum1",0);
  316. SPUtils.getInstance().put("RodSwitch","1");
  317. //伸杆 66后面 01 表示杆 02表示缩杆 1c表示多少秒 02 1c 表示电流
  318. byte[] pullRodOrderBytes = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x01, 0x02,0x0B, (byte) 0xff, (byte) 0xff, (byte) 0xCC, (byte) 0xDD};
  319. int writeLen = port.write(pullRodOrderBytes, 100);
  320. System.out.println("pullRod "+writeLen);
  321. byte[] response = new byte[12];
  322. port.read(response,200);
  323. mHandler.postDelayed(new Runnable() {
  324. @Override
  325. public void run() {
  326. byte[] readPullOrderBytes=new byte[]{(byte)0xAA, (byte) 0xBB,0x0A, 0x01, 0x55 ,0x01 , (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  327. try {
  328. port.write(readPullOrderBytes, 100);
  329. byte[] responseRead = new byte[ 12];
  330. port.read(responseRead,200);
  331. System.out.println("pullRead response:"+ByteUtil.bytesToString(responseRead));
  332. } catch (IOException e) {
  333. e.printStackTrace();
  334. }
  335. }
  336. },1000);
  337. System.out.println("response:"+ByteUtil.bytesToString(response));
  338. }catch ( Exception e ){
  339. e.printStackTrace();
  340. SPUtils.getInstance().put("RunningState",1);
  341. MainViewModel.SendSmsResponse("其他设备未检测到");
  342. Log.i(TAG,"开门失败");
  343. }
  344. }
  345. });
  346. thread1.start();
  347. }
  348. /**
  349. * 运收门开锁
  350. */
  351. public Integer openLock(){//AA BB 0A 01 66 02 01 07 FF FF CC DD
  352. try {
  353. // byte[] openLockOrderBytes = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x02, 0x01,0x03, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  354. byte[] openLockOrderBytes = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x02, 0x01,0x07, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  355. port.write(openLockOrderBytes,200);
  356. byte[] response=new byte[12];
  357. port.read(response,500);
  358. getLockOpenNumber();
  359. Log.i(TAG,ByteUtil.bytesToString(response)+"开收运门");
  360. if(response[4]==102&&response[5]==2&&response[6]==1){
  361. return 1;
  362. }else {
  363. return 0;
  364. }
  365. }catch ( Exception e ){
  366. e.printStackTrace();
  367. SPUtils.getInstance().put("RunningState",1);
  368. MainViewModel.SendSmsResponse("其他设备未检测到");
  369. Log.i(TAG,"开收运门失败");
  370. return 0;
  371. }
  372. }
  373. /**
  374. * 运收门关锁
  375. */
  376. public Integer closeLock(){
  377. try {
  378. byte[] closeLockOrderBytes = new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0A, 0x01, 0x66, 0x02, 0x02, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  379. port.write(closeLockOrderBytes, 200);
  380. byte[] response=new byte[12];
  381. port.read(response,500);
  382. Log.i(TAG,ByteUtil.bytesToString(response)+"关收运门");
  383. if(response[4]==102&&response[5]==2&&response[6]==2){
  384. return 0;
  385. }else {
  386. return 0;
  387. }
  388. }catch ( Exception e ){
  389. e.printStackTrace();
  390. Log.i(TAG,"关收运门失败");
  391. return 0;
  392. }
  393. }
  394. /**
  395. * 超声波
  396. * 距离
  397. * @return
  398. */
  399. // public Integer getDistance(){
  400. // try {
  401. //// byte[] bytes = new byte[]{(byte)0xAA ,(byte)0xBB ,(byte)0x0C ,(byte)0x01 ,(byte)0x55 ,(byte)0x01 ,(byte)0xFF ,(byte)0xFF,(byte)0xFF ,(byte)0xFF ,(byte)0xCC ,(byte)0xDD};
  402. // //新超声波 01 03 01 02 00 01 24 36
  403. // byte[] bytes = new byte[]{(byte)0xAA ,(byte)0xBB ,(byte)0x01 ,(byte)0x03 ,(byte)0x01 ,(byte)0x02 ,(byte)0x00 ,(byte)0x01,(byte)0x24 ,(byte)0x36 ,(byte)0xCC ,(byte)0xDD};
  404. //// byte[] bytes = new byte[]{(byte)0x01 ,(byte)0x03 ,(byte)0x01 ,(byte)0x02 ,(byte)0x00 ,(byte)0x01 ,(byte)0x24 ,(byte)0x36};
  405. // port.write(bytes,100);
  406. // byte[] response = new byte[12];
  407. // int len = port.read(response,100);
  408. // Log.i(TAG,ByteUtil.bytesToString(response)+len+"距离");
  409. // for (int i:response) {
  410. // Log.i("超声波", ""+response[i]);
  411. // }
  412. // Log.i("超声波", ""+response.toString());
  413. // byte[] disBytes = new byte[4];
  414. // disBytes[2] = response[3];
  415. // disBytes[3] = response[4];
  416. // Log.i(TAG,ByteUtil.bytesToString(disBytes)+"juli");
  417. // int disInt = ByteUtil.bytes2Int(disBytes);
  418. // if(response[4]==85&&response[5]==1){
  419. // return disInt;
  420. // }else {
  421. // SPUtils.getInstance().put("RunningState",5);
  422. // MainViewModel.SendSmsResponse("温度超声波失灵");
  423. // return 0;
  424. // }
  425. // }catch ( Exception e ){
  426. // e.printStackTrace();
  427. // SPUtils.getInstance().put("RunningState",1);
  428. // MainViewModel.SendSmsResponse("其他设备未检测到");
  429. // return 0;
  430. // }
  431. // }
  432. // /**
  433. // * 温度
  434. // * @return
  435. // */
  436. // public Integer geTemperature(){//获取温度
  437. // try{
  438. // byte[] bytes = new byte[]{(byte)0xAA ,(byte)0xBB ,(byte)0x0C ,(byte)0x01 ,(byte)0x55 ,(byte)0x02 ,(byte)0xFF ,(byte)0xFF,(byte)0xFF ,(byte)0xFF ,(byte)0xCC ,(byte)0xDD};
  439. // port.write(bytes,200);
  440. // byte[] response=new byte[12];
  441. // int len=port.read(response,200);
  442. // Log.i(TAG,ByteUtil.bytesToString(response)+len+"温度"+response[4]+response[5]);
  443. // byte[] temBytes=new byte[4];
  444. //// temBytes[2]=response[5];
  445. // temBytes[3]=response[6];
  446. // Integer temInt=ByteUtil.bytes2Int(temBytes);
  447. //// double temDouble=0;
  448. //// if(temInt<65536){
  449. //// temDouble=temInt/10;
  450. //// return temDouble;
  451. //// }
  452. //// temDouble=-(temInt-65536)/10;
  453. //// return temDouble;
  454. // if(response[4]==85&&response[5]==2){
  455. // return temInt;
  456. // }else {
  457. // SPUtils.getInstance().put("RunningState",5);
  458. // MainViewModel.SendSmsResponse("温度超声波失灵");
  459. // return 0;
  460. // }
  461. // }catch ( Exception e ){
  462. // e.printStackTrace();
  463. // SPUtils.getInstance().put("RunningState",1);
  464. // MainViewModel.SendSmsResponse("其他设备未检测到");
  465. // Log.i(TAG,"测温度失败");
  466. // return 0;
  467. // }
  468. // }
  469. /*
  470. * 开灯关灯
  471. * */
  472. public void openLight1(){
  473. try{
  474. //AA BB 0D 01 66 01 01 FF FF FF CC DD
  475. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x01, 0x01, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  476. port.write(bytes,200);
  477. byte[] response=new byte[12];
  478. port.read(response,200);
  479. Log.i(TAG,"openLight1"+ByteUtil.bytesToString(response));
  480. }catch (Exception e){
  481. e.printStackTrace();
  482. Log.i(TAG,"开灯1失败");
  483. }
  484. }
  485. public void closeLight1(){
  486. try{
  487. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x01, 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  488. port.write(bytes,200);
  489. byte[] response=new byte[12];
  490. port.read(response,200);
  491. Log.i(TAG,"closeLight1"+ByteUtil.bytesToString(response));
  492. }catch (Exception e){
  493. e.printStackTrace();
  494. Log.i(TAG,"关灯1失败");
  495. }
  496. }
  497. public void openLight2(){
  498. try{
  499. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x02, 0x01, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  500. port.write(bytes,200);
  501. byte[] response=new byte[12];
  502. port.read(response,200);
  503. Log.i(TAG,"openLight2"+ByteUtil.bytesToString(response));
  504. }catch (Exception e){
  505. e.printStackTrace();
  506. Log.i(TAG,"开灯2失败");
  507. }
  508. }
  509. public void closeLight2(){
  510. try{
  511. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x02, 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  512. port.write(bytes,200);
  513. byte[] response=new byte[12];
  514. port.read(response,200);
  515. Log.i(TAG,"closeLight2"+ByteUtil.bytesToString(response));
  516. }catch (Exception e){
  517. e.printStackTrace();
  518. Log.i(TAG,"关灯2失败");
  519. }
  520. }
  521. public void openLight3(){
  522. try{
  523. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x03, 0x01, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  524. port.write(bytes,200);
  525. byte[] response=new byte[12];
  526. port.read(response,200);
  527. Log.i(TAG,"openLight3"+ByteUtil.bytesToString(response));
  528. }catch (Exception e){
  529. e.printStackTrace();
  530. Log.i(TAG,"开灯3失败");
  531. }
  532. }
  533. public void closeLight3(){
  534. try{
  535. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x03, 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  536. port.write(bytes,200);
  537. byte[] response=new byte[12];
  538. port.read(response,200);
  539. Log.i(TAG,"closeLight3"+ByteUtil.bytesToString(response));
  540. }catch (Exception e){
  541. e.printStackTrace();
  542. Log.i(TAG,"关灯3失败");
  543. }
  544. }
  545. public void openLight4(){
  546. try{
  547. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x04, 0x01, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  548. port.write(bytes,200);
  549. byte[] response=new byte[12];
  550. port.read(response,200);
  551. Log.i(TAG,"openLight4"+ByteUtil.bytesToString(response));
  552. }catch (Exception e){
  553. e.printStackTrace();
  554. Log.i(TAG,"开灯4失败");
  555. }
  556. }
  557. public void closeLight4(){
  558. try{
  559. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB, 0x0D, 0x01, 0x66, 0x04, 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  560. port.write(bytes,200);
  561. byte[] response=new byte[12];
  562. port.read(response,200);
  563. Log.i(TAG,"closeLight4"+ByteUtil.bytesToString(response));
  564. }catch (Exception e){
  565. e.printStackTrace();
  566. Log.i(TAG,"关灯4失败");
  567. }
  568. }
  569. /*
  570. * 称重
  571. * *//*
  572. public Integer readWeight(){
  573. try{
  574. // 主机发送 : AA BB 0B 01 55 FF FF FF FF FF CC DD
  575. // 设备回复: AA BB 0B 01 55 00 00 C9 FF FF CC DD
  576. // 00 00 C9 为数据
  577. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB,0x0B,0x01,0x55,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  578. port.write(bytes,200);
  579. byte[] response=new byte[12];
  580. int len=port.read(response,200);
  581. Log.i(TAG,"返回称重"+ByteUtil.bytesToString(response));
  582. if(response[4]==85) {
  583. byte[] weightBytes = new byte[4];
  584. weightBytes[1] = response[5];
  585. weightBytes[2] = response[6];
  586. weightBytes[3] = response[7];
  587. int weightInt = ByteUtil.bytes2Int(weightBytes);
  588. Log.i(TAG,"称重数为:"+weightInt);
  589. if(weightInt>=16711680){
  590. weightInt=0;
  591. }
  592. return weightInt;
  593. }else {
  594. SPUtils.getInstance().put("RunningState",4);
  595. MainViewModel.SendSmsResponse("readWeight称重失灵");
  596. return 0;
  597. }
  598. }catch(Exception e){
  599. SPUtils.getInstance().put("RunningState",1);
  600. MainViewModel.SendSmsResponse("其他设备未检测到");
  601. e.printStackTrace();
  602. Log.i(TAG,"称重失败");
  603. return 0;
  604. }
  605. }
  606. *//*校准流程:1.设置分度值 2.去皮 3.零度校准 4.放砝码5.砝码校准*//*
  607. *//*
  608. * 设置分度值(几克起跳 精度)
  609. * *//*
  610. public void setScale(){
  611. // 主机发送 : AA BB 0B 01 66 01 61 XX FF FF CC DD XX是分度值 只能是10 20 50 A0 分别是1g 2g 5g 和10g (常规:100kg 误差10g ;200kg误差20g )
  612. // 设备回复: AA BB 0B 01 66 01 61 00 60 FF CC DD
  613. try{
  614. byte[] bytes=new byte[]{(byte) 0xAA,0x0B ,0x01 ,0x66 ,0x01 ,0x61 ,0x10 , (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  615. port.write(bytes,200);
  616. byte[] response=new byte[12];
  617. port.read(response,200);
  618. Log.i(TAG,"返回设置刻度"+ByteUtil.bytesToString(response));
  619. if(response[8]==96){
  620. Log.i(TAG,"设置分度成功");
  621. }
  622. }catch (Exception e){
  623. e.printStackTrace();
  624. Log.i(TAG,"设置刻度失败");
  625. }
  626. }
  627. *//*
  628. * 称重清零去皮
  629. * *//*
  630. public void clearWeight(){
  631. // 主机发送 : AA BB 0B 01 66 01 62 63 FF FF CC DD
  632. // 设备回复: AA BB 0B 01 66 01 62 00 63 FF CC DD
  633. try{
  634. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB,0x0B,0x01,0x66,0x01,0x62,0x63, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  635. port.write(bytes,200);
  636. byte[] response=new byte[12];
  637. port.read(response,200);
  638. Log.i(TAG,"返回清零"+ByteUtil.bytesToString(response));
  639. if(response[8]==99){
  640. Log.i(TAG,"称重清零成功");
  641. }
  642. }catch (Exception e){
  643. e.printStackTrace();
  644. Log.i(TAG,"称重清零去皮失败");
  645. }
  646. }
  647. *//*
  648. * 零度校准
  649. * *//*
  650. public void zeroCalibration(){
  651. // 主机发送 : AA BB 0B 01 66 01 64 65 FF FF CC DD
  652. // 设备回复: AA BB 0B 01 66 01 64 00 65 FF CC DD
  653. try{
  654. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB,0x0B,01,66,01,64,65, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};
  655. port.write(bytes,200);
  656. byte[] response=new byte[12];
  657. port.read(response,200);
  658. Log.i(TAG,"返回零度校准"+ByteUtil.bytesToString(response));
  659. if (response[8]==101){
  660. Log.i(TAG,"零度校准成功");
  661. }
  662. }catch (Exception e){
  663. e.printStackTrace();
  664. Log.i(TAG,"零度校准失败");
  665. }
  666. }
  667. *//*
  668. * 砝码校准
  669. * *//*
  670. public void weightCalibration(){
  671. try{
  672. // 主机发送 : AA BB 0B 01 66 01 65 XX XX FF CC DD XX是校准的砝码 只能是单位g 防8kg 就是8000g 十六进制就是1F40
  673. // 设备回复: AA BB 0B 01 66 01 65 00 64 FF CC DD
  674. byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB,0x0B ,0x01 ,0x66 ,0x01 ,0x65 ,0x00 ,0x64 , (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};//64 100g
  675. // byte[] bytes=new byte[]{(byte) 0xAA, (byte) 0xBB,0x0B ,0x01 ,0x66 ,0x01 ,0x65 ,0x27 ,0x10 , (byte) 0xFF, (byte) 0xCC, (byte) 0xDD};//2710 10000g
  676. port.write(bytes,200);
  677. byte[] response=new byte[12];
  678. port.read(response,200);
  679. Log.i(TAG,"返回砝码校准"+ByteUtil.bytesToString(response));
  680. if(response[8]==100){
  681. Log.i(TAG,"砝码校准成功");
  682. }
  683. }catch (Exception e){
  684. e.printStackTrace();
  685. Log.i(TAG,"砝码校准失败");
  686. }
  687. }
  688. */
  689. public synchronized Integer readWeight(){
  690. try {
  691. // SPUtils.getInstance().put("RunningState","0");//1F 03 00 2A 00 01 A6 7C
  692. port.write(new byte[]{0x1F, 0x03, 0x00, 0x2A,0x00, 0x01, (byte) 0xA6, 0x7C},150);//称重器读取数值的请求
  693. // port.write(new byte[]{(byte) 0xAA, (byte) 0xBB,0x0C ,0x01 ,0x55 , (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD},150);//称重器读取数值的请求
  694. // port.write(new byte[]{(byte) 0xAA, (byte) 0xBB,0x0C ,0x02 ,0x55 , (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xCC, (byte) 0xDD},150);//超声波读取数值的请求
  695. // Thread.sleep(100);
  696. byte[] response = new byte[7];
  697. port.read(response,200);
  698. Log.i(TAG,"返回称重"+ByteUtil.bytesToString(response));
  699. if(response[1]==3) {
  700. long curTimeMiles = System.currentTimeMillis();
  701. int num=0,a=0;
  702. while (System.currentTimeMillis()-curTimeMiles<200){
  703. port.read(response,10);
  704. byte[] weightBytes = new byte[4];
  705. weightBytes[2] = response[3];
  706. weightBytes[3] = response[4];
  707. int weightInt = ByteUtil.bytes2Int(weightBytes);
  708. // weightInt=weightInt*5*2;
  709. num += (weightInt * 5 * 2);
  710. a++;
  711. Log.i("while","********"+a);
  712. }
  713. Log.i("num",num+"****"+a+"");
  714. byte[] weightBytes = new byte[4];
  715. weightBytes[2] = response[3];
  716. weightBytes[3] = response[4];
  717. int weightInt = ByteUtil.bytes2Int(weightBytes);
  718. weightInt=weightInt*5*2;
  719. System.out.println("称重读数:"+weightInt);
  720. int weightNumber=num/a++;
  721. if(weightInt>=327670){
  722. weightNumber=0;
  723. }
  724. return (int) weightNumber;
  725. }else {
  726. Log.i("返回称重","错误");
  727. SPUtils.getInstance().put("RunningState",1);
  728. MainViewModel.SendSmsResponse("readWeight称重失灵");
  729. return 1;
  730. }
  731. // int readLen = port.read(response,200);
  732. // System.out.println("readweight len:"+readLen+" bytes;"+ByteUtil.bytesToString(response));
  733. // return 1;
  734. //
  735. }catch ( Exception e ){
  736. e.printStackTrace();
  737. SPUtils.getInstance().put("RunningState",1);
  738. MainViewModel.SendSmsResponse("readWeight称重设备未检测到");
  739. Log.e(TAG,"读取称重器读数错误",e);
  740. return 1;
  741. }
  742. }
  743. /* *
  744. * 读数清零
  745. */
  746. public synchronized void weightClear(){
  747. byte[] cleanOrderBytes = new byte[]{0x1F,0x06 ,0x00 ,0x24,0x00 ,0x00, (byte) 0xCA,0x7F};
  748. System.out.println("称重器读数清零!!!!!");
  749. try {
  750. port.write(cleanOrderBytes,150);
  751. } catch (IOException e) {
  752. e.printStackTrace();
  753. }
  754. }
  755. /** 设置分度值
  756. * */
  757. public synchronized void setScale(){
  758. byte[] cleanOrderBytes = new byte[]{0x1F, 0x06 ,0x00 ,0x04 ,0x00 ,0x01 ,0x0A ,0x75};
  759. try {
  760. port.write(cleanOrderBytes,150);
  761. Log.i(TAG,"设置分度值");
  762. } catch (IOException e) {
  763. e.printStackTrace();
  764. }
  765. }
  766. /* * 空载
  767. * */
  768. public synchronized void zeroCalibration(){
  769. byte[] cleanOrderBytes = new byte[]{0x1F ,0x10 ,0x00 ,0x08 ,0x00 ,0x02 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00 , (byte) 0x92,0x21 };
  770. try {
  771. port.write(cleanOrderBytes,150);
  772. Log.i(TAG,"空载");
  773. } catch (IOException e) {
  774. e.printStackTrace();
  775. }
  776. }
  777. /* * 量程设定
  778. * */
  779. public synchronized void weightSet(){
  780. byte[] cleanOrderBytes = new byte[]{0x1F ,0x10 ,0x00 ,0x00 ,0x00 ,0x02 ,0x04 , 0x27, 0x10,0x00 ,0x00 , (byte) 0x98, (byte) 0xF6};
  781. try {
  782. port.write(cleanOrderBytes,150);
  783. Log.i(TAG,"l量程设定");
  784. } catch (IOException e) {
  785. e.printStackTrace();
  786. }
  787. }
  788. /** 砝码校准
  789. * */
  790. public synchronized void weightCalibration(){
  791. byte[] cleanOrderBytes = new byte[]{0x1F ,0x10 ,0x00 ,0x10 ,0x00 ,0x02 ,0x04 ,0x27 ,0x10 ,0x00 ,0x00, (byte) 0x96, (byte) 0xE4};
  792. try {
  793. port.write(cleanOrderBytes,150);
  794. Log.i(TAG,"砝码校准kg");
  795. } catch (IOException e) {
  796. e.printStackTrace();
  797. }
  798. }
  799. }