Skip to content

Commit 26f4b1c

Browse files
committed
add keyboard blocks
1 parent e363aa4 commit 26f4b1c

7 files changed

Lines changed: 252 additions & 17 deletions

File tree

blocks/msg/en.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,17 @@ Blockly.Msg.WEBDUINO_TIMER_DO = "do";
7979
Blockly.Msg.WEBDUINO_DELAY = "delay";
8080
Blockly.Msg.WEBDUINO_DELAY_SECONDS = "seconds";
8181

82+
// Keyboard
83+
84+
Blockly.Msg.WEBDUINO_KEYBOARD = "Keyboard event";
85+
Blockly.Msg.WEBDUINO_KEYBOARD_KEYDOWN = "If press";
86+
Blockly.Msg.WEBDUINO_KEYBOARD_DO = ", do:";
87+
Blockly.Msg.WEBDUINO_KEYBOARD_SPACE = "space";
88+
Blockly.Msg.WEBDUINO_KEYBOARD_UP = "up";
89+
Blockly.Msg.WEBDUINO_KEYBOARD_DOWN = "down";
90+
Blockly.Msg.WEBDUINO_KEYBOARD_LEFT = "left";
91+
Blockly.Msg.WEBDUINO_KEYBOARD_RIGHT = "right";
92+
8293
Blockly.Msg.WEBDUINO_STATUS_REPEAT = "Status Change, repeat:";
8394
Blockly.Msg.WEBDUINO_STATUS_NUM = "";
8495
Blockly.Msg.WEBDUINO_STATUS_REPEAT_STATUSNUM = "Status ";
@@ -237,6 +248,10 @@ Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC1 = "Super Mario";
237248
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC2 = "DoReMi";
238249
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC3 = "Big brother and father";
239250
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC4 = "Super Mario Chord";
251+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE = "Use";
252+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TONE = "play single sound, tone";
253+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE_PITCH = "pitch";
254+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TEMPOS = "tempo";
240255

241256
Blockly.Msg.WEBDUINO_FIREBASE_NAME = "< Firebase > name:";
242257
Blockly.Msg.WEBDUINO_FIREBASE_URL = ",url:";

blocks/msg/zh-hant.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,17 @@ Blockly.Msg.WEBDUINO_STATUS_FOREVER_NAME = "名稱:";
9696
Blockly.Msg.WEBDUINO_STATUS_REPEAT_STOP = "停止";
9797
Blockly.Msg.WEBDUINO_STATUS_REPEAT_STOPCONTENT = "的不停重複";
9898

99+
// Keyboard
100+
101+
Blockly.Msg.WEBDUINO_KEYBOARD = "偵測鍵盤行為";
102+
Blockly.Msg.WEBDUINO_KEYBOARD_KEYDOWN = "如果按下";
103+
Blockly.Msg.WEBDUINO_KEYBOARD_DO = ",執行:";
104+
Blockly.Msg.WEBDUINO_KEYBOARD_SPACE = "空白鍵";
105+
Blockly.Msg.WEBDUINO_KEYBOARD_UP = "上";
106+
Blockly.Msg.WEBDUINO_KEYBOARD_DOWN = "下";
107+
Blockly.Msg.WEBDUINO_KEYBOARD_LEFT = "左";
108+
Blockly.Msg.WEBDUINO_KEYBOARD_RIGHT = "右";
109+
99110
// Delay
100111

101112
Blockly.Msg.WEBDUINO_TIMER_AFTER = "在";
@@ -172,6 +183,10 @@ Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC1 = "超級瑪莉";
172183
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC2 = "真善美";
173184
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC3 = "哥哥爸爸真偉大";
174185
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC4 = "超級瑪莉和弦";
186+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE = "使用";
187+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TONE = "播放單音,音調";
188+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE_PITCH = "音高";
189+
Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TEMPOS = "節奏";
175190

176191
// Ultrasonic
177192

blocks/webduino.js

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,58 @@ Blockly.Blocks['buzzer_notes_tempos'] = {
13031303
}
13041304
};
13051305

