Skip to content

Commit a571387

Browse files
committed
first commit
1 parent 5360612 commit a571387

File tree

15 files changed

+370
-0
lines changed

15 files changed

+370
-0
lines changed

EV3BT-blockly.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
+(function (window, webduino) {
2+
3+
'use strict';
4+
5+
window.getEV3BT = function (board, rx, tx) {
6+
return new webduino.module.EV3BT(board, rx, tx);
7+
};
8+
9+
}(window, window.webduino));

EV3BT.js

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
+(function(factory) {
2+
if (typeof exports === 'undefined') {
3+
factory(webduino || {});
4+
} else {
5+
module.exports = factory;
6+
}
7+
}(function(scope) {
8+
'use strict';
9+
10+
var self;
11+
var proto;
12+
var Module = scope.Module;
13+
14+
function getMessage(m) {
15+
var text = "";
16+
for (var i = 3; i < m.length; i++) {
17+
text += String.fromCharCode(m[i]);
18+
}
19+
var cutPos = text.indexOf(' ');
20+
var title = text.substring(0, cutPos);
21+
text = text.substring(cutPos + 1);
22+
return [title, text];
23+
}
24+
25+
function EV3BT(board, rx, tx) {
26+
Module.call(this);
27+
this._board = board;
28+
self = this;
29+
self.callback = {};
30+
self.title = '';
31+
self.content = '';
32+
self._rx = rx;
33+
self._tx = tx;
34+
board.send([0xF0, 0x04, 0x23, 0x04 /*init*/ , rx, tx, 0xF7]);
35+
board.on(webduino.BoardEvent.SYSEX_MESSAGE, function(event) {
36+
var m = event.message;
37+
if (m[0] == 0x04 && m[1] == 0x23) {
38+
var msg = getMessage(m);
39+
self.msgType = m[2];
40+
self.title = msg[0];
41+
self.content = msg[1];
42+
if (self.msgType == 1) {
43+
self.content = self.content == '1' ? true : false;
44+
}
45+
var callbackList = self.callback[self.title];
46+
for (var cb in callbackList) {
47+
callbackList[cb](self.content);
48+
}
49+
}
50+
});
51+
}
52+
53+
EV3BT.prototype = proto = Object.create(Module.prototype, {
54+
constructor: {
55+
value: EV3BT
56+
}
57+
});
58+
59+
proto.on = function(title, callback) {
60+
if (self.callback[title] == null) {
61+
self.callback[title] = [];
62+
}
63+
self.callback[title].push(callback);
64+
}
65+
66+
proto.sendLogic = function(title, b) {
67+
var cmd = [0xF0, 0x04, 0x23, 0x01, title.length];
68+
var data = title;
69+
var dataLen = data.length;
70+
for (var i = 0; i < dataLen; i++) {
71+
cmd.push(data.charCodeAt(i));
72+
}
73+
var b = b.toString().toLowerCase() == 'true' ? true : false;
74+
cmd.push(b ? 0x31 : 0x30);
75+
cmd.push(0xF7);
76+
this._board.send(cmd);
77+
}
78+
79+
proto.sendNumber = function(title, num) {
80+
var cmd = [0xF0, 0x04, 0x23, 0x02, title.length];
81+
var data = title + num;
82+
var dataLen = data.length;
83+
for (var i = 0; i < dataLen; i++) {
84+
cmd.push(data.charCodeAt(i));
85+
}
86+
cmd.push(0xF7);
87+
this._board.send(cmd);
88+
}
89+
90+
proto.sendText = function(title, txt) {
91+
var cmd = [0xF0, 0x04, 0x23, 0x03, title.length];
92+
var data = title + txt;
93+
var dataLen = data.length;
94+
for (var i = 0; i < dataLen; i++) {
95+
cmd.push(data.charCodeAt(i));
96+
}
97+
cmd.push(0xF7);
98+
this._board.send(cmd);
99+
}
100+
101+
scope.module.EV3BT = EV3BT;
102+
}));

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# webduino-module-ev3bt
2+
3+
Webduino Module for EV3BT.
4+
5+
6+
## Installation
7+
8+
```shell
9+
bower install https://github.com/webduinoio/webduino-module-ev3bt.git
10+
```
11+
12+
## License
13+
14+
This project is licensed under the MIT license, see [LICENSE](LICENSE) for more information.

blockly.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"types": ["ev3bt_new", "ev3bt_sendmsg", "ev3bt_getmsg", "ev3bt_recv"],
3+
"category": "catMenu1",
4+
"scripts": [
5+
"blockly/blocks.js",
6+
"blockly/javascript.js"
7+
],
8+
"dependencies": [
9+
"EV3BT.js",
10+
"EV3BT-blockly.js"
11+
],
12+
"msg": "blockly/msg",
13+
"blocksMsg": "blockly/msg/blocks",
14+
"toolbox": "blockly/toolbox.xml"
15+
}

