From 744151cb851a569dfe126a63607902652fc30b5a Mon Sep 17 00:00:00 2001 From: JinHo Kim Date: Tue, 26 Nov 2024 14:02:51 +0900 Subject: [PATCH 1/9] serial baudrate change --- app/modules/avatarbot.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/modules/avatarbot.json b/app/modules/avatarbot.json index 9e55ad445..a7fb006e4 100644 --- a/app/modules/avatarbot.json +++ b/app/modules/avatarbot.json @@ -21,9 +21,9 @@ "hardware": { "type": "serial", "control": "slave", - "duration": 500, + "duration": 50, "vendor": ["Arduino", "wch.cn", "FTDI"], - "baudRate": 460800, + "baudRate": 921600, "lostTimer": 1000, "firmwarecheck": false } From 0ce8d936197da081e8036d55e6213e5aad7f6a52 Mon Sep 17 00:00:00 2001 From: JinHo Kim Date: Mon, 2 Dec 2024 15:36:24 +0900 Subject: [PATCH 2/9] bluetooth ssp function complete --- app/modules/avatarbot.js | 66 +++++++++++++++++++++++++++++++++++-- app/modules/avatarbot.json | 8 ++--- app/modules/avatarbot.png | Bin 4549 -> 28970 bytes 3 files changed, 68 insertions(+), 6 deletions(-) diff --git a/app/modules/avatarbot.js b/app/modules/avatarbot.js index daca5a875..d0b403acf 100644 --- a/app/modules/avatarbot.js +++ b/app/modules/avatarbot.js @@ -203,10 +203,14 @@ slave 모드인 경우 duration 속성 간격으로 지속적으로 기기에 Module.prototype.requestLocalData = function() { var queryString = []; var data = this.remoteDataSet; // Module 객체의 dataset table read. max length 200 + var checksum = 0; for (var index = 0; index < this.avatarBotDataSet; index++) { var query = (data[index])&0xff; queryString.push(query); // 1byte + checksum += query; } + checksum = (checksum)&0xff; + queryString.push(checksum); // 1byte /* for(var i=0; i<(data.length/10); i++) { @@ -222,13 +226,20 @@ Module.prototype.requestLocalData = function() { }; // 하드웨어에서 온 데이터 처리 +/* Module.prototype.handleLocalData = function(data) { var self = this; for (var i = 0; i < data.length; i++) { self.dataSet[self.dataSet_index+i] = data[i]; } - - + console.log('data length ', data.length); + for(var j=0; j<21; j++) + { + let i = j*10; + console.log('data ',i, ': ', self.dataSet[i], self.dataSet[i+1], self.dataSet[i+2], self.dataSet[i+3], self.dataSet[i+4], self.dataSet[i+5], + self.dataSet[i+6], self.dataSet[i+7], self.dataSet[i+8], self.dataSet[i+9]); + } + if(self.dataSet[0] === 0x99 && self.dataSet[1] === 0x01 && self.dataSet[2] === 0x01 && self.dataSet[3] === self.avatarBotDataSet) { self.dataSet_index = self.dataSet_index + data.length; @@ -250,6 +261,57 @@ Module.prototype.handleLocalData = function(data) { }; +*/ +Module.prototype.handleLocalData = function(data) { + var self = this; + // data.length => 211 + var checksum = 0; + var getChecksum = 0; + for (var i = 0; i < data.length; i++) { + if(self.dataSet.length > i) + { + self.dataSet[self.dataSet_index+i] = data[i]; + checksum += data[i]; + }else{ + // last buffer + getChecksum = data[i]; + } + } + + checksum = (checksum)&0xff; + + /* + console.log('data length ', data.length, ', checksum = ', checksum, ', getChecksum = ', getChecksum); + for(var j=0; j<21; j++) + { + let i = j*10; + console.log('data ',i, ': ', self.dataSet[i], self.dataSet[i+1], self.dataSet[i+2], self.dataSet[i+3], self.dataSet[i+4], self.dataSet[i+5], + self.dataSet[i+6], self.dataSet[i+7], self.dataSet[i+8], self.dataSet[i+9]); + } + */ + + if(self.dataSet[0] === 0x99 && self.dataSet[1] === 0x01 && self.dataSet[2] === 0x01 && self.dataSet[3] === self.avatarBotDataSet && getChecksum == checksum) + { + self.dataSet_index = self.dataSet_index + (data.length-1); + }else{ + self.dataSet_index = 0; + return; + } + + if(self.dataSet_index == self.avatarBotDataSet){ + self.originParsing(self.dataSet); + self.dataSet_index = 0; + self.dataSet[0] = 0; // clear + self.dataSet[1] = 0; // clear + self.dataSet[2] = 0; // clear + self.dataSet[3] = 0; // clear + // + // console.log('[jhkim] handleLocalData - dataSet_index[11] = ', self.dataSet[11]); + } + + +}; + /* Original Parsing FF 55 ~ */ Module.prototype.originParsing = function(data) { diff --git a/app/modules/avatarbot.json b/app/modules/avatarbot.json index a7fb006e4..571e03bb1 100644 --- a/app/modules/avatarbot.json +++ b/app/modules/avatarbot.json @@ -19,12 +19,12 @@ "protocol": "json" }, "hardware": { - "type": "serial", + "type": "bluetooth", "control": "slave", - "duration": 50, + "duration": 300, "vendor": ["Arduino", "wch.cn", "FTDI"], - "baudRate": 921600, - "lostTimer": 1000, + "baudRate": 1000000, + "lostTimer": 2000, "firmwarecheck": false } } diff --git a/app/modules/avatarbot.png b/app/modules/avatarbot.png index 1f886c8a28a5f9297e42c49ff74549d7e41c7a8c..abc8a819604c3738f2d63224984355f02f68f177 100644 GIT binary patch literal 28970 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 literal 4549 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 ZEhg(1Djk1|^yc+Kq^YW>@ Date: Thu, 5 Dec 2024 10:54:35 +0900 Subject: [PATCH 3/9] firmware download link del --- app/modules/avatarbot.json | 1 - 1 file changed, 1 deletion(-) diff --git a/app/modules/avatarbot.json b/app/modules/avatarbot.json index 571e03bb1..8f3dd1328 100644 --- a/app/modules/avatarbot.json +++ b/app/modules/avatarbot.json @@ -13,7 +13,6 @@ "translate": "Arduino compatible driver" }, "reconnect" : true, - "firmware": "http://avatarmecha.ddns.net:5050/sharing/iCuhzvxcu", "select_com_port":true, "entry": { "protocol": "json" From 093b7264631c8d4e1d5ac343b980cb32d145f964 Mon Sep 17 00:00:00 2001 From: JinHo Kim Date: Mon, 16 Dec 2024 10:14:27 +0900 Subject: [PATCH 4/9] Servo motor initial angle change --- app/modules/avatarbot.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/modules/avatarbot.js b/app/modules/avatarbot.js index d0b403acf..3f690bb47 100644 --- a/app/modules/avatarbot.js +++ b/app/modules/avatarbot.js @@ -58,12 +58,15 @@ function Module() { Osci: 27000000, Freq: 50 } + this.Board_Servo = { Pulse_Min: 150, Pulse_Max: 600, us_Min: 400, - us_Max: 2100 + us_Max: 2100, + angle: 90 } + this.Board_LED_Strip = { En:0, sample: 0, @@ -133,7 +136,9 @@ Module.prototype.init = function(handler, config) { this.remoteDataSet[index+6] = (this.Board_Servo.us_Min>>8)&0xff; this.remoteDataSet[index+7] = (this.Board_Servo.us_Max)&0xff; - this.remoteDataSet[index+8] = (this.Board_Servo.us_Max>>8)&0xff; + this.remoteDataSet[index+8] = (this.Board_Servo.us_Max>>8)&0xff; + + this.remoteDataSet[index+9] = (this.Board_Servo.angle)&0xff; } // led From 1e574bd6102b290ad8dce1913e1b038cee8c0c81 Mon Sep 17 00:00:00 2001 From: JinHo Kim Date: Mon, 16 Dec 2024 15:11:06 +0900 Subject: [PATCH 5/9] add category [board type] --- app/modules/avatarbot.json | 1 + 1 file changed, 1 insertion(+) diff --git a/app/modules/avatarbot.json b/app/modules/avatarbot.json index 8f3dd1328..9f717ada8 100644 --- a/app/modules/avatarbot.json +++ b/app/modules/avatarbot.json @@ -4,6 +4,7 @@ "en": "AvatarBot", "ko": "AvatarBot" }, + "category": "board", "platform": ["win32", "darwin"], "icon" : "avatarbot.png", "module": "avatarbot.js", From 6c62ff722ee9cfa4da0150991a608164f8c2edd5 Mon Sep 17 00:00:00 2001 From: truedo Date: Tue, 17 Dec 2024 10:24:12 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=EB=A1=9C=EB=B3=B4=EB=A7=81=ED=81=AC=20?= =?UTF-8?q?=EC=A3=BC=EB=AF=B8=20=EB=AF=B8=EB=8B=88=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=97=B0=EA=B2=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 포트 자동 연결 추가 입력 값 수정 --- app/modules/robolink_ZumiMini.js | 10 +++++----- app/modules/robolink_ZumiMini.json | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/modules/robolink_ZumiMini.js b/app/modules/robolink_ZumiMini.js index 27997ada8..48f0b2864 100644 --- a/app/modules/robolink_ZumiMini.js +++ b/app/modules/robolink_ZumiMini.js @@ -247,11 +247,11 @@ class ZumiMini extends BaseModule { this.inputData.pInfo = data[this.INFO]; this.inputData.pSize = data[this.P_SIZE]; this.inputData.pStat = data[this.P_STAT]; - this.inputData.irSensor.FL = data[this.IR]; - this.inputData.irSensor.FR = data[this.IR + 1]; - this.inputData.irSensor.BL = data[this.IR + 2]; - this.inputData.irSensor.BM = data[this.IR + 3]; - this.inputData.irSensor.BR = data[this.IR + 4]; + this.inputData.irSensor.FL = data[this.IR]*4; + this.inputData.irSensor.FR = data[this.IR + 1]*4; + this.inputData.irSensor.BL = data[this.IR + 2]*4; + this.inputData.irSensor.BM = data[this.IR + 3]*4; + this.inputData.irSensor.BR = data[this.IR + 4]*4; this.inputData.faceDetect.DETECT = data[this.FD]; this.inputData.faceDetect.CX = data[this.FD + 1]; this.inputData.faceDetect.CY = data[this.FD + 2]; diff --git a/app/modules/robolink_ZumiMini.json b/app/modules/robolink_ZumiMini.json index c30036100..ba0749563 100644 --- a/app/modules/robolink_ZumiMini.json +++ b/app/modules/robolink_ZumiMini.json @@ -16,7 +16,7 @@ "url": "https://www.robolink.co.kr/", "email": "asteam@robolink.co.kr", "reconnect": true, - "selectPort": true, + "selectPort": false, "hardware": { "type": "serial", "control": "master", @@ -27,7 +27,7 @@ "dataBits": 8, "stopBits": 1, "byteDelimiter": [255, 255], - "vendor": "robolink", + "vendor": ["ROBOLINK", "wch.cn"], "firmwarecheck": false, "bufferSize": 1024, "flowControl": "none" From 362f288a16c014fd5d0b9442fae2ea939762705c Mon Sep 17 00:00:00 2001 From: bigstone77 Date: Tue, 17 Dec 2024 21:37:18 +0900 Subject: [PATCH 7/9] =?UTF-8?q?JDCode=20=EB=B0=8F=20JCBoard=EC=97=90?= =?UTF-8?q?=EC=84=9C=20true=20or=20false=20=EB=B0=98=ED=99=98=EA=B0=92?= =?UTF-8?q?=EC=9D=84=201=20or=200=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/jcboard.js | 4 ++-- app/modules/jdcode.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/modules/jcboard.js b/app/modules/jcboard.js index 17ac30020..950836000 100644 --- a/app/modules/jcboard.js +++ b/app/modules/jcboard.js @@ -73,8 +73,8 @@ Module.prototype.handleLocalData = function(data) { }; Module.prototype.requestRemoteData = function(handler) { - handler.write('A0', !!(this.sensorData[6] & 0x01)); - handler.write('A1', !!(this.sensorData[6] & 0x02)); + handler.write('A0', (this.sensorData[6] & 0x01)!=0? 1 : 0); + handler.write('A1', !!(this.sensorData[6] & 0x02)!=0? 1 : 0); handler.write('A2', this.sensorData[7]); handler.write('A3', this.sensorData[8]); handler.write('A4', this.sensorData[9]); diff --git a/app/modules/jdcode.js b/app/modules/jdcode.js index 0cc9c0e23..87404bb14 100644 --- a/app/modules/jdcode.js +++ b/app/modules/jdcode.js @@ -247,12 +247,12 @@ Module.prototype.handleLocalData = function(data) { }); if(dongleData[1] == (sum&0xFF)){ deviceType = 2; - sensorData[6] = true; + sensorData[6] = 1; sensorData[15] = dongleData[5]; sensorData[7] = dongleData[9]; sensorData[8] = dongleData[7]; sensorData[9] = dongleData[8]; - sensorData[10] = (dongleData[3]&0x03)? false : true; + sensorData[10] = (dongleData[3]&0x03)? 0 : 1; sensorData[16] = dongleData[10]; sensorData[17] = dongleData[11]; sensorData[18] = dongleData[12]; From 6d99dafe3f23f5681a44c1baf4bbac6984a37ebb Mon Sep 17 00:00:00 2001 From: bigstone77 Date: Tue, 17 Dec 2024 21:39:18 +0900 Subject: [PATCH 8/9] =?UTF-8?q?RoboDog=20=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/robodog.js | 175 +++++++++++++++++++++++++++++++++++++++ app/modules/robodog.json | 26 ++++++ app/modules/robodog.png | Bin 0 -> 16076 bytes 3 files changed, 201 insertions(+) create mode 100644 app/modules/robodog.js create mode 100644 app/modules/robodog.json create mode 100644 app/modules/robodog.png diff --git a/app/modules/robodog.js b/app/modules/robodog.js new file mode 100644 index 000000000..142c8f05b --- /dev/null +++ b/app/modules/robodog.js @@ -0,0 +1,175 @@ +function Module() { + this.cmdData = [0x26, 0xA8, 0x14, 0x81, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + this.sensorData = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + this.dongleData = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + this.robodog_head = [0x26, 0xA8, 0x14, 0x8A]; + this.rk_cnt = 0; + this.pktCnt = -1; + this.pktLength = 6; + this.ledPacket = [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]; + this.txCnt = 0; +} + +Module.prototype.init = function(handler, config) { +}; + +Module.prototype.requestInitialData = function() { + return null; +}; + +Module.prototype.checkInitialData = function(data, config) { + return true; +}; + +Module.prototype.validateLocalData = function(data) { + return true; +}; + + + +function checksum(cmd){ + let sum = 0; + + cmd.forEach(function (value, idx) { + if(idx > 5) + sum += value; + }); + return sum&0xFF; +} + + + /////////////// 엔트리에서 받은 데이터에 대한 처리 ///////////////////// +Module.prototype.handleRemoteData = function(handler) { + let cmd = handler.read('CMD'); + + if(typeof cmd !== 'object') + return; + + this.cmdData = cmd.slice(); + if(this.cmdData[14] > 0){ + if(this.cmdData[14] == 2){ + this.ledPacket[0] = (this.cmdData[14]&0xC0) | 0x82; + this.ledPacket[1] = this.ledPacket[1] | 0x80; + for(let n=0; n<16; n++) + this.ledPacket[2+n] = this.cmdData[24+n]; + } + if(this.cmdData[14] == 3){ + this.ledPacket[0] = (this.cmdData[14]&0xC0) | 0x83; + this.ledPacket[1] = this.ledPacket[1] | 0x80; + for(let n=0; n<16; n++) + this.ledPacket[2+n] = this.cmdData[24+n]; + } + if(this.cmdData[14] == 4){ + this.ledPacket[1] = (this.cmdData[14]&0xC0) | 0x44; + this.ledPacket[0] = this.ledPacket[0] | 0x40; + for(let n=0; n<16; n++) + this.ledPacket[18+n] = this.cmdData[24+n]; + } + } + else{ + this.ledPacket[0] = 0; + this.ledPacket[1] = 0; + } +}; + + + //////////////// 하드웨어로 보낼 데이터 로직 ///////////// +Module.prototype.requestLocalData = function() { + if(((this.ledPacket[0]&0xC0) == 0xC0) || ((this.ledPacket[1]&0xC0) == 0xC0)){ + if((this.txCnt%2) == 0){ + this.cmdData[14] = this.ledPacket[0]; + for(let n=0; n<16; n++) + this.cmdData[24+n] = this.ledPacket[2+n]; + } + else{ + this.cmdData[14] = this.ledPacket[1]; + for(let n=0; n<16; n++) + this.cmdData[24+n] = this.ledPacket[18+n]; + } + this.cmdData[5] = checksum(this.cmdData); + this.txCnt += 1; + } + return this.cmdData; +}; + +///////////// 하드웨어에서 온 데이터 처리 /////////////////// +Module.prototype.handleLocalData = function(data) { + let sensorData = this.sensorData; + let dongleData = this.dongleData; + let pktLength = this.pktLength; + + let robodog_head = this.robodog_head; + data.forEach(function (value) { + this.rk_cnt = (value==robodog_head[this.rk_cnt])? this.rk_cnt+1 : 0; + if(this.rk_cnt == 4){ + this.rk_cnt = 0; + this.pktCnt = 0; + } + else if(this.pktCnt >= 0){ + if(this.pktCnt == 0) + pktLength = ((value>0) && (value<19))? value-4 : 16; + dongleData[4+this.pktCnt++] = value; + } + + if(this.pktCnt == pktLength){ + this.pktCnt = -1; + var sum = 0; + dongleData.forEach(function (value, idx) { + if(idx > 5) + sum += value; + }); + if(dongleData[5] == (sum&0xFF)){ + dongleData.forEach(function (value, idx) { + sensorData[idx] = value; + }); + } + } + }); + this.pktLength = pktLength; +}; + +function unsingToSign8(data) +{ + return data>127? data-256 : data; +} +function unsingToSign16(data) +{ + return data>32767? data-65536 : data; +} + +///////////// 엔트리로 전달할 데이터 /////////////////////////// +Module.prototype.requestRemoteData = function(handler) { + handler.write("SENSORDATA", this.sensorData); + handler.write('BATTERY', this.sensorData[6]); + handler.write('TOF', this.sensorData[7]); + handler.write('ROLL', unsingToSign8(this.sensorData[8])); + handler.write('PITCH', unsingToSign8(this.sensorData[9])); + handler.write('YAW', unsingToSign16(this.sensorData[10] + this.sensorData[11]*256)); + handler.write('RB0', this.sensorData[12]>127? this.sensorData[12]-256 : this.sensorData[12]); + handler.write('RB1', this.sensorData[13]>127? this.sensorData[13]-256 : this.sensorData[13]); + handler.write('RB2', this.sensorData[14]>127? this.sensorData[14]-256 : this.sensorData[14]); + handler.write('RB3', this.sensorData[15]>127? this.sensorData[15]-256 : this.sensorData[15]); + handler.write('BUTTON', this.sensorData[16]); + handler.write('RB_WATCHDOG', this.sensorData[17]); + handler.write('RB4', this.sensorData[18]>127? this.sensorData[18]-256 : this.sensorData[18]); + handler.write('RB5', this.sensorData[19]>127? this.sensorData[19]-256 : this.sensorData[19]); +}; + +Module.prototype.reset = function() { + this.cmdData = [0x26, 0xA8, 0x14, 0x81, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64]; + this.sensorData = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; + this.ledPacket = [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]; + console.log("reset"); +}; + +module.exports = new Module(); diff --git a/app/modules/robodog.json b/app/modules/robodog.json new file mode 100644 index 000000000..82cfbc47d --- /dev/null +++ b/app/modules/robodog.json @@ -0,0 +1,26 @@ +{ + "id": "1D0501", + "name": { + "en": "RoboDog", + "ko": "로보독" + }, + "category": "robot", + "platform": ["win32", "darwin"], + "icon": "robodog.png", + "module": "robodog.js", + "url": "http://www.junilab.co.kr", + "driver": { + "win32-ia32": "JuniLab/dongleSetup.bat", + "win32-x64": "JuniLab/dongleSetup.bat" + }, + "reconnect": true, + "hardware": { + "type": "serial", + "control": "slave", + "duration": 32, + "vendor": "Junilab_Inc", + "pnpId": "0226", + "baudRate": 19200, + "firmwarecheck": false + } +} diff --git a/app/modules/robodog.png b/app/modules/robodog.png new file mode 100644 index 0000000000000000000000000000000000000000..592b3163f455970c5a2392b4f4a9e049d5c994fd GIT binary patch literal 16076 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 Date: Tue, 17 Dec 2024 21:49:05 +0900 Subject: [PATCH 9/9] =?UTF-8?q?JDCode=20=EB=B0=8F=20JCBoard=EC=97=90?= =?UTF-8?q?=EC=84=9C=20true=20or=20false=20=EB=B0=98=ED=99=98=EA=B0=92?= =?UTF-8?q?=EC=9D=84=201=20or=200=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/jcboard.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/modules/jcboard.js b/app/modules/jcboard.js index 950836000..bf9260071 100644 --- a/app/modules/jcboard.js +++ b/app/modules/jcboard.js @@ -73,8 +73,8 @@ Module.prototype.handleLocalData = function(data) { }; Module.prototype.requestRemoteData = function(handler) { - handler.write('A0', (this.sensorData[6] & 0x01)!=0? 1 : 0); - handler.write('A1', !!(this.sensorData[6] & 0x02)!=0? 1 : 0); + handler.write('A0', (this.sensorData[6] & 0x01)==0x01? 1 : 0); + handler.write('A1', (this.sensorData[6] & 0x02)==0x02? 1 : 0); handler.write('A2', this.sensorData[7]); handler.write('A3', this.sensorData[8]); handler.write('A4', this.sensorData[9]);