1306+
Blockly.Blocks['buzzer_single'] = {
1307+
init: function () {
1308+
this.appendDummyInput()
1309+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE, "使用")
1310+
.appendField(new Blockly.FieldVariable("buzzer"), "var_")
1311+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TONE, "播放單音,音調")
1312+
.appendField(new Blockly.FieldDropdown([
1313+
["C", "C"],
1314+
["CS", "CS"],
1315+
["D", "D"],
1316+
["DS", "DS"],
1317+
["E", "E"],
1318+
["F", "F"],
1319+
["FS", "FS"],
1320+
["G", "G"],
1321+
["GS", "GS"],
1322+
["A", "A"],
1323+
["AS", "AS"],
1324+
["B", "B"]
1325+
]), "tone_")
1326+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE_PITCH, "音高")
1327+
.appendField(new Blockly.FieldDropdown([
1328+
["1", "1"],
1329+
["2", "2"],
1330+
["3", "3"],
1331+
["4", "4"],
1332+
["5", "5"],
1333+
["6", "6"],
1334+
["7", "7"]
1335+
]), "pitch_")
1336+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TEMPOS, "節奏")
1337+
.appendField(new Blockly.FieldDropdown([
1338+
["1", "1"],
1339+
["2", "2"],
1340+
["3", "3"],
1341+
["4", "4"],
1342+
["5", "5"],
1343+
["6", "6"],
1344+
["7", "7"],
1345+
["8", "8"],
1346+
["9", "9"],
1347+
["10", "10"]
1348+
]), "tempos_");
1349+
this.setInputsInline(false);
1350+
this.setPreviousStatement(true);
1351+
this.setNextStatement(true);
1352+
this.setTooltip('');
1353+
this.setColour(65);
1354+
this.setHelpUrl('http://www.example.com/');
1355+
}
1356+
};
1357+
13061358
// https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#vnhdso
13071359
Blockly.Blocks['buzzer_play'] = {
13081360
init: function () {
@@ -2490,3 +2542,108 @@ Blockly.Blocks['joystick_off'] = {
24902542
this.setHelpUrl('http://www.example.com/');
24912543
}
24922544
};
2545+
2546+
2547+
Blockly.Blocks['document_onkeydown'] = {
2548+
init: function () {
2549+
this.appendDummyInput()
2550+
.appendField(Blockly.Msg.WEBDUINO_KEYBOARD, "偵測鍵盤行為");
2551+
this.appendStatementInput("do_");
2552+
this.setInputsInline(false);
2553+
this.setPreviousStatement(true);
2554+
this.setNextStatement(true);
2555+
this.setTooltip('');
2556+
this.setColour(15);
2557+
this.setHelpUrl('http://www.example.com/');
2558+
}
2559+
};
2560+
2561+
Blockly.Blocks['document_alphabet_keycode'] = {
2562+
init: function () {
2563+
this.appendStatementInput("do_")
2564+
.appendField(Blockly.Msg.WEBDUINO_KEYBOARD_KEYDOWN, "如果按下")
2565+
.appendField(new Blockly.FieldDropdown([
2566+
["A", "65"],
2567+
["B", "66"],
2568+
["C", "67"],
2569+
["D", "68"],
2570+
["E", "69"],
2571+
["F", "70"],
2572+
["G", "71"],
2573+
["H", "72"],
2574+
["I", "73"],
2575+
["J", "74"],
2576+
["K", "75"],
2577+
["L", "76"],
2578+
["M", "77"],
2579+
["N", "78"],
2580+
["O", "79"],
2581+
["P", "80"],
2582+
["Q", "81"],
2583+
["R", "82"],
2584+
["S", "83"],
2585+
["T", "84"],
2586+
["U", "85"],
2587+
["V", "86"],
2588+
["W", "87"],
2589+
["X", "88"],
2590+
["Y", "89"],
2591+
["Z", "90"]
2592+
]), "keycode_")
2593+
.appendField(Blockly.Msg.WEBDUINO_KEYBOARD_DO, ",執行:");
2594+
this.setInputsInline(false);
2595+
this.setPreviousStatement(true);
2596+
this.setNextStatement(true);
2597+
this.setTooltip('');
2598+
this.setColour(35);
2599+
this.setHelpUrl('http://www.example.com/');
2600+
}
2601+
};
2602+
2603+
Blockly.Blocks['document_other_keycode'] = {
2604+
init: function () {
2605+
this.appendStatementInput("do_")
2606+
.appendField(Blockly.Msg.WEBDUINO_KEYBOARD_KEYDOWN, "如果按下")
2607+
.appendField(new Blockly.FieldDropdown([
2608+
[Blockly.Msg.WEBDUINO_KEYBOARD_SPACE, "32"],
2609+
["enter", "13"],
2610+
[Blockly.Msg.WEBDUINO_KEYBOARD_UP, , "38"],
2611+
[Blockly.Msg.WEBDUINO_KEYBOARD_DOWN, , "40"],
2612+
[Blockly.Msg.WEBDUINO_KEYBOARD_LEFT, , "37"],
2613+
[Blockly.Msg.WEBDUINO_KEYBOARD_RIGHT, , "39"],
2614+
["0", "48"],
2615+
["1", "49"],
2616+
["2", "50"],
2617+
["3", "51"],
2618+
["4", "52"],
2619+
["5", "53"],
2620+
["6", "54"],
2621+
["7", "55"],
2622+
["8", "56"],
2623+
["9", "57"],
2624+
["shift", "16"],
2625+
["alt", "18"],
2626+
["ctrl", "17"],
2627+
["command(R)", "93"],
2628+
["command(L)", "91"],
2629+
["tab", "9"],
2630+
["+ -", "187"],
2631+
["- _", "189"],
2632+
["{ [", "219"],
2633+
["} ]", "221"],
2634+
["|", "220"],
2635+
["; :", "186"],
2636+
["\' \"", "222"],
2637+
["< ,", "188"],
2638+
["> .", "190"],
2639+
["? /", "191"]
2640+
]), "keycode_")
2641+
.appendField(Blockly.Msg.WEBDUINO_KEYBOARD_DO, ",執行:");
2642+
this.setInputsInline(false);
2643+
this.setPreviousStatement(true);
2644+
this.setNextStatement(true);
2645+
this.setTooltip('');
2646+
this.setColour(35);
2647+
this.setHelpUrl('http://www.example.com/');
2648+
}
2649+
};

generators/webduino.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,16 @@ Blockly.JavaScript['buzzer_notes_tempos'] = function (block) {
737737
return code;
738738
};
739739

740+
Blockly.JavaScript['buzzer_single'] = function(block) {
741+
var variable_var_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('var_'), Blockly.Variables.NAME_TYPE);
742+
var dropdown_tone_ = block.getFieldValue('tone_');
743+
var dropdown_pitch_ = block.getFieldValue('pitch_');
744+
var dropdown_tempos_ = block.getFieldValue('tempos_');
745+
var code = variable_var_+'.play(["'+dropdown_tone_+dropdown_pitch_+'"],['+dropdown_tempos_+']);\n';
746+
return code;
747+
748+
};
749+
740750
Blockly.JavaScript['buzzer_play'] = function (block) {
741751
var variable_var_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('var_'), Blockly.Variables.NAME_TYPE);
742752
var value_play_music_ = Blockly.JavaScript.valueToCode(block, 'play_music_', Blockly.JavaScript.ORDER_ATOMIC);
@@ -1547,3 +1557,33 @@ Blockly.JavaScript['joystick_off'] = function (block) {
15471557
var code = variable_name_ + '.off("message",_read_);\n';
15481558
return code;
15491559
};
1560+
1561+
Blockly.JavaScript['document_onkeydown'] = function (block) {
1562+
var statements_do_ = Blockly.JavaScript.statementToCode(block, 'do_');
1563+
var code = 'document.onkeydown = function(e,c){\n' +
1564+
' c = e.keyCode;\n' +
1565+
' console.log(c);\n' +
1566+
' switch(c){\n' +
1567+
statements_do_ +
1568+
' }\n' +
1569+
'};\n';
1570+
return code;
1571+
};
1572+
1573+
Blockly.JavaScript['document_alphabet_keycode'] = function (block) {
1574+
var dropdown_keycode_ = block.getFieldValue('keycode_');
1575+
var statements_do_ = Blockly.JavaScript.statementToCode(block, 'do_');
1576+
var code = ' case ' + dropdown_keycode_ + ':\n' +
1577+
' ' + statements_do_ +
1578+
' break;\n';
1579+
return code;
1580+
};
1581+
1582+
Blockly.JavaScript['document_other_keycode'] = function (block) {
1583+
var dropdown_keycode_ = block.getFieldValue('keycode_');
1584+
var statements_do_ = Blockly.JavaScript.statementToCode(block, 'do_');
1585+
var code = ' case ' + dropdown_keycode_ + ':\n' +
1586+
' ' + statements_do_ +
1587+
' break;\n';
1588+
return code;
1589+
};

