Skip to content

Commit 4fd4c7f

Browse files
committed
add ultrasonic tutorial 6 ( youtube speed )
1 parent 383475e commit 4fd4c7f

8 files changed

Lines changed: 185 additions & 22 deletions

File tree

blocks/msg/en.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ Blockly.Msg.WEBDUINO_ULTRASONIC_DISTANCE = "'s distance ( cm )";
5454
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE = "Set Youtube:";
5555
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET = "Set";
5656
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VOLUME = "Volume:";
57+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SPEED = "Speed:";
58+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SLOW = "Slow";
59+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_NORMAL = "Normal";
60+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_FAST = "Fast";
61+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VERYFAST = "Very Fast";
62+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SUPERFAST = "Super Fast";
5763

5864
Blockly.Msg.WEBDUINO_DHT_NEW = "DHT , pin:";
5965
Blockly.Msg.WEBDUINO_DHT_GET = "detect temperature and humidity over every";

blocks/msg/zh-hant.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ Blockly.Msg.WEBDUINO_ULTRASONIC_DISTANCE = "所截取的距離 ( 公分 )";
8181
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE = "設定 Youtube:";
8282
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET = "設定";
8383
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VOLUME = "音量:";
84+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SPEED = " 的播放速度:";
85+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SLOW = "慢";
86+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_NORMAL = "正常";
87+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_FAST = "快";
88+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VERYFAST = "很快";
89+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SUPERFAST = "超級快";
8490

8591
Blockly.Msg.WEBDUINO_DHT_NEW = "溫濕度傳感器,腳位:";
8692
Blockly.Msg.WEBDUINO_DHT_GET = "偵測溫濕度,每";

blocks/tutorials.js

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -371,12 +371,12 @@ Blockly.Blocks['ultrasonic_change_add_music'] = {
371371

372372
// https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#wbe3vd
373373
Blockly.Blocks['tutorial_youtube'] = {
374-
init: function() {
374+
init: function () {
375375
this.appendValueInput("name_")
376-
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE,"設定 Youtube:");
376+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE, "設定 Youtube:");
377377
this.appendDummyInput()
378-
.appendField(" ID:")
379-
.appendField(new Blockly.FieldTextInput("..."), "id_");
378+
.appendField(" ID:")
379+
.appendField(new Blockly.FieldTextInput("..."), "id_");
380380
this.setPreviousStatement(true);
381381
this.setNextStatement(true);
382382
this.setTooltip('');
@@ -387,11 +387,33 @@ Blockly.Blocks['tutorial_youtube'] = {
387387

388388
// https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#kqjbv8
389389
Blockly.Blocks['tutorial_youtube_volume'] = {
390-
init: function() {
390+
init: function () {
391391
this.appendValueInput("volume_")
392-
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET,"設定")
393-
.appendField(new Blockly.FieldVariable("youtube"), "name_")
394-
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VOLUME,"音量:");
392+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET, "設定")
393+
.appendField(new Blockly.FieldVariable("youtube"), "name_")
394+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VOLUME, "音量:");
395+
this.setPreviousStatement(true);
396+
this.setNextStatement(true);
397+
this.setTooltip('');
398+
this.setColour(Blockly.Blocks.colour.HUE);
399+
this.setHelpUrl('http://www.example.com/');
400+
}
401+
};
402+
403+
// https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#tih6od
404+
Blockly.Blocks['tutorial_youtube_speed'] = {
405+
init: function () {
406+
this.appendDummyInput()
407+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET, "設定")
408+
.appendField(new Blockly.FieldVariable("youtube"), "name_")
409+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SPEED, " 的播放速度:")
410+
.appendField(new Blockly.FieldDropdown([
411+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SLOW, "0.5"],
412+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_NORMAL, "1"],
413+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_FAST, "1.25"],
414+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VERYFAST, "1.5"],
415+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SUPERFAST, "2"]
416+
]), "speed_");
395417
this.setPreviousStatement(true);
396418
this.setNextStatement(true);
397419
this.setTooltip('');
@@ -731,9 +753,9 @@ o888bood8P' `YbodP' .8888888888P .8888888888P o888ooooood8 o888o o888o
731753
Blockly.Blocks['tutorial_buzzer_1'] = {
732754
init: function () {
733755
this.appendValueInput("var_")
734-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SHOW,"顯示");
756+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SHOW, "顯示");
735757
this.appendDummyInput()
736-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SHOW_NOTESANDTEMPOS,"的音符和節奏");
758+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_SHOW_NOTESANDTEMPOS, "的音符和節奏");
737759
this.setPreviousStatement(true);
738760
this.setNextStatement(true);
739761
this.setTooltip('');
@@ -746,15 +768,15 @@ Blockly.Blocks['tutorial_buzzer_1'] = {
746768
Blockly.Blocks['tutorial_buzzer_3'] = {
747769
init: function () {
748770
this.appendDummyInput()
749-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_CLICK,"點選")
771+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_CLICK, "點選")
750772
.appendField(new Blockly.FieldDropdown([
751773
["music1", "m1"],
752774
["music2", "m2"],
753775
["music3", "m3"],
754776
["stop", "stop"]
755777
]), "btn_");
756778
this.appendStatementInput("do_")
757-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_DO,"執行:");
779+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_DO, "執行:");
758780
this.setPreviousStatement(true);
759781
this.setNextStatement(true);
760782
this.setTooltip('');

