dropfoot.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. const app = getApp()
  2. //main
  3. Page({
  4. //Data
  5. data: {
  6. OnlyReadOne: null, // OnlyOneCheackStateMents
  7. receiveText: '', // explain ReciveMesage
  8. connectedDeviceId: '',// BLE_List_ID
  9. service_uuid: '', // BLE_UUID
  10. workstate: false, // 工作状态
  11. target: 1, // 强度
  12. current: 5, // 时间
  13. mode: 1, // 模式
  14. Rworkstate: 0, // 工作状态
  15. Rtarget: 0, // 强度
  16. Rcurrent1: 0, // 分
  17. Rcurrent2: 0, // 秒
  18. Rmode: 0, // 模式
  19. RBattery: 0, // 电量
  20. LastSendingTime: 0,
  21. timeInterval:1000,
  22. DisplayBLEconflag: 0, //show ble offline
  23. tisrc: "/subpagesTwo/images/zmdevice/target1.png",
  24. tisrc1: "/subpagesTwo/images/zmdevice/target1.png",
  25. tisrc2: "/subpagesTwo/images/zmdevice/target.png",
  26. cisrc: "/subpagesTwo/images/zmdevice/current.png",
  27. cisrc1: "/subpagesTwo/images/zmdevice/current1.png",
  28. cisrc2: "/subpagesTwo/images/zmdevice/current.png",
  29. tcisc: 1,
  30. ccisc: 0,
  31. },
  32. //响应强度按键
  33. handleClick(e) {
  34. var that = this;
  35. const value = e.currentTarget.dataset.value;
  36. this.setData({
  37. mode: value,
  38. });
  39. if (this.data.workstate) {
  40. this.setData({
  41. workstate: false
  42. });
  43. setTimeout(() => {
  44. this.setData({
  45. workstate: true
  46. });
  47. that.setDevdata(that,true);
  48. }, 500);
  49. }
  50. // 这里可以添加其他逻辑
  51. console.log('当前值:', value);
  52. }, setDevdata(that,flag=false) {
  53. var timestamp = new Date().getTime();
  54. if ( !flag&&(that.data.LastSendingTime !== 0 && timestamp - that.data.LastSendingTime < that.data.timeInterval)) {
  55. console.log('发送间隔小于500ms')
  56. return
  57. }
  58. that.data.LastSendingTime = timestamp
  59. // Makeup Inquire Message
  60. // 0B 4D(帧头)
  61. // 01(设备id)
  62. // 10(写)
  63. // 00 70(命令字)
  64. // 00 02(命令个数)
  65. // 04(数据个数)
  66. // WorkState(工作状态) Vvalue(强度) Tvalue(时间) 模式(mode)
  67. // CRCL CRCH (校验)
  68. // 1C 0D(帧尾)
  69. var temp_data_send = new Array(0x01, 0x10, 0x00, 0x70, 0x00, 0x02, 0x04,
  70. that.data.workstate, that.data.current, that.data.target, that.data.mode);
  71. let temp_crc = app.CRC16(temp_data_send)
  72. temp_data_send.push(temp_crc[0]);
  73. temp_data_send.push(temp_crc[1]);
  74. // Add HeadTail
  75. var senddata = new ArrayBuffer(17);
  76. let bufferview = new DataView(senddata);
  77. bufferview.setUint8(0, 0x0b);
  78. bufferview.setUint8(1, 0x4d);
  79. for (var i = 0; i < 13; i++) {
  80. bufferview.setUint8([i + 2], temp_data_send[i]);
  81. }
  82. bufferview.setUint8(15, 0x1c);
  83. bufferview.setUint8(16, 0x0d);
  84. let RecoedData = senddata
  85. // console.log("==========================", that.data.target)
  86. wx.writeBLECharacteristicValue({
  87. deviceId: that.data.connectedDeviceId,
  88. serviceId: that.data.service_uuid,
  89. characteristicId: "0003CDD2-0000-1000-8000-00805F9B0131",
  90. value: RecoedData,
  91. success: function (res) {
  92. console.log('查询发送')
  93. },
  94. fail: function (err) {
  95. console.log(err, '查询发送失败')
  96. }
  97. })
  98. },
  99. // init
  100. onLoad: function (options) {
  101. var that = this;
  102. that.setData({
  103. connectedDeviceId: options.connectedDeviceId,
  104. OnlyReadOne: null,
  105. service_uuid: options.serviceId,
  106. OnlyReadOne: setInterval(function () {
  107. that.setDevdata(that);
  108. }, that.data.timeInterval),
  109. })
  110. // 检测连接
  111. wx.onBLEConnectionStateChange(function (res) {
  112. console.log(res.connected)
  113. if (res.connected == 0 && that.data.DisplayBLEconflag == 0) {
  114. wx.showModal({
  115. title: '提示',
  116. content: '设备已断开',
  117. showCancel: false,
  118. success: function (res) {
  119. that.setData({
  120. connected: false,
  121. workstate: 0
  122. })
  123. }
  124. })
  125. }
  126. that.setData({
  127. connected: res.connected,
  128. })
  129. })
  130. wx.onBLECharacteristicValueChange(function (res) {
  131. console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`)
  132. that.setData({
  133. receiveText: app.ab2hex(res.value)
  134. })
  135. let seceiver_buff = new Uint8Array(res.value);
  136. for (let i = 0; i < seceiver_buff.length; i++) {
  137. console.log(seceiver_buff[i].toString(16).padStart(2, '0') + ' ');
  138. }
  139. //开始处理蓝牙返回指令
  140. for (var i = 0; i < (seceiver_buff.length - 10); i++) {
  141. if (seceiver_buff[i] == 0x0b) {
  142. if ((seceiver_buff[i + 1] == 0x4d) && (seceiver_buff[i + 2] == 0x01) && (seceiver_buff[i + 3] == 0x10) && (seceiver_buff[i + 4] == 0x00) && (seceiver_buff[i + 5] == 0x70) && (seceiver_buff[i + 6] == 0x00) && (seceiver_buff[i + 7] == 0x03) && (seceiver_buff[i + 8] == 0x06)) {
  143. if ((seceiver_buff[i + 17] == 0x1C) && (seceiver_buff[i + 18] == 0x0D)) {
  144. let dataToVerify = seceiver_buff.subarray(i + 2, i + 15); //索引2-14
  145. let calculatedCRC = app.CRC16(dataToVerify);
  146. if (calculatedCRC[0] == seceiver_buff[i + 15] && calculatedCRC[1] == seceiver_buff[i + 16]) {
  147. that.setData({
  148. connected: true,
  149. Rworkstate: seceiver_buff[i + 10], // 工作状态
  150. Rtarget: seceiver_buff[i + 11], // 强度
  151. target: seceiver_buff[i + 11],
  152. Rcurrent1: seceiver_buff[i + 12], // 分
  153. Rcurrent2: seceiver_buff[i + 13], // 秒
  154. Rmode: seceiver_buff[i + 9], // 模式
  155. RBattery: seceiver_buff[i + 14], // 电量
  156. })
  157. // console.log("收到数据:");
  158. // console.log("设备模式:",seceiver_buff[i+9]);
  159. // console.log("设备状态:",seceiver_buff[i+10]);
  160. // console.log("设备挡位:",seceiver_buff[i+11]);
  161. break;
  162. }
  163. } else {
  164. continue
  165. }
  166. } else {
  167. continue
  168. }
  169. } else {
  170. continue
  171. }
  172. }
  173. })
  174. },
  175. //开始停止
  176. Send: function () {
  177. var that = this
  178. if (that.data.workstate == false) {
  179. that.setData({
  180. workstate: true
  181. })
  182. } else {
  183. that.setData({
  184. workstate: false
  185. })
  186. }
  187. this.setDevdata(that,true);
  188. },
  189. // 强度
  190. VoltagecheckboxChange: function (e) {
  191. if (e.detail.value != "") {
  192. this.setData({
  193. tcisc: 1, ccisc: 0,
  194. tisrc: this.data.tisrc1,
  195. cisrc: this.data.cisrc2,
  196. });
  197. } else {
  198. this.setData({tcisc: 0, tisrc: this.data.tisrc2});
  199. }
  200. this.setDevdata(this,true);
  201. },
  202. // 时间
  203. currentcheckboxChange: function (e) {
  204. if (e.detail.value != "") {
  205. this.setData({
  206. ccisc: 1, tcisc: 0,
  207. cisrc: this.data.cisrc1,
  208. tisrc: this.data.tisrc2,
  209. });
  210. } else {
  211. this.setData({ccisc: 0, cisrc: this.data.cisrc2});
  212. }
  213. this.setDevdata(this,true);
  214. },
  215. //左键
  216. leftTouchEnd: function (event) {
  217. var that = this;
  218. if (this.data.workstate == true) {
  219. if (that.data.tcisc == 1) {
  220. if (that.data.target > 1) {
  221. that.setData({
  222. target: that.data.target - 1,
  223. });
  224. this.setDevdata(that,true);
  225. } else {
  226. console("强度越界");
  227. return;
  228. }
  229. } else if (that.data.ccisc == 1) {
  230. if (that.data.current > 5) {
  231. that.setData({
  232. current: that.data.current - 5,
  233. });
  234. this.setDevdata(that,true);
  235. } else {
  236. console.log("时间越界");
  237. return;
  238. }
  239. } else {
  240. console.log("选择出错");
  241. return;
  242. }
  243. } else {
  244. wx.showModal({
  245. title: '提示',
  246. content: '设备未开始工作',
  247. showCancel: false,
  248. success: function (res) {
  249. that.setData({})
  250. }
  251. })
  252. }
  253. },
  254. //右键
  255. rightTouchEnd: function (event) {
  256. var that = this;
  257. if (this.data.workstate == true) {
  258. if (that.data.tcisc == 1) {
  259. if (that.data.target < 30) {
  260. that.setData({
  261. target: that.data.target + 1,
  262. });
  263. this.setDevdata(that,true);
  264. } else {
  265. console.log("强度越线");
  266. return;
  267. }
  268. } else if (that.data.ccisc == 1) {
  269. if (that.data.current < 20) {
  270. that.setData({
  271. current: that.data.current + 5,
  272. });
  273. this.setDevdata(that,true);
  274. } else {
  275. console.log("时间越线");
  276. return;
  277. }
  278. } else {
  279. console.log("选择失败");
  280. return;
  281. }
  282. } else {
  283. wx.showModal({
  284. title: '提示',
  285. content: '设备未开始工作',
  286. showCancel: false,
  287. success: function (res) {
  288. that.setData({})
  289. }
  290. })
  291. }
  292. },
  293. onReady: function () {
  294. },
  295. onShow: function () {
  296. var that = this;
  297. if (that.data.connected == false) {
  298. clearInterval(this.data.OnlyReadOne);
  299. }
  300. },
  301. onHide: function () {
  302. },
  303. onUnload: function () {
  304. this.data.DisplayBLEconflag = 1,
  305. // 关查询定时
  306. clearInterval(this.data.OnlyReadOne)
  307. // 关蓝牙连接
  308. wx.closeBLEConnection({
  309. deviceId: this.data.connectedDeviceId,
  310. success(res) {
  311. console.log(res)
  312. }
  313. })
  314. },
  315. // Back to Search
  316. handlerGobackClick(delta) {
  317. wx.navigateBack({
  318. delta: 2
  319. });
  320. },
  321. })