msg/en.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ var MSG = {
5353
catMenu1: "Components",
5454
catMenu2: "Sensors",
5555
catMenu3: "Toies",
56-
catControl: "Control",
56+
catSpeech: "Speech",
57+
catKeyCode: "Keyboard",
5758
catPlus: "Advanced",
5859
catStandard: "Standard",
5960
catMax7219: "LED Matrix",

msg/zh-hant.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ var MSG = {
5555
catMenu1: "元件模組",
5656
catMenu2: "傳感器",
5757
catMenu3: "玩具應用",
58-
catControl: "控制",
58+
catSpeech: "語音聲控",
59+
catKeyCode: "鍵盤行為",
5960
catPlus: "進階功能",
6061
catStandard: "基本功能",
6162
catMax7219: "LED 點矩陣",

views/index.handlebars

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,20 @@
386386
<block type="console"></block>
387387
<block type="getdate"></block>
388388
<block type="gettime"></block>
389+
<block type="temp_data_set">
390+
<value name="name_">
391+
<block type="text">
392+
<field name="TEXT">temp</field>
393+
</block>
394+
</value>
395+
</block>
396+
<block type="temp_data_get">
397+
<value name="name_">
398+
<block type="text">
399+
<field name="TEXT">temp</field>
400+
</block>
401+
</value>
402+
</block>
389403
</category>
390404
<category id="catExec">
391405
<block type="timer"></block>
@@ -408,7 +422,12 @@
408422
</block>
409423
<block type="status_repeat_stop"></block>
410424
</category>
411-
<category id="catControl">
425+
<category id="catKeyCode">
426+
<block type="document_onkeydown"></block>
427+
<block type="document_alphabet_keycode"></block>
428+
<block type="document_other_keycode"></block>
429+
</category>
430+
<category id="catSpeech">
412431
<block type="sound_recognition"></block>
413432
<block type="sound_recognition_check">
414433
<value name="text_">
@@ -424,20 +443,6 @@
424443
</block>
425444
</value>
426445
</block>
427-
<block type="temp_data_set">
428-
<value name="name_">
429-
<block type="text">
430-
<field name="TEXT">temp</field>
431-
</block>
432-
</value>
433-
</block>
434-
<block type="temp_data_get">
435-
<value name="name_">
436-
<block type="text">
437-
<field name="TEXT">temp</field>
438-
</block>
439-
</value>
440-
</block>
441446
</category>
442447
<sep></sep>
443448
</category>
@@ -555,6 +560,7 @@
555560
</block>
556561
</value>
557562
</block>
563+
<block type="buzzer_single"></block>
558564
<block type="buzzer_event"></block>
559565
<block type="buzzer_state"></block>
560566
</category>

0 commit comments

Comments
 (0)