generators/tutorials.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -269,12 +269,12 @@ Blockly.JavaScript['tutorial_youtube'] = function (block) {
269269
var value_name_ = Blockly.JavaScript.valueToCode(block, 'name_', Blockly.JavaScript.ORDER_ATOMIC);
270270
var text_id_ = block.getFieldValue('id_');
271271
var code = 'var checkYoutubeLoad=0;\n' +
272-
'onYouTubeIframeAPIReady();\n'+
272+
'onYouTubeIframeAPIReady();\n' +
273273
'function onYouTubeIframeAPIReady() {\n' +
274274
' ' + value_name_ + ' = new YT.Player("player", {\n' +
275275
' height: "240",\n' +
276276
' width: "100%",\n' +
277-
' videoId: "'+text_id_+'",\n' +
277+
' videoId: "' + text_id_ + '",\n' +
278278
' playerVars: {\n' +
279279
' "autoplay": 1,\n' +
280280
' "controls": 1},\n' +
@@ -300,21 +300,30 @@ Blockly.JavaScript['tutorial_youtube'] = function (block) {
300300
return code;
301301
};
302302

303-
Blockly.JavaScript['tutorial_youtube_volume'] = function(block) {
303+
Blockly.JavaScript['tutorial_youtube_volume'] = function (block) {
304304
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
305305
var value_volume_ = Blockly.JavaScript.valueToCode(block, 'volume_', Blockly.JavaScript.ORDER_ATOMIC);
306306
var varA = Blockly.JavaScript.variableDB_.getDistinctName(
307307
'varA', Blockly.Variables.NAME_TYPE);
308-
var code = 'var '+varA+' = '+value_volume_+';\n'+
309-
' if('+varA+'>=100){\n'+
310-
' '+varA+'=100;\n'+
311-
' }\n'+
312-
' if(checkYoutubeLoad==1){\n'+
313-
' '+variable_name_+'.setVolume('+varA+');\n'+
314-
' }\n';
308+
var code = 'var ' + varA + ' = ' + value_volume_ + ';\n' +
309+
' if(' + varA + '>=100){\n' +
310+
' ' + varA + '=100;\n' +
311+
' }\n' +
312+
' if(checkYoutubeLoad==1){\n' +
313+
' ' + variable_name_ + '.setVolume(' + varA + ');\n' +
314+
' }\n';
315315
return code;
316316
};
317317

318+
319+
Blockly.JavaScript['tutorial_youtube_speed'] = function (block) {
320+
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
321+
var dropdown_speed_ = block.getFieldValue('speed_');
322+
var code = ' if(checkYoutubeLoad==1){\n' +
323+
' ' + variable_name_ + '.setPlaybackRate(' + dropdown_speed_ + ');\n' +
324+
' }\n';
325+
return code;
326+
};
318327
/*
319328
oooooooooo. ooooo ooo ooooooooooooo ooooooooooooo .oooooo. ooooo ooo
320329
`888' `Y8b `888' `8' 8' 888 `8 8' 888 `8 d8P' `Y8b `888b. `8'

index-tutorials.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ <h4><a href="./?lang=zh-hant&page=tutorials/ultrasonic-4" target="_blank">利用
8787
<h4><a href="./?lang=zh-hant&page=tutorials/ultrasonic-5" target="_blank">利用超音波傳感器控制 Youtube 音量大小</a><i>new</i></h4> <div>(
8888
<!-- <a href="#" target="_blank">影片教學</a> | --><a href="./?lang=zh-hant&page=tutorials/ultrasonic-5#-JwgqGd0PtGFPC8GNcfY" target="_blank">解答</a> )</div>
8989
</li>
90+
<li>
91+
<h4><a href="./?lang=zh-hant&page=tutorials/ultrasonic-6" target="_blank">利用超音波傳感器控制 Youtube 播放速度</a><i>new</i></h4> <div>(
92+
<!-- <a href="#" target="_blank">影片教學</a> | --><a href="./?lang=zh-hant&page=tutorials/ultrasonic-6#-JxEs_Z0dmBi0nu3Pylw" target="_blank">解答</a> )</div>
93+
</li>
9094
</ul>
9195
<br/>
9296
<h3>按鈕</h3>

msg/tutorials/ultrasonic-6/en.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
MSG.title = "Webduino Blockly Chapter 3-6 : Ultrasonic and Youtube";
2+
MSG.subTitle = "Chapter 3-6 : Ultrasonic and Youtube";
3+
MSG.demoDescription = "Using Ultrasonic sensors, control youtube speed.";
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
MSG.title = "Webduino Blockly 課程 3-6:超音波傳感器控制 Youtube 播放速度";
2+
MSG.subTitle = "課程 3-6:超音波傳感器控制 Youtube 播放速度";
3+
MSG.demoDescription = "使用超音波傳感器,控制 youtube 的速度變化。";
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<script src="copyCode.js"></script>
2+
3+
<link rel="stylesheet" href="tutorials.css">
4+
5+
<style>
6+
7+
</style>
8+
9+
<header>
10+
<a href="index.html" title="Webduino Blockly"><img class="logo" src="media/logo.png"></a>
11+
<h1>Webduino Blockly {{subTitle}}</h1>
12+
<span>( <a href="index-tutorials.html" target="_blank">{{backIndex}}</a> )</span>
13+
<div id="update">{{update}}</div>
14+
<select id="languageMenu"></select>
15+
</header>
16+
<div id="demoArea">
17+
<a href="https://webduino.io/" id="cuteman01" target="_blank"></a>
18+
<div id="demoTitle">{{demoTitle}}</div>
19+
<a href="http://bin.webduino.io/wab/edit?html,js,output" id="linkToBin" target="_blank"><img src="media/dave.min.svg">{{linkToBin}}</a>
20+
<div id="demoDescription">{{demoDescription}}</div>
21+
<div id="player"></div>
22+
</div>
23+
<table id="tutorials-table" class="nav">
24+
<tr>
25+
<td colspan=2>
26+
<table width="100%">
27+
<tr id="tabRow" height="1em">
28+
<td id="tab_blocks" class="tabon">{{blocks}}</td>
29+
<td class="tabmin">&nbsp;</td>
30+
<td id="tab_javascript" class="taboff">JavaScript</td>
31+
<td id="copyCode" class="jsClick" style="display:none;" data-clipboard-target="content_javascript" data-tooltip="Copy to clipboard"><div><img src="media/copy.png"></div></td>
32+
<td class="tabmin">&nbsp;</td>
33+
<td id="tab_xml" class="taboff" style="display:none;">XML</td>
34+
<td class="tabmax">
35+
<button id="trashButton" class="notext" title="{{trashTooltip}}">
36+
<img src='media/1x1.gif' class="trash icon21">
37+
</button>
38+
<button id="linkButton" class="notext" title="{{linkTooltip}}">
39+
<img src='media/1x1.gif' class="link icon21">
40+
</button>
41+
<button id="runButton" class="notext primary" title="{{runTooltip}}">
42+
<img src='media/1x1.gif' class="run icon21">
43+
</button>
44+
</td>
45+
</tr>
46+
</table>
47+
</td>
48+
</tr>
49+
<tr>
50+
<td height="99%" colspan=2 id="content_area">
51+
</td>
52+
</tr>
53+
</table>
54+
55+
<div id="content_blocks" class="content"></div>
56+
<pre id="content_javascript" class="content"></pre>
57+
<textarea id="content_xml" class="content" wrap="off"></textarea>
58+
59+
<xml id="toolbox" style="display: none">
60+
<category id="catVariables" custom="VARIABLE"></category>
61+
<sep></sep>
62+
<category id="catLogic">
63+
<block type="controls_if"></block>
64+
<block type="logic_compare"></block>
65+
<block type="logic_operation"></block>
66+
</category>
67+
<category id="catMath">
68+
<block type="math_number"></block>
69+
</category>
70+
<sep></sep>
71+
<category id="catBoard">
72+
<block type="board_ready">
73+
<value name="device_">
74+
<block type="text"></block>
75+
</value>
76+
</block>
77+
</category>
78+
<sep></sep>
79+
<category id="catUltraSonic">
80+
<block type="variables_set">
81+
<field name="VAR">ultrasonic</field>
82+
<value name="VALUE">
83+
<block type="ultrasonic_new">
84+
<field name="trig_">11</field>
85+
<field name="echo_">10</field>
86+
</block>
87+
</value>
88+
</block>
89+
<block type="ultrasonic_get">
90+
<value name="time">
91+
<block type="math_number">
92+
<field name="NUM">500</field>
93+
</block>
94+
</value>
95+
</block>
96+
<block type="ultrasonic_distance"></block>
97+
</category>
98+
<category id="catTutorials">
99+
<block type="tutorial_youtube">
100+
<value name="name_">
101+
<block type="variables_get">
102+
<field name="VAR">youtube</field>
103+
</block>
104+
</value>
105+
</block>
106+
<block type="tutorial_youtube_volume"></block>
107+
<block type="tutorial_youtube_speed"></block>
108+
</category>
109+
<sep></sep>
110+
</xml>

0 commit comments

Comments
 (0)