blockly/blocks.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
Blockly.Blocks['ev3bt_new'] = {
2+
init: function() {
3+
this.appendDummyInput()
4+
.appendField(Blockly.Msg.WEBDUINO_EV3BT, "樂高EV3 , Rx ")
5+
.appendField(new Blockly.FieldDropdown([
6+
["2", "2"],
7+
["3", "3"],
8+
["4", "4"],
9+
["5", "5"],
10+
["6", "6"],
11+
["7", "7"],
12+
["8", "8"],
13+
["9", "9"],
14+
["10", "10"],
15+
["11", "11"],
16+
["12", "12"],
17+
["13", "13"]
18+
]), "rx_")
19+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_TX, " Tx")
20+
.appendField(new Blockly.FieldDropdown([
21+
["2", "2"],
22+
["3", "3"],
23+
["4", "4"],
24+
["5", "5"],
25+
["6", "6"],
26+
["7", "7"],
27+
["8", "8"],
28+
["9", "9"],
29+
["10", "10"],
30+
["11", "11"],
31+
["12", "12"],
32+
["13", "13"]
33+
]), "tx_");
34+
this.setOutput(true);
35+
this.setColour(230);
36+
this.setTooltip('');
37+
this.setHelpUrl('https://webduino.io');
38+
}
39+
};
40+
41+
//https://blockly-demo.appspot.com/static/demos/blockfactory_old/index.html#v8h6ui
42+
Blockly.Blocks['ev3bt_sendmsg'] = {
43+
init: function() {
44+
this.appendValueInput("value_")
45+
.setCheck(null)
46+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_FROM, "從樂高")
47+
.appendField(new Blockly.FieldVariable("adapter"), "var_")
48+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_SEND, "傳送")
49+
.appendField(new Blockly.FieldDropdown([
50+
[Blockly.Msg.WEBDUINO_EV3BT_TEXT, "Text"],
51+
[Blockly.Msg.WEBDUINO_EV3BT_NUM, "Number"],
52+
[Blockly.Msg.WEBDUINO_EV3BT_LOGIC, "Logic"]
53+
]), "msgtype")
54+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_SEND_TITLE, "格式,傳送訊息標題為")
55+
.appendField(new Blockly.FieldTextInput("myMsg"), "title_")
56+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_SEND_TEXT, ",傳送資料為");
57+
this.setPreviousStatement(true, null);
58+
this.setNextStatement(true, null);
59+
this.setColour(65);
60+
this.setTooltip('');
61+
this.setHelpUrl('http://www.example.com/');
62+
}
63+
};
64+
65+
66+
//https://blockly-demo.appspot.com/static/demos/blockfactory_old/index.html#4uh58r
67+
Blockly.Blocks['ev3bt_recv'] = {
68+
init: function() {
69+
this.appendDummyInput()
70+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_FROM, "從樂高")
71+
.appendField(new Blockly.FieldVariable("adapter"), "name_")
72+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_RECV_TITLE, "接收訊息資料 , 訊息標題")
73+
.appendField(new Blockly.FieldTextInput("title"), "title");
74+
this.appendStatementInput("do")
75+
.setCheck(null)
76+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_RUN, "執行");
77+
this.setPreviousStatement(true, null);
78+
this.setNextStatement(true, null);
79+
this.setColour(65);
80+
this.setTooltip('');
81+
this.setHelpUrl('https://webduino.io');
82+
}
83+
};
84+
85+
86+
Blockly.Blocks['ev3bt_getmsg'] = {
87+
init: function() {
88+
this.appendDummyInput()
89+
.appendField(new Blockly.FieldVariable("adapter"), "var_")
90+
.appendField(Blockly.Msg.WEBDUINO_EV3BT_GET_MSG, "取得目前訊息資料");
91+
this.setInputsInline(true);
92+
this.setOutput(true, null);
93+
this.setColour(65);
94+
this.setTooltip('');
95+
this.setHelpUrl('https://webduino.io');
96+
}
97+
};

blockly/javascript.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
Blockly.JavaScript['ev3bt_new'] = function(block) {
2+
var dropdown_rx_ = block.getFieldValue('rx_');
3+
var dropdown_tx_ = block.getFieldValue('tx_');
4+
var code = 'getEV3BT(board,' + dropdown_rx_ + ',' + dropdown_tx_ + ')';
5+
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
6+
};
7+
8+
Blockly.JavaScript['ev3bt_sendmsg'] = function(block) {
9+
var variable_var_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('var_'), Blockly.Variables.NAME_TYPE);
10+
var dropdown_msgtype = block.getFieldValue('msgtype');
11+
var text_title = block.getFieldValue('title_');
12+
var value_value_ = Blockly.JavaScript.valueToCode(block, 'value_', Blockly.JavaScript.ORDER_ATOMIC);
13+
var code = variable_var_ + '["send'+dropdown_msgtype+'"]("' + text_title + '",' + value_value_ + ');\n';
14+
return code;
15+
};
16+
17+
Blockly.JavaScript['ev3bt_recv'] = function(block) {
18+
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
19+
var text_title = block.getFieldValue('title');
20+
var statements_do = Blockly.JavaScript.statementToCode(block, 'do');
21+
var code = variable_name_ + '.on("' + text_title + '" , function(data){\n' +
22+
//variable_name_ + '.content = data;\n' +
23+
statements_do + '});\n';
24+
return code;
25+
};
26+
27+
Blockly.JavaScript['ev3bt_getmsg'] = function(block) {
28+
var variable_var_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('var_'), Blockly.Variables.NAME_TYPE);
29+
var code = variable_var_ + '.content';
30+
return [code, Blockly.JavaScript.ORDER_NONE];
31+
};

