Skip to content

Commit f61ede0

Browse files
author
Ke, Mingze
committed
Added I/O pins
1 parent 3f933bc commit f61ede0

8 files changed

Lines changed: 175 additions & 15 deletions

File tree

blocks/msg/en.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,18 @@ Blockly.Msg.WEBDUINO_BOARD_IF_ERROR = "When board goes offline";
164164
Blockly.Msg.WEBDUINO_BOARD_ERROR_DO = "do:";
165165
Blockly.Msg.WEBDUINO_BOARD_SAMPLING = " Sampling";
166166

167+
Blockly.Msg.WEBDUINO_PIN = "Pin";
168+
Blockly.Msg.WEBDUINO_PIN_ON = "On";
169+
Blockly.Msg.WEBDUINO_PIN_READ = "Read";
170+
Blockly.Msg.WEBDUINO_PIN_WRITE = "Write";
171+
Blockly.Msg.WEBDUINO_PIN_VALUE = "value";
172+
Blockly.Msg.WEBDUINO_PIN_SET = "Set";
173+
Blockly.Msg.WEBDUINO_PIN_MODE = "Mode";
174+
Blockly.Msg.WEBDUINO_PIN_DIN = "Digital Input";
175+
Blockly.Msg.WEBDUINO_PIN_DOUT = "Digital Output";
176+
Blockly.Msg.WEBDUINO_PIN_AIN = "Analog Input";
177+
Blockly.Msg.WEBDUINO_PIN_AOUT = "Analog Output (PWM)";
178+
167179
Blockly.Msg.WEBDUINO_LED = "LED";
168180
Blockly.Msg.WEBDUINO_PIN = "pin";
169181
Blockly.Msg.WEBDUINO_LED_PIN = "pin";

blocks/msg/zh-hant.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,20 @@ Blockly.Msg.WEBDUINO_BOARD_IF_ERROR = "如果斷線";
182182
Blockly.Msg.WEBDUINO_BOARD_ERROR_DO = "執行";
183183
Blockly.Msg.WEBDUINO_BOARD_SAMPLING = " 類比取樣";
184184

185+
// I/O Pins
186+
187+
Blockly.Msg.WEBDUINO_PIN = "腳位";
188+
Blockly.Msg.WEBDUINO_PIN_ON = "於";
189+
Blockly.Msg.WEBDUINO_PIN_READ = "讀取";
190+
Blockly.Msg.WEBDUINO_PIN_WRITE = "寫入";
191+
Blockly.Msg.WEBDUINO_PIN_VALUE = "數值";
192+
Blockly.Msg.WEBDUINO_PIN_SET = "設定";
193+
Blockly.Msg.WEBDUINO_PIN_MODE = "模式";
194+
Blockly.Msg.WEBDUINO_PIN_DIN = "數位輸入";
195+
Blockly.Msg.WEBDUINO_PIN_DOUT = "數位輸出";
196+
Blockly.Msg.WEBDUINO_PIN_AIN = "類比輸入";
197+
Blockly.Msg.WEBDUINO_PIN_AOUT = "類比輸出 (PWM)";
198+
185199
// LED
186200

187201
Blockly.Msg.WEBDUINO_LED = "LED 燈";

blocks/webduino.js

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,7 @@ Blockly.Blocks['board_ready'] = {
673673
["50 ms", "50"],
674674
["75 ms", "75"],
675675
["100 ms", "100"],
676+
["250 ms", "250"],
676677
["500 ms", "500"],
677678
["1 sec", "1000"]
678679
]), "rate_")
@@ -759,10 +760,10 @@ Blockly.Blocks['board_pin_state'] = {
759760
}
760761
};
761762