blockly/msg/blocks/en.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// LEGO ev3
2+
Blockly.Msg.WEBDUINO_EV3BT = "Use Bluetooth Connect to LEGO EV3 , Rx pin ";
3+
Blockly.Msg.WEBDUINO_EV3BT_FROM = "set ";
4+
Blockly.Msg.WEBDUINO_EV3BT_TX = " Tx pin ";
5+
Blockly.Msg.WEBDUINO_EV3BT_SEND_TITLE = "Tpye , MsgTitle:";
6+
Blockly.Msg.WEBDUINO_EV3BT_RECV_TITLE = "receive Message , MsgTitle:";
7+
Blockly.Msg.WEBDUINO_EV3BT_SEND_TEXT = " MsgContent:";
8+
Blockly.Msg.WEBDUINO_EV3BT_SEND = "send";
9+
Blockly.Msg.WEBDUINO_EV3BT_RUN = "Run";
10+
Blockly.Msg.WEBDUINO_EV3BT_TEXT = "Text";
11+
Blockly.Msg.WEBDUINO_EV3BT_NUM = "Number";
12+
Blockly.Msg.WEBDUINO_EV3BT_LOGIC = "Logic";
13+
Blockly.Msg.WEBDUINO_EV3BT_GET_MSG = "MsgContent";

blockly/msg/blocks/zh-hans.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// LEGO ev3
2+
Blockly.Msg.WEBDUINO_EV3BT = "使用藍牙連線到樂高 EV3 , 接收腳 ";
3+
Blockly.Msg.WEBDUINO_EV3BT_FROM = "設定";
4+
Blockly.Msg.WEBDUINO_EV3BT_TX = " 傳送腳";
5+
Blockly.Msg.WEBDUINO_EV3BT_SEND_TITLE = "格式,傳送訊息標題為";
6+
Blockly.Msg.WEBDUINO_EV3BT_SEND_TEXT = ",傳送訊息內容為";
7+
Blockly.Msg.WEBDUINO_EV3BT_RECV_TITLE = "接收訊息內容 , 訊息標題為";
8+
Blockly.Msg.WEBDUINO_EV3BT_SEND = "傳送";
9+
Blockly.Msg.WEBDUINO_EV3BT_RUN = "執行";
10+
Blockly.Msg.WEBDUINO_EV3BT_TEXT = "文字";
11+
Blockly.Msg.WEBDUINO_EV3BT_NUM = "數字";
12+
Blockly.Msg.WEBDUINO_EV3BT_LOGIC = "邏輯";
13+
Blockly.Msg.WEBDUINO_EV3BT_GET_MSG = "訊息內容";

blockly/msg/blocks/zh-hant.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// LEGO ev3
2+
Blockly.Msg.WEBDUINO_EV3BT = "使用藍牙連線到樂高 EV3 , 接收腳 ";
3+
Blockly.Msg.WEBDUINO_EV3BT_FROM = "設定";
4+
Blockly.Msg.WEBDUINO_EV3BT_TX = " 傳送腳";
5+
Blockly.Msg.WEBDUINO_EV3BT_SEND_TITLE = "格式,傳送訊息標題為";
6+
Blockly.Msg.WEBDUINO_EV3BT_SEND_TEXT = ",訊息內容為";
7+
Blockly.Msg.WEBDUINO_EV3BT_RECV_TITLE = "接收訊息內容 , 訊息標題為";
8+
Blockly.Msg.WEBDUINO_EV3BT_SEND = "傳送";
9+
Blockly.Msg.WEBDUINO_EV3BT_RUN = "執行";
10+
Blockly.Msg.WEBDUINO_EV3BT_TEXT = "文字";
11+
Blockly.Msg.WEBDUINO_EV3BT_NUM = "數字";
12+
Blockly.Msg.WEBDUINO_EV3BT_LOGIC = "邏輯";
13+
Blockly.Msg.WEBDUINO_EV3BT_GET_MSG = "訊息內容";

blockly/msg/en.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MSG.catEV3BT = "Connect Lego EV3";

0 commit comments

Comments
 (0)