762-
Blockly.Blocks['pin_new'] = {
763+
Blockly.Blocks['pin_get'] = {
763764
init: function () {
764765
this.appendDummyInput()
765-
.appendField(Blockly.Msg.WEBDUINO_PIN, "pin")
766+
.appendField(Blockly.Msg.WEBDUINO_PIN, "Pin")
766767
.appendField(new Blockly.FieldDropdown([
767768
["2", "2"],
768769
["3", "3"],
@@ -790,6 +791,71 @@ Blockly.Blocks['pin_new'] = {
790791
}
791792
};
792793

794+
Blockly.Blocks['pin_get_num'] = {
795+
init: function () {
796+
this.appendValueInput("number_")
797+
.setCheck("Number")
798+
.appendField(Blockly.Msg.WEBDUINO_PIN, "Pin");
799+
this.appendValueInput("board_")
800+
.setCheck("String")
801+
.appendField(Blockly.Msg.WEBDUINO_PIN_ON, "On")
802+
.appendField(Blockly.Msg.WEBDUINO_BOARD, "Board");
803+
this.setInputsInline(true);
804+
this.setOutput(true);
805+
this.setColour(230);
806+
this.setTooltip('');
807+
this.setHelpUrl('http://www.example.com/');
808+
}
809+
};
810+
811+
Blockly.Blocks['pin_set_mode'] = {
812+
init: function () {
813+
this.appendDummyInput()
814+
.appendField(Blockly.Msg.WEBDUINO_PIN_SET, "Set")
815+
.appendField(new Blockly.FieldVariable("pin"), "pin_")
816+
.appendField(Blockly.Msg.WEBDUINO_PIN_MODE, "Mode")
817+
.appendField(new Blockly.FieldDropdown([
818+
[Blockly.Msg.WEBDUINO_PIN_DIN, "0"],
819+
[Blockly.Msg.WEBDUINO_PIN_DOUT, "1"],
820+
[Blockly.Msg.WEBDUINO_PIN_AIN, "2"],
821+
[Blockly.Msg.WEBDUINO_PIN_AOUT, "3"]
822+
]), "mode_");
823+
this.setInputsInline(true);
824+
this.setPreviousStatement(true);
825+
this.setNextStatement(true);
826+
this.setColour(65);
827+
this.setTooltip('');
828+
this.setHelpUrl('http://www.example.com/');
829+
}
830+
};
831+
832+
Blockly.Blocks['pin_read'] = {
833+
init: function () {
834+
this.appendDummyInput()
835+
.appendField(Blockly.Msg.WEBDUINO_PIN_READ)
836+
.appendField(new Blockly.FieldVariable("pin"), "pin_")
837+
.appendField(Blockly.Msg.WEBDUINO_PIN_VALUE);
838+
this.setOutput(true);
839+
this.setColour(65);
840+
this.setTooltip('');
841+
this.setHelpUrl('http://www.example.com/');
842+
}
843+
};
844+
845+
Blockly.Blocks['pin_write'] = {
846+
init: function () {
847+
this.appendValueInput("value_")
848+
.appendField(Blockly.Msg.WEBDUINO_PIN_WRITE)
849+
.appendField(new Blockly.FieldVariable("pin"), "pin_")
850+
.appendField(Blockly.Msg.WEBDUINO_PIN_VALUE);
851+
this.setPreviousStatement(true);
852+
this.setNextStatement(true);
853+
this.setColour(65);
854+
this.setTooltip('');
855+
this.setHelpUrl('http://www.example.com/');
856+
}
857+
};
858+
793859
Blockly.Blocks['led_new'] = {
794860
init: function () {
795861
this.appendDummyInput()

generators/webduino.js

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -612,20 +612,45 @@ Blockly.JavaScript['board_pin_state'] = function (block) {
612612
return [code, Blockly.JavaScript.ORDER_ATOMIC];
613613
};
614614

615-
616-
Blockly.JavaScript['led_new'] = function (block) {
615+
Blockly.JavaScript['pin_get'] = function (block) {
617616
var dropdown_pin_ = block.getFieldValue('pin_');
618-
var code = 'getLed(board, ' + dropdown_pin_ + ')';
617+
var code = 'getPin(board, ' + dropdown_pin_ + ')';
618+
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
619+
};
620+
621+
Blockly.JavaScript['pin_get_num'] = function (block) {
622+
var value_board_ = Blockly.JavaScript.valueToCode(block, 'board_', Blockly.JavaScript.ORDER_ATOMIC);
623+
var value_number_ = Blockly.JavaScript.valueToCode(block, 'number_', Blockly.JavaScript.ORDER_ATOMIC);
624+
var code = 'getPin(' + value_board_ + ', ' + value_number_ + ')';
619625
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
620626
};
621627

622-
Blockly.JavaScript['pin_new'] = function (block) {
628+
Blockly.JavaScript['pin_set_mode'] = function (block) {
629+
var variable_pin_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('pin_'), Blockly.Variables.NAME_TYPE);
630+
var dropdown_mode_ = block.getFieldValue('mode_');
631+
var code = variable_pin_ + '.setMode(' + dropdown_mode_ + ');\n';
632+
return code;
633+
};
634+
635+
Blockly.JavaScript['pin_read'] = function (block) {
636+
var variable_pin_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('pin_'), Blockly.Variables.NAME_TYPE);
637+
var code = 'await ' + variable_pin_ + '.read()';
638+
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
639+
};
640+
641+
Blockly.JavaScript['pin_write'] = function (block) {
642+
var variable_pin_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('pin_'), Blockly.Variables.NAME_TYPE);
643+
var value_value_ = Blockly.JavaScript.valueToCode(block, 'value_', Blockly.JavaScript.ORDER_ATOMIC);
644+
var code = variable_pin_ + '.write(' + value_value_ + ');\n';
645+
return code;
646+
};
647+
648+
Blockly.JavaScript['led_new'] = function (block) {
623649
var dropdown_pin_ = block.getFieldValue('pin_');
624650
var code = 'getLed(board, ' + dropdown_pin_ + ')';
625651
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
626652
};
627653

628-
629654
Blockly.JavaScript['led_state'] = function (block) {
630655
var variable_led_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('led_'), Blockly.Variables.NAME_TYPE);
631656
var dropdown_state_ = block.getFieldValue('state_');

msg/en.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var MSG = {
3030
catExec: "Delay",
3131
catRepeat: "Repeat",
3232
catBoard: "Board",
33+
catPin: "I/O Pins",
3334
catLed: "Led",
3435
catRelay: "Relay",
3536
catRGBLed: "RGBLed",

msg/zh-hant.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var MSG = {
3030
catExec: "等待",
3131
catRepeat: "重複",
3232
catBoard: "開發板",
33+
catPin: "I/O 腳位",
3334
catLed: "LED 燈",
3435
catRelay: "繼電器",
3536
catRGBLed: "三色 LED",

views/index.handlebars

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -446,12 +446,47 @@
446446
<value name="device_">
447447
<block type="text"></block>
448448
</value>
449+
<field name="rate_">250</field>
449450
</block>
450451
<block type="all_board_ready"></block>
451452
<block type="board_query_pin_state"></block>
452453
<block type="board_pin_state"></block>
453454
<block type="board_error"></block>
454455
</category>
456+
<category id="catPin">
457+
<block type="variables_set">
458+
<field name="VAR">pin</field>
459+
<value name="VALUE">
460+
<block type="pin_get">
461+
<field name="pin_">12</field>
462+
</block>
463+
</value>
464+
</block>
465+
<block type="variables_set">
466+
<field name="VAR">pin</field>
467+
<value name="VALUE">
468+
<block type="pin_get_num">
469+
<value name="board_">
470+
<block type="text"></block>
471+
</value>
472+
<value name="number_">
473+
<block type="math_number">
474+
<field name="NUM">12</field>
475+
</block>
476+
</value>
477+
</block>
478+
</value>
479+
</block>
480+
<block type="pin_set_mode"></block>
481+
<block type="pin_read"></block>
482+
<block type="pin_write">
483+
<value name="value_">
484+
<block type="math_number">
485+
<field name="NUM">0</field>
486+
</block>
487+
</value>
488+
</block>
489+
</category>
455490
<category id="catMenu1">
456491
<category id="catLed">
457492
<block type="variables_set">
@@ -462,14 +497,6 @@
462497
</block>
463498
</value>
464499
</block>
465-
<block type="variables_set">
466-
<field name="VAR">pin</field>
467-
<value name="VALUE">
468-
<block type="pin_new">
469-
<field name="pin_">10</field>
470-
</block>
471-
</value>
472-
</block>
473500
<block type="led_state">
474501
<field name="led_">led</field>
475502
</block>

webduino-blockly.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@
6161
return boards;
6262
}
6363

64+
function getPin(board, pinNum) {
65+
if (typeof board === 'string') {
66+
boards.some(function (b) {
67+
var match = b._options.device === board;
68+
if (match) {
69+
board = b;
70+
}
71+
return match;
72+
});
73+
}
74+
return board ? board.getPin(pinNum) : undef;
75+
}
76+
6477
function getLed(board, pin) {
6578
return new webduino.module.Led(board, board.getDigitalPin(pin));
6679
}
@@ -331,6 +344,7 @@
331344
scope.boardReady = boardReady;
332345
scope.disconnectBoards = disconnectBoards;
333346
scope.getBoards = getBoards;
347+
scope.getPin = getPin;
334348
scope.getLed = getLed;
335349
scope.getRelay = getRelay;
336350
scope.getRGBLed = getRGBLed;

0 commit comments

Comments
 (0)